OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <algorithm> | 5 #include <algorithm> |
6 #include <string> | 6 #include <string> |
7 | 7 |
8 #include "webkit/appcache/view_appcache_internals_job.h" | 8 #include "webkit/appcache/view_appcache_internals_job.h" |
9 | 9 |
10 #include "base/base64.h" | 10 #include "base/base64.h" |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 | 304 |
305 GURL ClearQuery(const GURL& url) { | 305 GURL ClearQuery(const GURL& url) { |
306 GURL::Replacements replacements; | 306 GURL::Replacements replacements; |
307 replacements.ClearQuery(); | 307 replacements.ClearQuery(); |
308 return url.ReplaceComponents(replacements); | 308 return url.ReplaceComponents(replacements); |
309 } | 309 } |
310 | 310 |
311 // Simple base class for the job subclasses defined here. | 311 // Simple base class for the job subclasses defined here. |
312 class BaseInternalsJob : public net::URLRequestSimpleJob { | 312 class BaseInternalsJob : public net::URLRequestSimpleJob { |
313 protected: | 313 protected: |
314 BaseInternalsJob(net::URLRequest* request, AppCacheService* service) | 314 BaseInternalsJob(net::URLRequest* request, |
315 : URLRequestSimpleJob(request), appcache_service_(service) {} | 315 net::NetworkDelegate* network_delegate, |
| 316 AppCacheService* service) |
| 317 : URLRequestSimpleJob(request, network_delegate), |
| 318 appcache_service_(service) {} |
316 virtual ~BaseInternalsJob() {} | 319 virtual ~BaseInternalsJob() {} |
317 | 320 |
318 AppCacheService* appcache_service_; | 321 AppCacheService* appcache_service_; |
319 }; | 322 }; |
320 | 323 |
321 // Job that lists all appcaches in the system. | 324 // Job that lists all appcaches in the system. |
322 class MainPageJob : public BaseInternalsJob { | 325 class MainPageJob : public BaseInternalsJob { |
323 public: | 326 public: |
324 MainPageJob(net::URLRequest* request, AppCacheService* service) | 327 MainPageJob(net::URLRequest* request, |
325 : BaseInternalsJob(request, service), | 328 net::NetworkDelegate* network_delegate, |
| 329 AppCacheService* service) |
| 330 : BaseInternalsJob(request, network_delegate, service), |
326 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { | 331 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
327 } | 332 } |
328 | 333 |
329 virtual void Start() { | 334 virtual void Start() { |
330 DCHECK(request_); | 335 DCHECK(request_); |
331 info_collection_ = new AppCacheInfoCollection; | 336 info_collection_ = new AppCacheInfoCollection; |
332 appcache_service_->GetAllAppCacheInfo( | 337 appcache_service_->GetAllAppCacheInfo( |
333 info_collection_, base::Bind(&MainPageJob::OnGotInfoComplete, | 338 info_collection_, base::Bind(&MainPageJob::OnGotInfoComplete, |
334 weak_factory_.GetWeakPtr())); | 339 weak_factory_.GetWeakPtr())); |
335 } | 340 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 } | 381 } |
377 | 382 |
378 base::WeakPtrFactory<MainPageJob> weak_factory_; | 383 base::WeakPtrFactory<MainPageJob> weak_factory_; |
379 scoped_refptr<AppCacheInfoCollection> info_collection_; | 384 scoped_refptr<AppCacheInfoCollection> info_collection_; |
380 DISALLOW_COPY_AND_ASSIGN(MainPageJob); | 385 DISALLOW_COPY_AND_ASSIGN(MainPageJob); |
381 }; | 386 }; |
382 | 387 |
383 // Job that redirects back to the main appcache internals page. | 388 // Job that redirects back to the main appcache internals page. |
384 class RedirectToMainPageJob : public BaseInternalsJob { | 389 class RedirectToMainPageJob : public BaseInternalsJob { |
385 public: | 390 public: |
386 RedirectToMainPageJob(net::URLRequest* request, AppCacheService* service) | 391 RedirectToMainPageJob(net::URLRequest* request, |
387 : BaseInternalsJob(request, service) {} | 392 net::NetworkDelegate* network_delegate, |
| 393 AppCacheService* service) |
| 394 : BaseInternalsJob(request, network_delegate, service) {} |
388 | 395 |
389 virtual int GetData(std::string* mime_type, | 396 virtual int GetData(std::string* mime_type, |
390 std::string* charset, | 397 std::string* charset, |
391 std::string* data, | 398 std::string* data, |
392 const net::CompletionCallback& callback) const OVERRIDE { | 399 const net::CompletionCallback& callback) const OVERRIDE { |
393 return net::OK; // IsRedirectResponse induces a redirect. | 400 return net::OK; // IsRedirectResponse induces a redirect. |
394 } | 401 } |
395 | 402 |
396 virtual bool IsRedirectResponse(GURL* location, int* http_status_code) { | 403 virtual bool IsRedirectResponse(GURL* location, int* http_status_code) { |
397 *location = ClearQuery(request_->url()); | 404 *location = ClearQuery(request_->url()); |
398 *http_status_code = 307; | 405 *http_status_code = 307; |
399 return true; | 406 return true; |
400 } | 407 } |
401 | 408 |
402 protected: | 409 protected: |
403 virtual ~RedirectToMainPageJob() {} | 410 virtual ~RedirectToMainPageJob() {} |
404 }; | 411 }; |
405 | 412 |
406 // Job that removes an appcache and then redirects back to the main page. | 413 // Job that removes an appcache and then redirects back to the main page. |
407 class RemoveAppCacheJob : public RedirectToMainPageJob { | 414 class RemoveAppCacheJob : public RedirectToMainPageJob { |
408 public: | 415 public: |
409 RemoveAppCacheJob( | 416 RemoveAppCacheJob( |
410 net::URLRequest* request, AppCacheService* service, | 417 net::URLRequest* request, |
| 418 net::NetworkDelegate* network_delegate, |
| 419 AppCacheService* service, |
411 const GURL& manifest_url) | 420 const GURL& manifest_url) |
412 : RedirectToMainPageJob(request, service), | 421 : RedirectToMainPageJob(request, network_delegate, service), |
413 manifest_url_(manifest_url), | 422 manifest_url_(manifest_url), |
414 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { | 423 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
415 } | 424 } |
416 | 425 |
417 virtual void Start() { | 426 virtual void Start() { |
418 DCHECK(request_); | 427 DCHECK(request_); |
419 | 428 |
420 appcache_service_->DeleteAppCacheGroup( | 429 appcache_service_->DeleteAppCacheGroup( |
421 manifest_url_,base::Bind(&RemoveAppCacheJob::OnDeleteAppCacheComplete, | 430 manifest_url_,base::Bind(&RemoveAppCacheJob::OnDeleteAppCacheComplete, |
422 weak_factory_.GetWeakPtr())); | 431 weak_factory_.GetWeakPtr())); |
423 } | 432 } |
424 | 433 |
425 private: | 434 private: |
426 virtual ~RemoveAppCacheJob() {} | 435 virtual ~RemoveAppCacheJob() {} |
427 | 436 |
428 void OnDeleteAppCacheComplete(int rv) { | 437 void OnDeleteAppCacheComplete(int rv) { |
429 StartAsync(); // Causes the base class to redirect. | 438 StartAsync(); // Causes the base class to redirect. |
430 } | 439 } |
431 | 440 |
432 GURL manifest_url_; | 441 GURL manifest_url_; |
433 base::WeakPtrFactory<RemoveAppCacheJob> weak_factory_; | 442 base::WeakPtrFactory<RemoveAppCacheJob> weak_factory_; |
434 }; | 443 }; |
435 | 444 |
436 | 445 |
437 // Job shows the details of a particular manifest url. | 446 // Job shows the details of a particular manifest url. |
438 class ViewAppCacheJob : public BaseInternalsJob, | 447 class ViewAppCacheJob : public BaseInternalsJob, |
439 public AppCacheStorage::Delegate { | 448 public AppCacheStorage::Delegate { |
440 public: | 449 public: |
441 ViewAppCacheJob( | 450 ViewAppCacheJob( |
442 net::URLRequest* request, AppCacheService* service, | 451 net::URLRequest* request, |
| 452 net::NetworkDelegate* network_delegate, |
| 453 AppCacheService* service, |
443 const GURL& manifest_url) | 454 const GURL& manifest_url) |
444 : BaseInternalsJob(request, service), | 455 : BaseInternalsJob(request, network_delegate, service), |
445 manifest_url_(manifest_url) {} | 456 manifest_url_(manifest_url) {} |
446 | 457 |
447 virtual void Start() { | 458 virtual void Start() { |
448 DCHECK(request_); | 459 DCHECK(request_); |
449 appcache_service_->storage()->LoadOrCreateGroup(manifest_url_, this); | 460 appcache_service_->storage()->LoadOrCreateGroup(manifest_url_, this); |
450 } | 461 } |
451 | 462 |
452 // Produces a page containing the entries listing. | 463 // Produces a page containing the entries listing. |
453 virtual int GetData(std::string* mime_type, | 464 virtual int GetData(std::string* mime_type, |
454 std::string* charset, | 465 std::string* charset, |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
501 AppCacheInfo appcache_info_; | 512 AppCacheInfo appcache_info_; |
502 AppCacheResourceInfoVector resource_infos_; | 513 AppCacheResourceInfoVector resource_infos_; |
503 DISALLOW_COPY_AND_ASSIGN(ViewAppCacheJob); | 514 DISALLOW_COPY_AND_ASSIGN(ViewAppCacheJob); |
504 }; | 515 }; |
505 | 516 |
506 // Job that shows the details of a particular cached resource. | 517 // Job that shows the details of a particular cached resource. |
507 class ViewEntryJob : public BaseInternalsJob, | 518 class ViewEntryJob : public BaseInternalsJob, |
508 public AppCacheStorage::Delegate { | 519 public AppCacheStorage::Delegate { |
509 public: | 520 public: |
510 ViewEntryJob( | 521 ViewEntryJob( |
511 net::URLRequest* request, AppCacheService* service, | 522 net::URLRequest* request, |
512 const GURL& manifest_url, const GURL& entry_url, | 523 net::NetworkDelegate* network_delegate, |
| 524 AppCacheService* service, |
| 525 const GURL& manifest_url, |
| 526 const GURL& entry_url, |
513 int64 response_id, int64 group_id) | 527 int64 response_id, int64 group_id) |
514 : BaseInternalsJob(request, service), | 528 : BaseInternalsJob(request, network_delegate, service), |
515 manifest_url_(manifest_url), entry_url_(entry_url), | 529 manifest_url_(manifest_url), entry_url_(entry_url), |
516 response_id_(response_id), group_id_(group_id), amount_read_(0) { | 530 response_id_(response_id), group_id_(group_id), amount_read_(0) { |
517 } | 531 } |
518 | 532 |
519 virtual void Start() { | 533 virtual void Start() { |
520 DCHECK(request_); | 534 DCHECK(request_); |
521 appcache_service_->storage()->LoadResponseInfo( | 535 appcache_service_->storage()->LoadResponseInfo( |
522 manifest_url_, group_id_, response_id_, this); | 536 manifest_url_, group_id_, response_id_, this); |
523 } | 537 } |
524 | 538 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 int64 group_id_; | 606 int64 group_id_; |
593 scoped_refptr<AppCacheResponseInfo> response_info_; | 607 scoped_refptr<AppCacheResponseInfo> response_info_; |
594 scoped_refptr<net::IOBuffer> response_data_; | 608 scoped_refptr<net::IOBuffer> response_data_; |
595 int amount_read_; | 609 int amount_read_; |
596 scoped_ptr<AppCacheResponseReader> reader_; | 610 scoped_ptr<AppCacheResponseReader> reader_; |
597 }; | 611 }; |
598 | 612 |
599 } // namespace | 613 } // namespace |
600 | 614 |
601 net::URLRequestJob* ViewAppCacheInternalsJobFactory::CreateJobForRequest( | 615 net::URLRequestJob* ViewAppCacheInternalsJobFactory::CreateJobForRequest( |
602 net::URLRequest* request, AppCacheService* service) { | 616 net::URLRequest* request, |
| 617 net::NetworkDelegate* network_delegate, |
| 618 AppCacheService* service) { |
603 if (!request->url().has_query()) | 619 if (!request->url().has_query()) |
604 return new MainPageJob(request, service); | 620 return new MainPageJob(request, network_delegate, service); |
605 | 621 |
606 std::string command; | 622 std::string command; |
607 std::string param; | 623 std::string param; |
608 ParseQuery(request->url().query(), &command, ¶m); | 624 ParseQuery(request->url().query(), &command, ¶m); |
609 | 625 |
610 if (command == kRemoveCacheCommand) | 626 if (command == kRemoveCacheCommand) |
611 return new RemoveAppCacheJob(request, service, | 627 return new RemoveAppCacheJob(request, network_delegate, service, |
612 DecodeBase64URL(param)); | 628 DecodeBase64URL(param)); |
613 | 629 |
614 if (command == kViewCacheCommand) | 630 if (command == kViewCacheCommand) |
615 return new ViewAppCacheJob(request, service, | 631 return new ViewAppCacheJob(request, network_delegate, service, |
616 DecodeBase64URL(param)); | 632 DecodeBase64URL(param)); |
617 | 633 |
618 std::vector<std::string> tokens; | 634 std::vector<std::string> tokens; |
619 int64 response_id; | 635 int64 response_id; |
620 int64 group_id; | 636 int64 group_id; |
621 if (command == kViewEntryCommand && Tokenize(param, "|", &tokens) == 4u && | 637 if (command == kViewEntryCommand && Tokenize(param, "|", &tokens) == 4u && |
622 base::StringToInt64(tokens[2], &response_id) && | 638 base::StringToInt64(tokens[2], &response_id) && |
623 base::StringToInt64(tokens[3], &group_id)) { | 639 base::StringToInt64(tokens[3], &group_id)) { |
624 return new ViewEntryJob(request, service, | 640 return new ViewEntryJob(request, network_delegate, service, |
625 DecodeBase64URL(tokens[0]), // manifest url | 641 DecodeBase64URL(tokens[0]), // manifest url |
626 DecodeBase64URL(tokens[1]), // entry url | 642 DecodeBase64URL(tokens[1]), // entry url |
627 response_id, group_id); | 643 response_id, group_id); |
628 } | 644 } |
629 | 645 |
630 return new RedirectToMainPageJob(request, service); | 646 return new RedirectToMainPageJob(request, network_delegate, service); |
631 } | 647 } |
632 | 648 |
633 } // namespace appcache | 649 } // namespace appcache |
OLD | NEW |