| Index: chrome/browser/extensions/extensions_service.cc
|
| diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc
|
| index 50d48d220f2d5a6b73ae9dc2e0b39229a4223900..b56d5b6b16c828b510b67f6c22c0cb3cdff7f694 100644
|
| --- a/chrome/browser/extensions/extensions_service.cc
|
| +++ b/chrome/browser/extensions/extensions_service.cc
|
| @@ -578,29 +578,14 @@ void ExtensionsService::LoadInstalledExtension(const ExtensionInfo& info,
|
| }
|
|
|
| void ExtensionsService::NotifyExtensionLoaded(Extension* extension) {
|
| - LOG(INFO) << "Sending EXTENSION_LOADED";
|
| -
|
| - // The ChromeURLRequestContext needs to be first to know that the extension
|
| + // The ChromeURLRequestContexts need to be first to know that the extension
|
| // was loaded, otherwise a race can arise where a renderer that is created
|
| // for the extension may try to load an extension URL with an extension id
|
| - // that the request context doesn't yet know about.
|
| - if (profile_ && !profile_->IsOffTheRecord()) {
|
| - ChromeURLRequestContextGetter* context_getter =
|
| - static_cast<ChromeURLRequestContextGetter*>(
|
| - profile_->GetRequestContext());
|
| - if (context_getter) {
|
| - ChromeThread::PostTask(
|
| - ChromeThread::IO, FROM_HERE,
|
| - NewRunnableMethod(
|
| - context_getter,
|
| - &ChromeURLRequestContextGetter::OnNewExtensions,
|
| - extension->id(),
|
| - new ChromeURLRequestContext::ExtensionInfo(
|
| - extension->path(),
|
| - extension->default_locale(),
|
| - std::vector<URLPattern>(),
|
| - extension->api_permissions())));
|
| - }
|
| + // that the request context doesn't yet know about. The profile is responsible
|
| + // for ensuring its URLRequestContexts appropriately discover the loaded
|
| + // extension.
|
| + if (profile_) {
|
| + profile_->RegisterExtensionWithRequestContexts(extension);
|
|
|
| // Check if this permission requires unlimited storage quota
|
| if (extension->HasApiPermission(Extension::kUnlimitedStoragePermission)) {
|
| @@ -616,6 +601,8 @@ void ExtensionsService::NotifyExtensionLoaded(Extension* extension) {
|
| }
|
| }
|
|
|
| + LOG(INFO) << "Sending EXTENSION_LOADED";
|
| +
|
| NotificationService::current()->Notify(
|
| NotificationType::EXTENSION_LOADED,
|
| Source<Profile>(profile_),
|
| @@ -630,17 +617,20 @@ void ExtensionsService::NotifyExtensionUnloaded(Extension* extension) {
|
| Source<Profile>(profile_),
|
| Details<Extension>(extension));
|
|
|
| - if (profile_ && !profile_->IsOffTheRecord()) {
|
| - ChromeURLRequestContextGetter* context_getter =
|
| - static_cast<ChromeURLRequestContextGetter*>(
|
| - profile_->GetRequestContext());
|
| - if (context_getter) {
|
| + if (profile_) {
|
| + profile_->UnregisterExtensionWithRequestContexts(extension);
|
| +
|
| + // Check if this permission required unlimited storage quota, reset its
|
| + // in-memory quota.
|
| + if (extension->HasApiPermission(Extension::kUnlimitedStoragePermission)) {
|
| + string16 origin_identifier =
|
| + webkit_database::DatabaseUtil::GetOriginIdentifier(extension->url());
|
| ChromeThread::PostTask(
|
| - ChromeThread::IO, FROM_HERE,
|
| + ChromeThread::FILE, FROM_HERE,
|
| NewRunnableMethod(
|
| - context_getter,
|
| - &ChromeURLRequestContextGetter::OnUnloadedExtension,
|
| - extension->id()));
|
| + profile_->GetDatabaseTracker(),
|
| + &webkit_database::DatabaseTracker::ResetOriginQuotaInMemory,
|
| + origin_identifier));
|
| }
|
| }
|
| }
|
|
|