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/extensions/external_provider_impl.h" | 5 #include "chrome/browser/extensions/external_provider_impl.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 ExternalProviderImpl::~ExternalProviderImpl() { | 83 ExternalProviderImpl::~ExternalProviderImpl() { |
84 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 84 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
85 loader_->OwnerShutdown(); | 85 loader_->OwnerShutdown(); |
86 } | 86 } |
87 | 87 |
88 void ExternalProviderImpl::VisitRegisteredExtension() { | 88 void ExternalProviderImpl::VisitRegisteredExtension() { |
89 // The loader will call back to SetPrefs. | 89 // The loader will call back to SetPrefs. |
90 loader_->StartLoading(); | 90 loader_->StartLoading(); |
91 } | 91 } |
92 | 92 |
93 void ExternalProviderImpl::SetPrefs(DictionaryValue* prefs) { | 93 void ExternalProviderImpl::SetPrefs(base::DictionaryValue* prefs) { |
94 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 94 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
95 | 95 |
96 // Check if the service is still alive. It is possible that it went | 96 // Check if the service is still alive. It is possible that it went |
97 // away while |loader_| was working on the FILE thread. | 97 // away while |loader_| was working on the FILE thread. |
98 if (!service_) return; | 98 if (!service_) return; |
99 | 99 |
100 prefs_.reset(prefs); | 100 prefs_.reset(prefs); |
101 ready_ = true; // Queries for extensions are allowed from this point. | 101 ready_ = true; // Queries for extensions are allowed from this point. |
102 | 102 |
103 // Set of unsupported extensions that need to be deleted from prefs_. | 103 // Set of unsupported extensions that need to be deleted from prefs_. |
104 std::set<std::string> unsupported_extensions; | 104 std::set<std::string> unsupported_extensions; |
105 | 105 |
106 // Notify ExtensionService about all the extensions this provider has. | 106 // Notify ExtensionService about all the extensions this provider has. |
107 for (DictionaryValue::Iterator i(*prefs_); !i.IsAtEnd(); i.Advance()) { | 107 for (base::DictionaryValue::Iterator i(*prefs_); !i.IsAtEnd(); i.Advance()) { |
108 const std::string& extension_id = i.key(); | 108 const std::string& extension_id = i.key(); |
109 const DictionaryValue* extension = NULL; | 109 const base::DictionaryValue* extension = NULL; |
110 | 110 |
111 if (!Extension::IdIsValid(extension_id)) { | 111 if (!Extension::IdIsValid(extension_id)) { |
112 LOG(WARNING) << "Malformed extension dictionary: key " | 112 LOG(WARNING) << "Malformed extension dictionary: key " |
113 << extension_id.c_str() << " is not a valid id."; | 113 << extension_id.c_str() << " is not a valid id."; |
114 continue; | 114 continue; |
115 } | 115 } |
116 | 116 |
117 if (!i.value().GetAsDictionary(&extension)) { | 117 if (!i.value().GetAsDictionary(&extension)) { |
118 LOG(WARNING) << "Malformed extension dictionary: key " | 118 LOG(WARNING) << "Malformed extension dictionary: key " |
119 << extension_id.c_str() | 119 << extension_id.c_str() |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 | 152 |
153 if (has_external_crx == has_external_update_url) { | 153 if (has_external_crx == has_external_update_url) { |
154 LOG(WARNING) << "Malformed extension dictionary for extension: " | 154 LOG(WARNING) << "Malformed extension dictionary for extension: " |
155 << extension_id.c_str() << ". Exactly one of the " | 155 << extension_id.c_str() << ". Exactly one of the " |
156 << "followng keys should be used: " << kExternalCrx | 156 << "followng keys should be used: " << kExternalCrx |
157 << ", " << kExternalUpdateUrl << "."; | 157 << ", " << kExternalUpdateUrl << "."; |
158 continue; | 158 continue; |
159 } | 159 } |
160 | 160 |
161 // Check that extension supports current browser locale. | 161 // Check that extension supports current browser locale. |
162 const ListValue* supported_locales = NULL; | 162 const base::ListValue* supported_locales = NULL; |
163 if (extension->GetList(kSupportedLocales, &supported_locales)) { | 163 if (extension->GetList(kSupportedLocales, &supported_locales)) { |
164 std::vector<std::string> browser_locales; | 164 std::vector<std::string> browser_locales; |
165 l10n_util::GetParentLocales(g_browser_process->GetApplicationLocale(), | 165 l10n_util::GetParentLocales(g_browser_process->GetApplicationLocale(), |
166 &browser_locales); | 166 &browser_locales); |
167 | 167 |
168 size_t num_locales = supported_locales->GetSize(); | 168 size_t num_locales = supported_locales->GetSize(); |
169 bool locale_supported = false; | 169 bool locale_supported = false; |
170 for (size_t j = 0; j < num_locales; j++) { | 170 for (size_t j = 0; j < num_locales; j++) { |
171 std::string current_locale; | 171 std::string current_locale; |
172 if (supported_locales->GetString(j, ¤t_locale) && | 172 if (supported_locales->GetString(j, ¤t_locale) && |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 CHECK(ready_); | 300 CHECK(ready_); |
301 return prefs_->HasKey(id); | 301 return prefs_->HasKey(id); |
302 } | 302 } |
303 | 303 |
304 bool ExternalProviderImpl::GetExtensionDetails( | 304 bool ExternalProviderImpl::GetExtensionDetails( |
305 const std::string& id, Manifest::Location* location, | 305 const std::string& id, Manifest::Location* location, |
306 scoped_ptr<Version>* version) const { | 306 scoped_ptr<Version>* version) const { |
307 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 307 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
308 CHECK(prefs_.get()); | 308 CHECK(prefs_.get()); |
309 CHECK(ready_); | 309 CHECK(ready_); |
310 DictionaryValue* extension = NULL; | 310 base::DictionaryValue* extension = NULL; |
311 if (!prefs_->GetDictionary(id, &extension)) | 311 if (!prefs_->GetDictionary(id, &extension)) |
312 return false; | 312 return false; |
313 | 313 |
314 Manifest::Location loc = Manifest::INVALID_LOCATION; | 314 Manifest::Location loc = Manifest::INVALID_LOCATION; |
315 if (extension->HasKey(kExternalUpdateUrl)) { | 315 if (extension->HasKey(kExternalUpdateUrl)) { |
316 loc = download_location_; | 316 loc = download_location_; |
317 | 317 |
318 } else if (extension->HasKey(kExternalCrx)) { | 318 } else if (extension->HasKey(kExternalCrx)) { |
319 loc = crx_location_; | 319 loc = crx_location_; |
320 | 320 |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
488 new ExternalProviderImpl( | 488 new ExternalProviderImpl( |
489 service, | 489 service, |
490 new ExternalComponentLoader(), | 490 new ExternalComponentLoader(), |
491 profile, | 491 profile, |
492 Manifest::INVALID_LOCATION, | 492 Manifest::INVALID_LOCATION, |
493 Manifest::EXTERNAL_POLICY_DOWNLOAD, | 493 Manifest::EXTERNAL_POLICY_DOWNLOAD, |
494 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT))); | 494 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT))); |
495 } | 495 } |
496 | 496 |
497 } // namespace extensions | 497 } // namespace extensions |
OLD | NEW |