summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-01 01:20:59 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-01 01:20:59 +0000
commit4fdbc1492aa5003c6fdc0df7f95b3ae9046380e2 (patch)
treee806806102de20b0fab1c1d497d1332839b6a77f /chrome/renderer
parent17d40f00b7d7a078649fb142961f612c29553ec0 (diff)
downloadchromium_src-4fdbc1492aa5003c6fdc0df7f95b3ae9046380e2.zip
chromium_src-4fdbc1492aa5003c6fdc0df7f95b3ae9046380e2.tar.gz
chromium_src-4fdbc1492aa5003c6fdc0df7f95b3ae9046380e2.tar.bz2
Add the concept of browse extent.
BUG=46636 Review URL: http://codereview.chromium.org/2862034 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51327 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/render_thread.cc17
-rw-r--r--chrome/renderer/render_thread.h5
-rw-r--r--chrome/renderer/render_view.cc13
3 files changed, 28 insertions, 7 deletions
diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc
index 87155c3b..d0d9eed 100644
--- a/chrome/renderer/render_thread.cc
+++ b/chrome/renderer/render_thread.cc
@@ -484,8 +484,10 @@ 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;
+ extension_extents_[i].extension_id = params.extension_apps[i].extension_id;
+ extension_extents_[i].web_extent = params.extension_apps[i].web_extent;
+ extension_extents_[i].browse_extent =
+ params.extension_apps[i].browse_extent;
}
}
@@ -1040,7 +1042,7 @@ void RenderThread::OnGpuChannelEstablished(
}
}
-std::string RenderThread::GetExtensionIdForURL(const GURL& url) {
+std::string RenderThread::GetExtensionIdByURL(const GURL& url) {
if (url.SchemeIs(chrome::kExtensionScheme))
return url.host();
@@ -1051,3 +1053,12 @@ std::string RenderThread::GetExtensionIdForURL(const GURL& url) {
return std::string();
}
+
+std::string RenderThread::GetExtensionIdByBrowseExtent(const GURL& url) {
+ for (size_t i = 0; i < extension_extents_.size(); ++i) {
+ if (extension_extents_[i].browse_extent.ContainsURL(url))
+ return extension_extents_[i].extension_id;
+ }
+
+ return std::string();
+}
diff --git a/chrome/renderer/render_thread.h b/chrome/renderer/render_thread.h
index 5b8d024..03a865b 100644
--- a/chrome/renderer/render_thread.h
+++ b/chrome/renderer/render_thread.h
@@ -220,7 +220,9 @@ class RenderThread : public RenderThreadBase,
// none. This includes web URLs that are part of an extension's web extent.
// TODO(mpcomplete): this doesn't feel like it belongs here. Find a better
// place.
- std::string GetExtensionIdForURL(const GURL& url);
+ std::string GetExtensionIdByURL(const GURL& url);
+
+ std::string GetExtensionIdByBrowseExtent(const GURL& url);
private:
// Contains extension-related data that the renderer needs to know about.
@@ -229,6 +231,7 @@ class RenderThread : public RenderThreadBase,
struct ExtensionInfo {
std::string extension_id;
ExtensionExtent web_extent;
+ ExtensionExtent browse_extent;
};
virtual void OnControlMessageReceived(const IPC::Message& msg);
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 59ec64a..d66d791 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -344,10 +344,17 @@ static bool CrossesExtensionExtents(WebFrame* frame, const GURL& new_url) {
old_url = frame->opener()->url();
std::string old_extension =
- RenderThread::current()->GetExtensionIdForURL(old_url);
+ RenderThread::current()->GetExtensionIdByURL(old_url);
+ if (!old_extension.empty()) {
+ if (RenderThread::current()->GetExtensionIdByBrowseExtent(new_url) ==
+ old_extension) {
+ return false;
+ }
+ }
+
std::string new_extension =
- RenderThread::current()->GetExtensionIdForURL(new_url);
- return (old_extension != new_extension);
+ RenderThread::current()->GetExtensionIdByURL(new_url);
+ return old_extension != new_extension;
}
// Returns the ISO 639_1 language code of the specified |text|, or 'unknown'