OLD | NEW |
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2014 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/extensions/settings_api_helpers.h" | 5 #include "chrome/browser/extensions/settings_api_helpers.h" |
6 | 6 |
7 #include "chrome/browser/extensions/api/preference/preference_api.h" | 7 #include "chrome/browser/extensions/api/preference/preference_api.h" |
8 #include "chrome/common/pref_names.h" | 8 #include "chrome/common/pref_names.h" |
9 #include "extensions/browser/extension_pref_value_map.h" | 9 #include "extensions/browser/extension_pref_value_map.h" |
10 #include "extensions/browser/extension_pref_value_map_factory.h" | 10 #include "extensions/browser/extension_pref_value_map_factory.h" |
11 #include "extensions/browser/extension_registry.h" | 11 #include "extensions/browser/extension_registry.h" |
12 #include "extensions/common/extension_set.h" | 12 #include "extensions/common/extension_set.h" |
13 | 13 |
14 namespace extensions { | 14 namespace extensions { |
15 | 15 |
16 const SettingsOverrides* FindOverridingExtension( | 16 namespace { |
| 17 |
| 18 // Returns which |extension| (if any) is overriding a particular |type| of |
| 19 // setting. |
| 20 const Extension* FindOverridingExtension( |
17 content::BrowserContext* browser_context, | 21 content::BrowserContext* browser_context, |
18 SettingsApiOverrideType type, | 22 SettingsApiOverrideType type) { |
19 const Extension** extension) { | |
20 const ExtensionSet& extensions = | 23 const ExtensionSet& extensions = |
21 ExtensionRegistry::Get(browser_context)->enabled_extensions(); | 24 ExtensionRegistry::Get(browser_context)->enabled_extensions(); |
22 | 25 |
23 for (ExtensionSet::const_iterator it = extensions.begin(); | 26 for (ExtensionSet::const_iterator it = extensions.begin(); |
24 it != extensions.end(); | 27 it != extensions.end(); |
25 ++it) { | 28 ++it) { |
26 const SettingsOverrides* settings = SettingsOverrides::Get(*it); | 29 const SettingsOverrides* settings = SettingsOverrides::Get(*it); |
27 if (settings) { | 30 if (settings) { |
28 if (type == BUBBLE_TYPE_HOME_PAGE && !settings->homepage) | 31 if (type == BUBBLE_TYPE_HOME_PAGE && !settings->homepage) |
29 continue; | 32 continue; |
(...skipping 14 matching lines...) Expand all Loading... |
44 key = prefs::kDefaultSearchProviderEnabled; | 47 key = prefs::kDefaultSearchProviderEnabled; |
45 break; | 48 break; |
46 } | 49 } |
47 | 50 |
48 // Found an extension overriding the current type, check if primary. | 51 // Found an extension overriding the current type, check if primary. |
49 PreferenceAPI* preference_api = PreferenceAPI::Get(browser_context); | 52 PreferenceAPI* preference_api = PreferenceAPI::Get(browser_context); |
50 if (preference_api && // Expected to be NULL in unit tests. | 53 if (preference_api && // Expected to be NULL in unit tests. |
51 !preference_api->DoesExtensionControlPref((*it)->id(), key, NULL)) | 54 !preference_api->DoesExtensionControlPref((*it)->id(), key, NULL)) |
52 continue; // Not primary. | 55 continue; // Not primary. |
53 | 56 |
54 // Found the primary extension, return its setting. | 57 // Found the primary extension. |
55 *extension = *it; | 58 return *it; |
56 return settings; | |
57 } | 59 } |
58 } | 60 } |
59 | 61 |
60 return NULL; | 62 return NULL; |
61 } | 63 } |
62 | 64 |
| 65 } // namespace |
| 66 |
63 const Extension* GetExtensionOverridingHomepage( | 67 const Extension* GetExtensionOverridingHomepage( |
64 content::BrowserContext* browser_context, GURL* home_page_url) { | 68 content::BrowserContext* browser_context) { |
65 const Extension* extension = NULL; | 69 return FindOverridingExtension(browser_context, BUBBLE_TYPE_HOME_PAGE); |
66 const SettingsOverrides* settings = | |
67 FindOverridingExtension( | |
68 browser_context, BUBBLE_TYPE_HOME_PAGE, &extension); | |
69 | |
70 if (settings && home_page_url) | |
71 *home_page_url = *settings->homepage; | |
72 return extension; | |
73 } | 70 } |
74 | 71 |
75 const Extension* GetExtensionOverridingStartupPages( | 72 const Extension* GetExtensionOverridingStartupPages( |
76 content::BrowserContext* browser_context, | 73 content::BrowserContext* browser_context) { |
77 std::vector<GURL>* startup_pages) { | 74 return FindOverridingExtension(browser_context, BUBBLE_TYPE_STARTUP_PAGES); |
78 const Extension* extension = NULL; | |
79 const SettingsOverrides* settings = | |
80 FindOverridingExtension( | |
81 browser_context, BUBBLE_TYPE_STARTUP_PAGES, &extension); | |
82 if (settings && startup_pages) { | |
83 startup_pages->clear(); | |
84 for (std::vector<GURL>::const_iterator it = settings->startup_pages.begin(); | |
85 it != settings->startup_pages.end(); | |
86 ++it) | |
87 startup_pages->push_back(GURL(*it)); | |
88 } | |
89 return extension; | |
90 } | 75 } |
91 | 76 |
92 const Extension* GetExtensionOverridingSearchEngine( | 77 const Extension* GetExtensionOverridingSearchEngine( |
93 content::BrowserContext* browser_context, | 78 content::BrowserContext* browser_context) { |
94 api::manifest_types::ChromeSettingsOverrides::Search_provider* | 79 return FindOverridingExtension(browser_context, BUBBLE_TYPE_SEARCH_ENGINE); |
95 search_provider) { | |
96 const Extension* extension = NULL; | |
97 const SettingsOverrides* settings = | |
98 FindOverridingExtension( | |
99 browser_context, BUBBLE_TYPE_SEARCH_ENGINE, &extension); | |
100 if (settings && search_provider) | |
101 search_provider = settings->search_engine.get(); | |
102 return extension; | |
103 } | 80 } |
104 | 81 |
105 const Extension* GetExtensionOverridingProxy( | 82 const Extension* GetExtensionOverridingProxy( |
106 content::BrowserContext* browser_context) { | 83 content::BrowserContext* browser_context) { |
107 ExtensionPrefValueMap* extension_prefs_value_map = | 84 ExtensionPrefValueMap* extension_prefs_value_map = |
108 ExtensionPrefValueMapFactory::GetForBrowserContext(browser_context); | 85 ExtensionPrefValueMapFactory::GetForBrowserContext(browser_context); |
109 if (!extension_prefs_value_map) | 86 if (!extension_prefs_value_map) |
110 return NULL; // Can be null during testing. | 87 return NULL; // Can be null during testing. |
111 std::string extension_id = | 88 std::string extension_id = |
112 extension_prefs_value_map->GetExtensionControllingPref(prefs::kProxy); | 89 extension_prefs_value_map->GetExtensionControllingPref(prefs::kProxy); |
113 if (extension_id.empty()) | 90 if (extension_id.empty()) |
114 return NULL; | 91 return NULL; |
115 return ExtensionRegistry::Get(browser_context)->GetExtensionById( | 92 return ExtensionRegistry::Get(browser_context)->GetExtensionById( |
116 extension_id, ExtensionRegistry::ENABLED); | 93 extension_id, ExtensionRegistry::ENABLED); |
117 } | 94 } |
118 | 95 |
119 } // namespace extensions | 96 } // namespace extensions |
OLD | NEW |