summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/render_thread.cc
diff options
context:
space:
mode:
authormpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-22 23:56:30 +0000
committermpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-22 23:56:30 +0000
commit3a8eecb2bb859491b344be321abb4ff3d2b7f0f3 (patch)
tree07f90f564c2c5d92d38f1fdae15597a523ca31c1 /chrome/renderer/render_thread.cc
parent58bc899f2ffdc14d78b6f209f57415e79837d7a6 (diff)
downloadchromium_src-3a8eecb2bb859491b344be321abb4ff3d2b7f0f3.zip
chromium_src-3a8eecb2bb859491b344be321abb4ff3d2b7f0f3.tar.gz
chromium_src-3a8eecb2bb859491b344be321abb4ff3d2b7f0f3.tar.bz2
Implement app process model isolation.
The process grouping logic is unfortunately duplicated in SiteInstance and RenderView. URLs that are part of extension X's web extent get converted into a pseudo URL of the form chrome-extension://X/path. This groups pages from an extension app and its offline resources into the same process. The rest is mostly plumbing and passing data around. BUG=41273 Review URL: http://codereview.chromium.org/1735004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45384 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/render_thread.cc')
-rw-r--r--chrome/renderer/render_thread.cc23
1 files changed, 23 insertions, 0 deletions
diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc
index 38e068a..b7fb2af 100644
--- a/chrome/renderer/render_thread.cc
+++ b/chrome/renderer/render_thread.cc
@@ -474,6 +474,15 @@ void RenderThread::OnSetExtensionFunctionNames(
ExtensionProcessBindings::SetFunctionNames(names);
}
+void RenderThread::OnExtensionExtentsUpdated(
+ const ViewMsg_ExtensionExtentsUpdated_Params& params) {
+ extension_extents_.resize(params.extension_apps.size());
+ for (size_t i = 0; i < params.extension_apps.size(); ++i) {
+ extension_extents_[i].extension_id = params.extension_apps[i].first;
+ extension_extents_[i].web_extent = params.extension_apps[i].second;
+ }
+}
+
void RenderThread::OnPageActionsUpdated(
const std::string& extension_id,
const std::vector<std::string>& page_actions) {
@@ -548,6 +557,8 @@ void RenderThread::OnControlMessageReceived(const IPC::Message& msg) {
OnExtensionMessageInvoke)
IPC_MESSAGE_HANDLER(ViewMsg_Extension_SetFunctionNames,
OnSetExtensionFunctionNames)
+ IPC_MESSAGE_HANDLER(ViewMsg_ExtensionExtentsUpdated,
+ OnExtensionExtentsUpdated)
IPC_MESSAGE_HANDLER(ViewMsg_PurgeMemory, OnPurgeMemory)
IPC_MESSAGE_HANDLER(ViewMsg_PurgePluginListCache,
OnPurgePluginListCache)
@@ -1012,3 +1023,15 @@ void RenderThread::OnGpuChannelEstablished(
gpu_channel_ = NULL;
}
}
+
+std::string RenderThread::GetExtensionIdForURL(const GURL& url) {
+ if (url.SchemeIs(chrome::kExtensionScheme))
+ return url.host();
+
+ for (size_t i = 0; i < extension_extents_.size(); ++i) {
+ if (extension_extents_[i].web_extent.ContainsURL(url))
+ return extension_extents_[i].extension_id;
+ }
+
+ return std::string();
+}