Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1106)

Unified Diff: chrome/browser/extensions/extension_system_impl.cc

Issue 2182633007: Avoid using ContentBrowserClient::IsIllegalOrigin in ResourceDispatcherHost. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove the IsIllegalOrigin function from ContentBrowserClient Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_system_impl.cc
diff --git a/chrome/browser/extensions/extension_system_impl.cc b/chrome/browser/extensions/extension_system_impl.cc
index fa7596f5ad8971e9170674d058eb884391aea2e6..6731e17e6b656ac9636fea7e6488f42f3b356244 100644
--- a/chrome/browser/extensions/extension_system_impl.cc
+++ b/chrome/browser/extensions/extension_system_impl.cc
@@ -38,6 +38,7 @@
#include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
#include "chrome/common/chrome_switches.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/resource_dispatcher_host.h"
#include "content/public/browser/url_data_source.h"
#include "extensions/browser/content_verifier.h"
#include "extensions/browser/extension_pref_store.h"
@@ -54,6 +55,7 @@
#include "extensions/browser/value_store/value_store_factory_impl.h"
#include "extensions/common/constants.h"
#include "extensions/common/features/feature_channel.h"
+#include "extensions/common/manifest_constants.h"
#include "extensions/common/manifest_url_handlers.h"
#if defined(ENABLE_NOTIFICATIONS)
@@ -90,6 +92,46 @@ UninstallPingSender::FilterResult ShouldSendUninstallPing(
return UninstallPingSender::DO_NOT_SEND_PING;
}
+// Helper functions to register and unregister extensions. These are invoked
+// on the IO thread.
+void RegisterExtensionHelper(InfoMap* info_map,
+ const Extension* extension,
+ base::Time install_time,
+ bool incognito_enabled,
+ bool notifications_disabled,
+ const content::ResourceContext* context) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ info_map->AddExtension(extension, install_time, incognito_enabled,
+ notifications_disabled);
+ // Check for platform app origins. These can only be committed by the app
+ // itself, or by one if its guests if there are accessible_resources.
+ // If the origin is not a platform app, then we assume all processes can
+ // commit to it as we don't have enough information to validate it. This
+ // includes hosted apps and normal extensions.
+ content::ResourceDispatcherHost::OriginAccessCheckMask access_check_mask =
+ content::ResourceDispatcherHost::ALLOW_EVERYTHING;
+ if (extension->is_platform_app() && !!extension->GetManifestData(
+ manifest_keys::kWebviewAccessibleResources)) {
+ access_check_mask =
+ content::ResourceDispatcherHost::ALLOW_REGISTERED_ACCESS;
+ }
+ content::ResourceDispatcherHost::Get()->RegisterOriginForAccessChecks(
+ context, Extension::GetBaseURLFromExtensionId(extension->id()).spec(),
+ access_check_mask);
+}
+
+void UnregisterExtensionHelper(InfoMap* info_map,
+ const std::string& extension_id,
+ const UnloadedExtensionInfo::Reason reason,
+ const content::ResourceContext* context) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ info_map->RemoveExtension(extension_id, reason);
+ content::ResourceDispatcherHost::Get()->UnregisterOriginForAccessChecks(
+ context, Extension::GetBaseURLFromExtensionId(extension_id).spec());
+}
+
} // namespace
//
@@ -457,9 +499,9 @@ void ExtensionSystemImpl::RegisterExtensionWithRequestContexts(
BrowserThread::PostTaskAndReply(
BrowserThread::IO, FROM_HERE,
- base::Bind(&InfoMap::AddExtension, info_map(),
+ base::Bind(&RegisterExtensionHelper, base::RetainedRef(info_map()),
base::RetainedRef(extension), install_time, incognito_enabled,
- notifications_disabled),
+ notifications_disabled, profile_->GetResourceContext()),
callback);
}
@@ -469,7 +511,8 @@ void ExtensionSystemImpl::UnregisterExtensionWithRequestContexts(
BrowserThread::PostTask(
BrowserThread::IO,
FROM_HERE,
- base::Bind(&InfoMap::RemoveExtension, info_map(), extension_id, reason));
+ base::Bind(&UnregisterExtensionHelper, base::RetainedRef(info_map()),
+ extension_id, reason, profile_->GetResourceContext()));
}
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698