Chromium Code Reviews| Index: chrome/renderer/extensions/user_script_slave.cc | 
| diff --git a/chrome/renderer/extensions/user_script_slave.cc b/chrome/renderer/extensions/user_script_slave.cc | 
| index b8309ac74042484ad7ec7d5694f870a5cc8f8855..16155371811fe70bc80d0bbf7a440cfb6943a677 100644 | 
| --- a/chrome/renderer/extensions/user_script_slave.cc | 
| +++ b/chrome/renderer/extensions/user_script_slave.cc | 
| @@ -17,15 +17,20 @@ | 
| #include "chrome/common/extensions/extension_set.h" | 
| #include "chrome/common/url_constants.h" | 
| #include "chrome/renderer/chrome_render_process_observer.h" | 
| +#include "chrome/renderer/extensions/extension_dispatcher.h" | 
| #include "chrome/renderer/extensions/extension_groups.h" | 
| #include "googleurl/src/gurl.h" | 
| #include "grit/renderer_resources.h" | 
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" | 
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityPolicy.h" | 
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebVector.h" | 
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 
| #include "ui/base/resource/resource_bundle.h" | 
| using WebKit::WebFrame; | 
| +using WebKit::WebSecurityOrigin; | 
| +using WebKit::WebSecurityPolicy; | 
| using WebKit::WebString; | 
| using WebKit::WebVector; | 
| using WebKit::WebView; | 
| @@ -60,6 +65,25 @@ int UserScriptSlave::GetIsolatedWorldId(const std::string& extension_id) { | 
| return new_id; | 
| } | 
| +void UserScriptSlave::InitializeIsolatedWorld( | 
| + WebFrame* frame, | 
| + int isolated_world_id, | 
| + const Extension* extension) const { | 
| + frame->setIsolatedWorldSecurityOrigin( | 
| + isolated_world_id, | 
| + WebSecurityOrigin::create(extension->url())); | 
| + | 
| + // We always have access to the origin of the page that we're injecting in. | 
| + GURL frame_url = GURL(frame->url()); | 
| + WebSecurityPolicy::addOriginAccessWhitelistEntry( | 
| 
 
Matt Perry
2011/05/26 22:39:48
note that we never clear the origin access whiteli
 
 | 
| + extension->url(), | 
| + WebString::fromUTF8(frame_url.scheme()), | 
| + WebString::fromUTF8(frame_url.host()), | 
| + false); // do not match subdomains | 
| + | 
| + ExtensionDispatcher::InitHostPermissions(extension); | 
| +} | 
| + | 
| UserScriptSlave::UserScriptSlave(const ExtensionSet* extensions) | 
| : shared_memory_(NULL), | 
| script_deleter_(&scripts_), | 
| @@ -249,6 +273,7 @@ void UserScriptSlave::InjectScripts(WebFrame* frame, | 
| if (!script->extension_id().empty()) { | 
| InsertInitExtensionCode(&sources, script->extension_id()); | 
| isolated_world_id = GetIsolatedWorldId(script->extension_id()); | 
| + InitializeIsolatedWorld(frame, isolated_world_id, extension); | 
| } | 
| PerfTimer exec_timer; |