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 "chrome/browser/background/background_contents_service.h" | 5 #include "chrome/browser/background/background_contents_service.h" |
6 | 6 |
7 #include "apps/app_load_service.h" | 7 #include "apps/app_load_service.h" |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
491 base::MessageLoop::current()->PostDelayedTask(FROM_HERE, | 491 base::MessageLoop::current()->PostDelayedTask(FROM_HERE, |
492 base::Bind(&ReloadExtension, extension->id(), profile), | 492 base::Bind(&ReloadExtension, extension->id(), profile), |
493 base::TimeDelta::FromMilliseconds(restart_delay_in_ms_)); | 493 base::TimeDelta::FromMilliseconds(restart_delay_in_ms_)); |
494 } | 494 } |
495 | 495 |
496 // Loads all background contents whose urls have been stored in prefs. | 496 // Loads all background contents whose urls have been stored in prefs. |
497 void BackgroundContentsService::LoadBackgroundContentsFromPrefs( | 497 void BackgroundContentsService::LoadBackgroundContentsFromPrefs( |
498 Profile* profile) { | 498 Profile* profile) { |
499 if (!prefs_) | 499 if (!prefs_) |
500 return; | 500 return; |
501 const DictionaryValue* contents = | 501 const base::DictionaryValue* contents = |
502 prefs_->GetDictionary(prefs::kRegisteredBackgroundContents); | 502 prefs_->GetDictionary(prefs::kRegisteredBackgroundContents); |
503 if (!contents) | 503 if (!contents) |
504 return; | 504 return; |
505 ExtensionService* extensions_service = | 505 ExtensionService* extensions_service = |
506 extensions::ExtensionSystem::Get(profile)->extension_service(); | 506 extensions::ExtensionSystem::Get(profile)->extension_service(); |
507 DCHECK(extensions_service); | 507 DCHECK(extensions_service); |
508 for (DictionaryValue::Iterator it(*contents); !it.IsAtEnd(); it.Advance()) { | 508 for (base::DictionaryValue::Iterator it(*contents); |
| 509 !it.IsAtEnd(); it.Advance()) { |
509 // Check to make sure that the parent extension is still enabled. | 510 // Check to make sure that the parent extension is still enabled. |
510 const Extension* extension = extensions_service-> | 511 const Extension* extension = extensions_service-> |
511 GetExtensionById(it.key(), false); | 512 GetExtensionById(it.key(), false); |
512 if (!extension) { | 513 if (!extension) { |
513 // We should never reach here - it should not be possible for an app | 514 // We should never reach here - it should not be possible for an app |
514 // to become uninstalled without the associated BackgroundContents being | 515 // to become uninstalled without the associated BackgroundContents being |
515 // unregistered via the EXTENSIONS_UNLOADED notification, unless there's a | 516 // unregistered via the EXTENSIONS_UNLOADED notification, unless there's a |
516 // crash before we could save our prefs, or if the user deletes the | 517 // crash before we could save our prefs, or if the user deletes the |
517 // extension files manually rather than uninstalling it. | 518 // extension files manually rather than uninstalling it. |
518 NOTREACHED() << "No extension found for BackgroundContents - id = " | 519 NOTREACHED() << "No extension found for BackgroundContents - id = " |
(...skipping 25 matching lines...) Expand all Loading... |
544 LoadBackgroundContents(profile, | 545 LoadBackgroundContents(profile, |
545 BackgroundInfo::GetBackgroundURL(extension), | 546 BackgroundInfo::GetBackgroundURL(extension), |
546 ASCIIToUTF16("background"), | 547 ASCIIToUTF16("background"), |
547 UTF8ToUTF16(extension->id())); | 548 UTF8ToUTF16(extension->id())); |
548 return; | 549 return; |
549 } | 550 } |
550 | 551 |
551 // Now look in the prefs. | 552 // Now look in the prefs. |
552 if (!prefs_) | 553 if (!prefs_) |
553 return; | 554 return; |
554 const DictionaryValue* contents = | 555 const base::DictionaryValue* contents = |
555 prefs_->GetDictionary(prefs::kRegisteredBackgroundContents); | 556 prefs_->GetDictionary(prefs::kRegisteredBackgroundContents); |
556 if (!contents) | 557 if (!contents) |
557 return; | 558 return; |
558 LoadBackgroundContentsFromDictionary(profile, extension_id, contents); | 559 LoadBackgroundContentsFromDictionary(profile, extension_id, contents); |
559 } | 560 } |
560 | 561 |
561 void BackgroundContentsService::LoadBackgroundContentsFromDictionary( | 562 void BackgroundContentsService::LoadBackgroundContentsFromDictionary( |
562 Profile* profile, | 563 Profile* profile, |
563 const std::string& extension_id, | 564 const std::string& extension_id, |
564 const DictionaryValue* contents) { | 565 const base::DictionaryValue* contents) { |
565 ExtensionService* extensions_service = | 566 ExtensionService* extensions_service = |
566 extensions::ExtensionSystem::Get(profile)->extension_service(); | 567 extensions::ExtensionSystem::Get(profile)->extension_service(); |
567 DCHECK(extensions_service); | 568 DCHECK(extensions_service); |
568 | 569 |
569 const DictionaryValue* dict; | 570 const base::DictionaryValue* dict; |
570 if (!contents->GetDictionaryWithoutPathExpansion(extension_id, &dict) || | 571 if (!contents->GetDictionaryWithoutPathExpansion(extension_id, &dict) || |
571 dict == NULL) | 572 dict == NULL) |
572 return; | 573 return; |
573 | 574 |
574 base::string16 frame_name; | 575 base::string16 frame_name; |
575 std::string url; | 576 std::string url; |
576 dict->GetString(kUrlKey, &url); | 577 dict->GetString(kUrlKey, &url); |
577 dict->GetString(kFrameNameKey, &frame_name); | 578 dict->GetString(kFrameNameKey, &frame_name); |
578 LoadBackgroundContents(profile, | 579 LoadBackgroundContents(profile, |
579 GURL(url), | 580 GURL(url), |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
658 BackgroundContents* background_contents) { | 659 BackgroundContents* background_contents) { |
659 DCHECK(IsTracked(background_contents)); | 660 DCHECK(IsTracked(background_contents)); |
660 if (!prefs_) | 661 if (!prefs_) |
661 return; | 662 return; |
662 | 663 |
663 // We store the first URL we receive for a given application. If there's | 664 // We store the first URL we receive for a given application. If there's |
664 // already an entry for this application, no need to do anything. | 665 // already an entry for this application, no need to do anything. |
665 // TODO(atwilson): Verify that this is the desired behavior based on developer | 666 // TODO(atwilson): Verify that this is the desired behavior based on developer |
666 // feedback (http://crbug.com/47118). | 667 // feedback (http://crbug.com/47118). |
667 DictionaryPrefUpdate update(prefs_, prefs::kRegisteredBackgroundContents); | 668 DictionaryPrefUpdate update(prefs_, prefs::kRegisteredBackgroundContents); |
668 DictionaryValue* pref = update.Get(); | 669 base::DictionaryValue* pref = update.Get(); |
669 const base::string16& appid = GetParentApplicationId(background_contents); | 670 const base::string16& appid = GetParentApplicationId(background_contents); |
670 DictionaryValue* current; | 671 base::DictionaryValue* current; |
671 if (pref->GetDictionaryWithoutPathExpansion(UTF16ToUTF8(appid), ¤t)) | 672 if (pref->GetDictionaryWithoutPathExpansion(UTF16ToUTF8(appid), ¤t)) |
672 return; | 673 return; |
673 | 674 |
674 // No entry for this application yet, so add one. | 675 // No entry for this application yet, so add one. |
675 DictionaryValue* dict = new DictionaryValue(); | 676 base::DictionaryValue* dict = new base::DictionaryValue(); |
676 dict->SetString(kUrlKey, background_contents->GetURL().spec()); | 677 dict->SetString(kUrlKey, background_contents->GetURL().spec()); |
677 dict->SetString(kFrameNameKey, contents_map_[appid].frame_name); | 678 dict->SetString(kFrameNameKey, contents_map_[appid].frame_name); |
678 pref->SetWithoutPathExpansion(UTF16ToUTF8(appid), dict); | 679 pref->SetWithoutPathExpansion(UTF16ToUTF8(appid), dict); |
679 } | 680 } |
680 | 681 |
681 bool BackgroundContentsService::HasRegisteredBackgroundContents( | 682 bool BackgroundContentsService::HasRegisteredBackgroundContents( |
682 const base::string16& app_id) { | 683 const base::string16& app_id) { |
683 if (!prefs_) | 684 if (!prefs_) |
684 return false; | 685 return false; |
685 std::string app = UTF16ToUTF8(app_id); | 686 std::string app = UTF16ToUTF8(app_id); |
686 const DictionaryValue* contents = | 687 const base::DictionaryValue* contents = |
687 prefs_->GetDictionary(prefs::kRegisteredBackgroundContents); | 688 prefs_->GetDictionary(prefs::kRegisteredBackgroundContents); |
688 return contents->HasKey(app); | 689 return contents->HasKey(app); |
689 } | 690 } |
690 | 691 |
691 void BackgroundContentsService::UnregisterBackgroundContents( | 692 void BackgroundContentsService::UnregisterBackgroundContents( |
692 BackgroundContents* background_contents) { | 693 BackgroundContents* background_contents) { |
693 if (!prefs_) | 694 if (!prefs_) |
694 return; | 695 return; |
695 DCHECK(IsTracked(background_contents)); | 696 DCHECK(IsTracked(background_contents)); |
696 const base::string16 appid = GetParentApplicationId(background_contents); | 697 const base::string16 appid = GetParentApplicationId(background_contents); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
757 bool user_gesture, | 758 bool user_gesture, |
758 bool* was_blocked) { | 759 bool* was_blocked) { |
759 Browser* browser = chrome::FindLastActiveWithProfile( | 760 Browser* browser = chrome::FindLastActiveWithProfile( |
760 Profile::FromBrowserContext(new_contents->GetBrowserContext()), | 761 Profile::FromBrowserContext(new_contents->GetBrowserContext()), |
761 chrome::GetActiveDesktop()); | 762 chrome::GetActiveDesktop()); |
762 if (browser) { | 763 if (browser) { |
763 chrome::AddWebContents(browser, NULL, new_contents, disposition, | 764 chrome::AddWebContents(browser, NULL, new_contents, disposition, |
764 initial_pos, user_gesture, was_blocked); | 765 initial_pos, user_gesture, was_blocked); |
765 } | 766 } |
766 } | 767 } |
OLD | NEW |