diff options
58 files changed, 200 insertions, 228 deletions
diff --git a/chrome/renderer/extensions/api_activity_logger.cc b/chrome/renderer/extensions/api_activity_logger.cc index 2055a12..8f8b2a8 100644 --- a/chrome/renderer/extensions/api_activity_logger.cc +++ b/chrome/renderer/extensions/api_activity_logger.cc @@ -15,8 +15,8 @@ using content::V8ValueConverter; namespace extensions { APIActivityLogger::APIActivityLogger( - Dispatcher* dispatcher, v8::Handle<v8::Context> v8_context) - : ChromeV8Extension(dispatcher, v8_context) { + Dispatcher* dispatcher, ChromeV8Context* context) + : ChromeV8Extension(dispatcher, context) { RouteFunction("LogEvent", base::Bind(&APIActivityLogger::LogEvent)); RouteFunction("LogAPICall", base::Bind(&APIActivityLogger::LogAPICall)); } @@ -81,4 +81,3 @@ void APIActivityLogger::LogBlockedCall(const std::string& extension_id, } // namespace extensions - diff --git a/chrome/renderer/extensions/api_activity_logger.h b/chrome/renderer/extensions/api_activity_logger.h index 9616d4a..86240e9 100644 --- a/chrome/renderer/extensions/api_activity_logger.h +++ b/chrome/renderer/extensions/api_activity_logger.h @@ -17,7 +17,7 @@ namespace extensions { // recording and display. class APIActivityLogger : public ChromeV8Extension { public: - APIActivityLogger(Dispatcher* dispatcher, v8::Handle<v8::Context> v8_context); + APIActivityLogger(Dispatcher* dispatcher, ChromeV8Context* context); // This is ultimately invoked in schema_generated_bindings.js with // JavaScript arguments. Logged as an APIAction. @@ -57,4 +57,3 @@ class APIActivityLogger : public ChromeV8Extension { } // namespace extensions #endif // CHROME_RENDERER_EXTENSIONS_API_ACTIVITY_LOGGER_H_ - diff --git a/chrome/renderer/extensions/api_definitions_natives.cc b/chrome/renderer/extensions/api_definitions_natives.cc index 6004c7a..6052350 100644 --- a/chrome/renderer/extensions/api_definitions_natives.cc +++ b/chrome/renderer/extensions/api_definitions_natives.cc @@ -16,8 +16,7 @@ namespace extensions { ApiDefinitionsNatives::ApiDefinitionsNatives(Dispatcher* dispatcher, ChromeV8Context* context) - : ChromeV8Extension(dispatcher, context->v8_context()), - context_(context) { + : ChromeV8Extension(dispatcher, context) { RouteFunction("GetExtensionAPIDefinitions", base::Bind(&ApiDefinitionsNatives::GetExtensionAPIDefinitions, base::Unretained(this))); diff --git a/chrome/renderer/extensions/api_definitions_natives.h b/chrome/renderer/extensions/api_definitions_natives.h index 00f6d64..e0c19cb 100644 --- a/chrome/renderer/extensions/api_definitions_natives.h +++ b/chrome/renderer/extensions/api_definitions_natives.h @@ -22,9 +22,6 @@ class ApiDefinitionsNatives : public ChromeV8Extension { private: // Returns the list of all schemas that are available to the calling context. v8::Handle<v8::Value> GetExtensionAPIDefinitions(const v8::Arguments& args); - - ChromeV8Context* context_; - DISALLOW_COPY_AND_ASSIGN(ApiDefinitionsNatives); }; diff --git a/chrome/renderer/extensions/app_bindings.cc b/chrome/renderer/extensions/app_bindings.cc index b036bb2..c6c5abc 100644 --- a/chrome/renderer/extensions/app_bindings.cc +++ b/chrome/renderer/extensions/app_bindings.cc @@ -57,7 +57,7 @@ const char* kInvalidCallbackIdError = "Invalid callbackId"; } // namespace AppBindings::AppBindings(Dispatcher* dispatcher, ChromeV8Context* context) - : ChromeV8Extension(dispatcher, context->v8_context()), + : ChromeV8Extension(dispatcher, context), ChromeV8ExtensionHandler(context) { RouteFunction("GetIsInstalled", base::Bind(&AppBindings::GetIsInstalled, base::Unretained(this))); @@ -73,7 +73,7 @@ AppBindings::AppBindings(Dispatcher* dispatcher, ChromeV8Context* context) v8::Handle<v8::Value> AppBindings::GetIsInstalled( const v8::Arguments& args) { - const Extension* extension = context_->extension(); + const Extension* extension = context()->extension(); // TODO(aa): Why only hosted app? bool result = extension && extension->is_hosted_app() && @@ -83,14 +83,14 @@ v8::Handle<v8::Value> AppBindings::GetIsInstalled( v8::Handle<v8::Value> AppBindings::GetDetails( const v8::Arguments& args) { - CHECK(context_->web_frame()); - return GetDetailsForFrameImpl(context_->web_frame()); + CHECK(context()->web_frame()); + return GetDetailsForFrameImpl(context()->web_frame()); } v8::Handle<v8::Value> AppBindings::GetDetailsForFrame( const v8::Arguments& args) { - CHECK(context_->web_frame()); - if (!CheckAccessToAppDetails(context_->web_frame())) + CHECK(context()->web_frame()); + if (!CheckAccessToAppDetails(context()->web_frame())) return v8::Undefined(); if (args.Length() < 0) @@ -143,11 +143,11 @@ v8::Handle<v8::Value> AppBindings::GetInstallState(const v8::Arguments& args) { callback_id = args[0]->Int32Value(); } - content::RenderView* render_view = context_->GetRenderView(); + content::RenderView* render_view = context()->GetRenderView(); CHECK(render_view); Send(new ExtensionHostMsg_GetAppInstallState( - render_view->GetRoutingID(), context_->web_frame()->document().url(), + render_view->GetRoutingID(), context()->web_frame()->document().url(), GetRoutingID(), callback_id)); return v8::Undefined(); } @@ -155,7 +155,7 @@ v8::Handle<v8::Value> AppBindings::GetInstallState(const v8::Arguments& args) { v8::Handle<v8::Value> AppBindings::GetRunningState(const v8::Arguments& args) { // To distinguish between ready_to_run and cannot_run states, we need the top // level frame. - const WebFrame* parent_frame = context_->web_frame(); + const WebFrame* parent_frame = context()->web_frame(); while (parent_frame->parent()) parent_frame = parent_frame->parent(); @@ -166,8 +166,8 @@ v8::Handle<v8::Value> AppBindings::GetRunningState(const v8::Arguments& args) { ExtensionURLInfo(parent_frame->document().url())); // The app associated with this frame. - const Extension* this_app = extensions->GetHostedAppByURL( - ExtensionURLInfo(context_->web_frame()->document().url())); + const Extension* this_app = extensions->GetHostedAppByURL(ExtensionURLInfo( + context()->web_frame()->document().url())); if (!this_app || !parent_app) return v8::String::New(extension_misc::kAppStateCannotRun); @@ -199,12 +199,12 @@ bool AppBindings::OnMessageReceived(const IPC::Message& message) { void AppBindings::OnAppInstallStateResponse( const std::string& state, int callback_id) { v8::HandleScope handle_scope; - v8::Context::Scope context_scope(context_->v8_context()); + v8::Context::Scope context_scope(context()->v8_context()); v8::Handle<v8::Value> argv[2]; argv[0] = v8::String::New(state.c_str()); argv[1] = v8::Integer::New(callback_id); - CHECK(context_->CallChromeHiddenMethod("app.onInstallStateResponse", - arraysize(argv), argv, NULL)); + CHECK(context()->CallChromeHiddenMethod( + "app.onInstallStateResponse", arraysize(argv), argv, NULL)); } } // namespace extensions diff --git a/chrome/renderer/extensions/app_runtime_custom_bindings.cc b/chrome/renderer/extensions/app_runtime_custom_bindings.cc index e9fbabb..812f8a0 100644 --- a/chrome/renderer/extensions/app_runtime_custom_bindings.cc +++ b/chrome/renderer/extensions/app_runtime_custom_bindings.cc @@ -58,7 +58,7 @@ namespace extensions { AppRuntimeCustomBindings::AppRuntimeCustomBindings( Dispatcher* dispatcher, - v8::Handle<v8::Context> context) : ChromeV8Extension(dispatcher, context) { + ChromeV8Context* context) : ChromeV8Extension(dispatcher, context) { RouteFunction("DeserializeString", base::Bind(&DeserializeString)); RouteFunction("SerializeToString", base::Bind(&SerializeToString)); RouteFunction("CreateBlob", base::Bind(&CreateBlob)); diff --git a/chrome/renderer/extensions/app_runtime_custom_bindings.h b/chrome/renderer/extensions/app_runtime_custom_bindings.h index c691300..2d63ded 100644 --- a/chrome/renderer/extensions/app_runtime_custom_bindings.h +++ b/chrome/renderer/extensions/app_runtime_custom_bindings.h @@ -13,7 +13,7 @@ namespace extensions { class AppRuntimeCustomBindings : public ChromeV8Extension { public: AppRuntimeCustomBindings(Dispatcher* dispatcher, - v8::Handle<v8::Context> context); + ChromeV8Context* context); private: DISALLOW_COPY_AND_ASSIGN(AppRuntimeCustomBindings); diff --git a/chrome/renderer/extensions/app_window_custom_bindings.cc b/chrome/renderer/extensions/app_window_custom_bindings.cc index 060dc5a..5ff47fc88 100644 --- a/chrome/renderer/extensions/app_window_custom_bindings.cc +++ b/chrome/renderer/extensions/app_window_custom_bindings.cc @@ -52,7 +52,7 @@ class DidCreateDocumentElementObserver : public content::RenderViewObserver { AppWindowCustomBindings::AppWindowCustomBindings( Dispatcher* dispatcher, - v8::Handle<v8::Context> context) : ChromeV8Extension(dispatcher, context) { + ChromeV8Context* context) : ChromeV8Extension(dispatcher, context) { RouteFunction("GetView", base::Bind(&AppWindowCustomBindings::GetView, base::Unretained(this))); diff --git a/chrome/renderer/extensions/app_window_custom_bindings.h b/chrome/renderer/extensions/app_window_custom_bindings.h index be84aa0..f94aa74 100644 --- a/chrome/renderer/extensions/app_window_custom_bindings.h +++ b/chrome/renderer/extensions/app_window_custom_bindings.h @@ -13,8 +13,7 @@ class Dispatcher; // Implements custom bindings for the app.window API. class AppWindowCustomBindings : public ChromeV8Extension { public: - AppWindowCustomBindings(Dispatcher* dispatcher, - v8::Handle<v8::Context> context); + AppWindowCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context); private: v8::Handle<v8::Value> GetView(const v8::Arguments& args); diff --git a/chrome/renderer/extensions/chrome_v8_extension.cc b/chrome/renderer/extensions/chrome_v8_extension.cc index 2a3e7d6d..018addc 100644 --- a/chrome/renderer/extensions/chrome_v8_extension.cc +++ b/chrome/renderer/extensions/chrome_v8_extension.cc @@ -26,7 +26,7 @@ using WebKit::WebView; namespace extensions { ChromeV8Extension::ChromeV8Extension(Dispatcher* dispatcher, - v8::Handle<v8::Context> context) + ChromeV8Context* context) : ObjectBackedNativeHandler(context), dispatcher_(dispatcher) { CHECK(dispatcher); @@ -35,18 +35,12 @@ ChromeV8Extension::ChromeV8Extension(Dispatcher* dispatcher, ChromeV8Extension::~ChromeV8Extension() { } -ChromeV8Context* ChromeV8Extension::GetContext() { - return dispatcher_->v8_context_set().GetByV8Context(v8_context()); -} - content::RenderView* ChromeV8Extension::GetRenderView() { - ChromeV8Context* context = GetContext(); - return context ? context->GetRenderView() : NULL; + return context() ? context()->GetRenderView() : NULL; } const Extension* ChromeV8Extension::GetExtensionForRenderView() { - ChromeV8Context* context = GetContext(); - return context ? context->extension() : NULL; + return context() ? context()->extension() : NULL; } } // namespace extensions diff --git a/chrome/renderer/extensions/chrome_v8_extension.h b/chrome/renderer/extensions/chrome_v8_extension.h index b6fc050..25ef15c 100644 --- a/chrome/renderer/extensions/chrome_v8_extension.h +++ b/chrome/renderer/extensions/chrome_v8_extension.h @@ -35,13 +35,11 @@ class Extension; // Custom bindings should extend ObjectBackedNativeHandler. class ChromeV8Extension : public ObjectBackedNativeHandler { public: - ChromeV8Extension(Dispatcher* dispatcher, v8::Handle<v8::Context> context); + ChromeV8Extension(Dispatcher* dispatcher, ChromeV8Context* context); virtual ~ChromeV8Extension(); Dispatcher* dispatcher() { return dispatcher_; } - ChromeV8Context* GetContext(); - // Shortcuts through to the context's render view and extension. content::RenderView* GetRenderView(); const Extension* GetExtensionForRenderView(); diff --git a/chrome/renderer/extensions/content_watcher.cc b/chrome/renderer/extensions/content_watcher.cc index 72c3334..d19960e 100644 --- a/chrome/renderer/extensions/content_watcher.cc +++ b/chrome/renderer/extensions/content_watcher.cc @@ -20,9 +20,9 @@ namespace { class MutationHandler : public ChromeV8Extension { public: explicit MutationHandler(Dispatcher* dispatcher, - v8::Handle<v8::Context> v8_context, + ChromeV8Context* context, base::WeakPtr<ContentWatcher> content_watcher) - : ChromeV8Extension(dispatcher, v8_context), + : ChromeV8Extension(dispatcher, context), content_watcher_(content_watcher) { RouteFunction("FrameMutated", base::Bind(&MutationHandler::FrameMutated, @@ -33,7 +33,7 @@ class MutationHandler : public ChromeV8Extension { v8::Handle<v8::Value> FrameMutated(const v8::Arguments& args) { if (content_watcher_.get()) { content_watcher_->ScanAndNotify( - WebKit::WebFrame::frameForContext(v8_context())); + WebKit::WebFrame::frameForContext(context()->v8_context())); } return v8::Undefined(); } @@ -49,9 +49,9 @@ ContentWatcher::ContentWatcher(Dispatcher* dispatcher) ContentWatcher::~ContentWatcher() {} scoped_ptr<NativeHandler> ContentWatcher::MakeNatives( - v8::Handle<v8::Context> v8_context) { + ChromeV8Context* context) { return scoped_ptr<NativeHandler>(new MutationHandler( - dispatcher_, v8_context, weak_ptr_factory_.GetWeakPtr())); + dispatcher_, context, weak_ptr_factory_.GetWeakPtr())); } void ContentWatcher::OnWatchPages( diff --git a/chrome/renderer/extensions/content_watcher.h b/chrome/renderer/extensions/content_watcher.h index beefee5..8ef9d48 100644 --- a/chrome/renderer/extensions/content_watcher.h +++ b/chrome/renderer/extensions/content_watcher.h @@ -36,7 +36,7 @@ class ContentWatcher { ~ContentWatcher(); // Returns the callback to call on a frame change. - scoped_ptr<NativeHandler> MakeNatives(v8::Handle<v8::Context> v8_context); + scoped_ptr<NativeHandler> MakeNatives(ChromeV8Context* context); // Handler for ExtensionMsg_WatchPages. void OnWatchPages(const std::vector<std::string>& css_selectors); diff --git a/chrome/renderer/extensions/context_menus_custom_bindings.cc b/chrome/renderer/extensions/context_menus_custom_bindings.cc index 0043307..05c0c54 100644 --- a/chrome/renderer/extensions/context_menus_custom_bindings.cc +++ b/chrome/renderer/extensions/context_menus_custom_bindings.cc @@ -24,8 +24,8 @@ v8::Handle<v8::Value> GetNextContextMenuId(const v8::Arguments& args) { namespace extensions { ContextMenusCustomBindings::ContextMenusCustomBindings( - Dispatcher* dispatcher, v8::Handle<v8::Context> v8_context) - : ChromeV8Extension(dispatcher, v8_context) { + Dispatcher* dispatcher, ChromeV8Context* context) + : ChromeV8Extension(dispatcher, context) { RouteFunction("GetNextContextMenuId", base::Bind(&GetNextContextMenuId)); } diff --git a/chrome/renderer/extensions/context_menus_custom_bindings.h b/chrome/renderer/extensions/context_menus_custom_bindings.h index b4c378c..3d5a828 100644 --- a/chrome/renderer/extensions/context_menus_custom_bindings.h +++ b/chrome/renderer/extensions/context_menus_custom_bindings.h @@ -12,8 +12,7 @@ namespace extensions { // Implements custom bindings for the contextMenus API. class ContextMenusCustomBindings : public ChromeV8Extension { public: - ContextMenusCustomBindings(Dispatcher* dispatcher, - v8::Handle<v8::Context> v8_context); + ContextMenusCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context); }; } // extensions diff --git a/chrome/renderer/extensions/dispatcher.cc b/chrome/renderer/extensions/dispatcher.cc index ea89a3f..60ae92c 100644 --- a/chrome/renderer/extensions/dispatcher.cc +++ b/chrome/renderer/extensions/dispatcher.cc @@ -119,7 +119,7 @@ static v8::Handle<v8::Object> GetOrCreateChrome( class TestFeaturesNativeHandler : public ObjectBackedNativeHandler { public: - explicit TestFeaturesNativeHandler(v8::Handle<v8::Context> context) + explicit TestFeaturesNativeHandler(ChromeV8Context* context) : ObjectBackedNativeHandler(context) { RouteFunction("GetAPIFeatures", base::Bind(&TestFeaturesNativeHandler::GetAPIFeatures, @@ -133,14 +133,14 @@ class TestFeaturesNativeHandler : public ObjectBackedNativeHandler { IDR_EXTENSION_API_FEATURES).as_string()); scoped_ptr<content::V8ValueConverter> converter( content::V8ValueConverter::create()); - return converter->ToV8Value(value, v8_context()); + return converter->ToV8Value(value, context()->v8_context()); } }; class SchemaRegistryNativeHandler : public ObjectBackedNativeHandler { public: SchemaRegistryNativeHandler(V8SchemaRegistry* registry, - v8::Handle<v8::Context> context) + ChromeV8Context* context) : ObjectBackedNativeHandler(context), registry_(registry) { RouteFunction("GetSchema", @@ -159,7 +159,7 @@ class SchemaRegistryNativeHandler : public ObjectBackedNativeHandler { class V8ContextNativeHandler : public ObjectBackedNativeHandler { public: V8ContextNativeHandler(ChromeV8Context* context, Dispatcher* dispatcher) - : ObjectBackedNativeHandler(context->v8_context()), + : ObjectBackedNativeHandler(context), context_(context), dispatcher_(dispatcher) { RouteFunction("GetAvailability", @@ -200,7 +200,7 @@ class V8ContextNativeHandler : public ObjectBackedNativeHandler { class ChromeHiddenNativeHandler : public ObjectBackedNativeHandler { public: - explicit ChromeHiddenNativeHandler(v8::Handle<v8::Context> context) + explicit ChromeHiddenNativeHandler(ChromeV8Context* context) : ObjectBackedNativeHandler(context) { RouteFunction("GetChromeHidden", base::Bind(&ChromeHiddenNativeHandler::GetChromeHidden, @@ -208,26 +208,26 @@ class ChromeHiddenNativeHandler : public ObjectBackedNativeHandler { } v8::Handle<v8::Value> GetChromeHidden(const v8::Arguments& args) { - return ChromeV8Context::GetOrCreateChromeHidden(v8_context()); + return ChromeV8Context::GetOrCreateChromeHidden(context()->v8_context()); } }; class ChromeNativeHandler : public ObjectBackedNativeHandler { public: - explicit ChromeNativeHandler(v8::Handle<v8::Context> context) + explicit ChromeNativeHandler(ChromeV8Context* context) : ObjectBackedNativeHandler(context) { RouteFunction("GetChrome", base::Bind(&ChromeNativeHandler::GetChrome, base::Unretained(this))); } v8::Handle<v8::Value> GetChrome(const v8::Arguments& args) { - return GetOrCreateChrome(v8_context()); + return GetOrCreateChrome(context()->v8_context()); } }; class PrintNativeHandler : public ObjectBackedNativeHandler { public: - explicit PrintNativeHandler(v8::Handle<v8::Context> context) + explicit PrintNativeHandler(ChromeV8Context* context) : ObjectBackedNativeHandler(context) { RouteFunction("Print", base::Bind(&PrintNativeHandler::Print, @@ -250,7 +250,7 @@ class PrintNativeHandler : public ObjectBackedNativeHandler { class LazyBackgroundPageNativeHandler : public ChromeV8Extension { public: LazyBackgroundPageNativeHandler(Dispatcher* dispatcher, - v8::Handle<v8::Context> context) + ChromeV8Context* context) : ChromeV8Extension(dispatcher, context) { RouteFunction("IncrementKeepaliveCount", base::Bind(&LazyBackgroundPageNativeHandler::IncrementKeepaliveCount, @@ -261,12 +261,10 @@ class LazyBackgroundPageNativeHandler : public ChromeV8Extension { } v8::Handle<v8::Value> IncrementKeepaliveCount(const v8::Arguments& args) { - ChromeV8Context* context = - dispatcher()->v8_context_set().GetByV8Context(v8_context()); - if (!context) + if (!context()) return v8::Undefined(); - RenderView* render_view = context->GetRenderView(); - if (IsContextLazyBackgroundPage(render_view, context->extension())) { + RenderView* render_view = context()->GetRenderView(); + if (IsContextLazyBackgroundPage(render_view, context()->extension())) { render_view->Send(new ExtensionHostMsg_IncrementLazyKeepaliveCount( render_view->GetRoutingID())); } @@ -274,12 +272,10 @@ class LazyBackgroundPageNativeHandler : public ChromeV8Extension { } v8::Handle<v8::Value> DecrementKeepaliveCount(const v8::Arguments& args) { - ChromeV8Context* context = - dispatcher()->v8_context_set().GetByV8Context(v8_context()); - if (!context) + if (!context()) return v8::Undefined(); - RenderView* render_view = context->GetRenderView(); - if (IsContextLazyBackgroundPage(render_view, context->extension())) { + RenderView* render_view = context()->GetRenderView(); + if (IsContextLazyBackgroundPage(render_view, context()->extension())) { render_view->Send(new ExtensionHostMsg_DecrementLazyKeepaliveCount( render_view->GetRoutingID())); } @@ -301,7 +297,7 @@ class LazyBackgroundPageNativeHandler : public ChromeV8Extension { class ProcessInfoNativeHandler : public ChromeV8Extension { public: ProcessInfoNativeHandler(Dispatcher* dispatcher, - v8::Handle<v8::Context> context, + ChromeV8Context* context, const std::string& extension_id, const std::string& context_type, bool is_incognito_context, @@ -365,7 +361,7 @@ class ProcessInfoNativeHandler : public ChromeV8Extension { class LoggingNativeHandler : public ObjectBackedNativeHandler { public: - explicit LoggingNativeHandler(v8::Handle<v8::Context> context) + explicit LoggingNativeHandler(ChromeV8Context* context) : ObjectBackedNativeHandler(context) { RouteFunction("DCHECK", base::Bind(&LoggingNativeHandler::Dcheck, base::Unretained(this))); @@ -789,12 +785,10 @@ void Dispatcher::RegisterSchemaGeneratedBindings( void Dispatcher::RegisterNativeHandlers(ModuleSystem* module_system, ChromeV8Context* context) { - v8::Handle<v8::Context> v8_context = context->v8_context(); - module_system->RegisterNativeHandler("event_bindings", - scoped_ptr<NativeHandler>(EventBindings::Create(this, v8_context))); + scoped_ptr<NativeHandler>(EventBindings::Create(this, context))); module_system->RegisterNativeHandler("miscellaneous_bindings", - scoped_ptr<NativeHandler>(MiscellaneousBindings::Get(this, v8_context))); + scoped_ptr<NativeHandler>(MiscellaneousBindings::Get(this, context))); module_system->RegisterNativeHandler("apiDefinitions", scoped_ptr<NativeHandler>(new ApiDefinitionsNatives(this, context))); module_system->RegisterNativeHandler("sendRequest", @@ -805,59 +799,59 @@ void Dispatcher::RegisterNativeHandlers(ModuleSystem* module_system, new SetIconNatives(this, request_sender_.get(), context))); module_system->RegisterNativeHandler( "contentWatcherNative", - content_watcher_->MakeNatives(v8_context)); + content_watcher_->MakeNatives(context)); module_system->RegisterNativeHandler("activityLogger", - scoped_ptr<NativeHandler>(new APIActivityLogger(this, v8_context))); + scoped_ptr<NativeHandler>(new APIActivityLogger(this, context))); // Natives used by multiple APIs. module_system->RegisterNativeHandler("file_system_natives", - scoped_ptr<NativeHandler>(new FileSystemNatives(v8_context))); + scoped_ptr<NativeHandler>(new FileSystemNatives(context))); // Custom bindings. module_system->RegisterNativeHandler("app", scoped_ptr<NativeHandler>(new AppBindings(this, context))); module_system->RegisterNativeHandler("app_runtime", scoped_ptr<NativeHandler>( - new AppRuntimeCustomBindings(this, v8_context))); + new AppRuntimeCustomBindings(this, context))); module_system->RegisterNativeHandler("app_window", scoped_ptr<NativeHandler>( - new AppWindowCustomBindings(this, v8_context))); + new AppWindowCustomBindings(this, context))); module_system->RegisterNativeHandler("context_menus", scoped_ptr<NativeHandler>( - new ContextMenusCustomBindings(this, v8_context))); + new ContextMenusCustomBindings(this, context))); module_system->RegisterNativeHandler("extension", scoped_ptr<NativeHandler>( - new ExtensionCustomBindings(this, v8_context))); + new ExtensionCustomBindings(this, context))); module_system->RegisterNativeHandler("sync_file_system", scoped_ptr<NativeHandler>( - new SyncFileSystemCustomBindings(this, v8_context))); + new SyncFileSystemCustomBindings(this, context))); module_system->RegisterNativeHandler("file_browser_handler", scoped_ptr<NativeHandler>(new FileBrowserHandlerCustomBindings( - this, v8_context))); + this, context))); module_system->RegisterNativeHandler("file_browser_private", scoped_ptr<NativeHandler>(new FileBrowserPrivateCustomBindings( - this, v8_context))); + this, context))); module_system->RegisterNativeHandler("i18n", scoped_ptr<NativeHandler>( - new I18NCustomBindings(this, v8_context))); + new I18NCustomBindings(this, context))); module_system->RegisterNativeHandler("mediaGalleries", scoped_ptr<NativeHandler>( - new MediaGalleriesCustomBindings(this, v8_context))); + new MediaGalleriesCustomBindings(this, context))); module_system->RegisterNativeHandler("page_actions", scoped_ptr<NativeHandler>( - new PageActionsCustomBindings(this, v8_context))); + new PageActionsCustomBindings(this, context))); module_system->RegisterNativeHandler("page_capture", scoped_ptr<NativeHandler>( - new PageCaptureCustomBindings(this, v8_context))); + new PageCaptureCustomBindings(this, context))); module_system->RegisterNativeHandler("runtime", scoped_ptr<NativeHandler>(new RuntimeCustomBindings(this, context))); module_system->RegisterNativeHandler("tabs", - scoped_ptr<NativeHandler>(new TabsCustomBindings(this, v8_context))); + scoped_ptr<NativeHandler>(new TabsCustomBindings(this, context))); module_system->RegisterNativeHandler("tts", - scoped_ptr<NativeHandler>(new TTSCustomBindings(this, v8_context))); + scoped_ptr<NativeHandler>(new TTSCustomBindings(this, context))); module_system->RegisterNativeHandler("web_request", scoped_ptr<NativeHandler>( - new WebRequestCustomBindings(this, v8_context))); + new WebRequestCustomBindings(this, context))); module_system->RegisterNativeHandler("webstore", scoped_ptr<NativeHandler>(new WebstoreBindings(this, context))); } @@ -1018,7 +1012,7 @@ void Dispatcher::DidCreateScriptContext( new ChromeV8Context(v8_context, frame, extension, context_type); v8_context_set_.Add(context); - scoped_ptr<ModuleSystem> module_system(new ModuleSystem(v8_context, + scoped_ptr<ModuleSystem> module_system(new ModuleSystem(context, &source_map_)); // Enable natives in startup. ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system.get()); @@ -1026,23 +1020,23 @@ void Dispatcher::DidCreateScriptContext( RegisterNativeHandlers(module_system.get(), context); module_system->RegisterNativeHandler("chrome", - scoped_ptr<NativeHandler>(new ChromeNativeHandler(v8_context))); + scoped_ptr<NativeHandler>(new ChromeNativeHandler(context))); module_system->RegisterNativeHandler("chrome_hidden", - scoped_ptr<NativeHandler>(new ChromeHiddenNativeHandler(v8_context))); + scoped_ptr<NativeHandler>(new ChromeHiddenNativeHandler(context))); module_system->RegisterNativeHandler("print", - scoped_ptr<NativeHandler>(new PrintNativeHandler(v8_context))); + scoped_ptr<NativeHandler>(new PrintNativeHandler(context))); module_system->RegisterNativeHandler("lazy_background_page", scoped_ptr<NativeHandler>( - new LazyBackgroundPageNativeHandler(this, v8_context))); + new LazyBackgroundPageNativeHandler(this, context))); module_system->RegisterNativeHandler("logging", - scoped_ptr<NativeHandler>(new LoggingNativeHandler(v8_context))); + scoped_ptr<NativeHandler>(new LoggingNativeHandler(context))); module_system->RegisterNativeHandler("schema_registry", scoped_ptr<NativeHandler>( - new SchemaRegistryNativeHandler(v8_schema_registry(), v8_context))); + new SchemaRegistryNativeHandler(v8_schema_registry(), context))); module_system->RegisterNativeHandler("v8_context", scoped_ptr<NativeHandler>(new V8ContextNativeHandler(context, this))); module_system->RegisterNativeHandler("test_features", - scoped_ptr<NativeHandler>(new TestFeaturesNativeHandler(v8_context))); + scoped_ptr<NativeHandler>(new TestFeaturesNativeHandler(context))); int manifest_version = extension ? extension->manifest_version() : 1; bool send_request_disabled = @@ -1050,7 +1044,7 @@ void Dispatcher::DidCreateScriptContext( BackgroundInfo::HasLazyBackgroundPage(extension)); module_system->RegisterNativeHandler("process", scoped_ptr<NativeHandler>(new ProcessInfoNativeHandler( - this, v8_context, context->GetExtensionID(), + this, context, context->GetExtensionID(), context->GetContextTypeDescription(), ChromeRenderProcessObserver::is_incognito_process(), manifest_version, send_request_disabled))); diff --git a/chrome/renderer/extensions/event_bindings.cc b/chrome/renderer/extensions/event_bindings.cc index 6a25aaa..ce40cb7 100644 --- a/chrome/renderer/extensions/event_bindings.cc +++ b/chrome/renderer/extensions/event_bindings.cc @@ -70,9 +70,8 @@ base::LazyInstance<EventFilter> g_event_filter = LAZY_INSTANCE_INITIALIZER; // TODO(koz): Merge this into EventBindings. class ExtensionImpl : public ChromeV8Extension { public: - explicit ExtensionImpl(Dispatcher* dispatcher, - v8::Handle<v8::Context> v8_context) - : ChromeV8Extension(dispatcher, v8_context) { + explicit ExtensionImpl(Dispatcher* dispatcher, ChromeV8Context* context) + : ChromeV8Extension(dispatcher, context) { RouteFunction("AttachEvent", base::Bind(&ExtensionImpl::AttachEvent, base::Unretained(this))); RouteFunction("DetachEvent", @@ -98,14 +97,12 @@ class ExtensionImpl : public ChromeV8Extension { if (args[0]->IsString()) { std::string event_name = *v8::String::AsciiValue(args[0]->ToString()); - const ChromeV8ContextSet& context_set = dispatcher_->v8_context_set(); - ChromeV8Context* context = context_set.GetByV8Context(v8_context()); - CHECK(context); + CHECK(context()); - if (!dispatcher_->CheckContextAccessToExtensionAPI(event_name, context)) + if (!dispatcher_->CheckContextAccessToExtensionAPI(event_name, context())) return v8::Undefined(); - std::string extension_id = context->GetExtensionID(); + std::string extension_id = context()->GetExtensionID(); EventListenerCounts& listener_counts = g_listener_counts.Get()[extension_id]; if (++listener_counts[event_name] == 1) { @@ -116,7 +113,7 @@ class ExtensionImpl : public ChromeV8Extension { // This is called the first time the page has added a listener. Since // the background page is the only lazy page, we know this is the first // time this listener has been registered. - if (IsLazyBackgroundPage(GetRenderView(), context->extension())) { + if (IsLazyBackgroundPage(GetRenderView(), context()->extension())) { content::RenderThread::Get()->Send( new ExtensionHostMsg_AddLazyListener(extension_id, event_name)); } @@ -133,12 +130,10 @@ class ExtensionImpl : public ChromeV8Extension { std::string event_name = *v8::String::AsciiValue(args[0]->ToString()); bool is_manual = args[1]->BooleanValue(); - const ChromeV8ContextSet& context_set = dispatcher_->v8_context_set(); - ChromeV8Context* context = context_set.GetByV8Context(v8_context()); - if (!context) + if (!context()) return v8::Undefined(); - std::string extension_id = context->GetExtensionID(); + std::string extension_id = context()->GetExtensionID(); EventListenerCounts& listener_counts = g_listener_counts.Get()[extension_id]; @@ -152,7 +147,7 @@ class ExtensionImpl : public ChromeV8Extension { // last listener manually, then we assume that it is no longer interested // in being awakened for this event. if (is_manual && IsLazyBackgroundPage(GetRenderView(), - context->extension())) { + context()->extension())) { content::RenderThread::Get()->Send( new ExtensionHostMsg_RemoveLazyListener(extension_id, event_name)); } @@ -170,18 +165,16 @@ class ExtensionImpl : public ChromeV8Extension { DCHECK(args[0]->IsString()); DCHECK(args[1]->IsObject()); - const ChromeV8ContextSet& context_set = dispatcher_->v8_context_set(); - ChromeV8Context* context = context_set.GetByV8Context(v8_context()); - DCHECK(context); - if (!context) + DCHECK(context()); + if (!context()) return v8::Integer::New(-1); std::string event_name = *v8::String::AsciiValue(args[0]); // This method throws an exception if it returns false. - if (!dispatcher_->CheckContextAccessToExtensionAPI(event_name, context)) + if (!dispatcher_->CheckContextAccessToExtensionAPI(event_name, context())) return v8::Undefined(); - std::string extension_id = context->GetExtensionID(); + std::string extension_id = context()->GetExtensionID(); if (extension_id.empty()) return v8::Integer::New(-1); @@ -191,7 +184,7 @@ class ExtensionImpl : public ChromeV8Extension { base::DictionaryValue* filter_dict = NULL; base::Value* filter_value = - converter->FromV8Value(args[1]->ToObject(), context->v8_context()); + converter->FromV8Value(args[1]->ToObject(), context()->v8_context()); if (!filter_value) return v8::Integer::New(-1); if (!filter_value->GetAsDictionary(&filter_dict)) { @@ -206,7 +199,7 @@ class ExtensionImpl : public ChromeV8Extension { // Only send IPCs the first time a filter gets added. if (AddFilter(event_name, extension_id, filter.get())) { - bool lazy = IsLazyBackgroundPage(GetRenderView(), context->extension()); + bool lazy = IsLazyBackgroundPage(GetRenderView(), context()->extension()); content::RenderThread::Get()->Send( new ExtensionHostMsg_AddFilteredListener(extension_id, event_name, *filter, lazy)); @@ -252,12 +245,10 @@ class ExtensionImpl : public ChromeV8Extension { DCHECK(args[0]->IsInt32()); DCHECK(args[1]->IsBoolean()); bool is_manual = args[1]->BooleanValue(); - const ChromeV8ContextSet& context_set = dispatcher_->v8_context_set(); - ChromeV8Context* context = context_set.GetByV8Context(v8_context()); - if (!context) + if (!context()) return v8::Undefined(); - std::string extension_id = context->GetExtensionID(); + std::string extension_id = context()->GetExtensionID(); if (extension_id.empty()) return v8::Undefined(); @@ -271,7 +262,7 @@ class ExtensionImpl : public ChromeV8Extension { // Only send IPCs the last time a filter gets removed. if (RemoveFilter(event_name, extension_id, event_matcher->value())) { bool lazy = is_manual && IsLazyBackgroundPage(GetRenderView(), - context->extension()); + context()->extension()); content::RenderThread::Get()->Send( new ExtensionHostMsg_RemoveFilteredListener(extension_id, event_name, *event_matcher->value(), @@ -331,7 +322,7 @@ class ExtensionImpl : public ChromeV8Extension { // static ChromeV8Extension* EventBindings::Create(Dispatcher* dispatcher, - v8::Handle<v8::Context> context) { + ChromeV8Context* context) { return new ExtensionImpl(dispatcher, context); } diff --git a/chrome/renderer/extensions/event_bindings.h b/chrome/renderer/extensions/event_bindings.h index a263ad3..c709953 100644 --- a/chrome/renderer/extensions/event_bindings.h +++ b/chrome/renderer/extensions/event_bindings.h @@ -8,6 +8,7 @@ #include "v8/include/v8.h" namespace extensions { +class ChromeV8Context; class ChromeV8Extension; class Dispatcher; class EventFilter; @@ -16,7 +17,7 @@ class EventFilter; class EventBindings { public: static ChromeV8Extension* Create(Dispatcher* dispatcher, - v8::Handle<v8::Context> context); + ChromeV8Context* context); }; } // namespace extensions diff --git a/chrome/renderer/extensions/extension_custom_bindings.cc b/chrome/renderer/extensions/extension_custom_bindings.cc index 7f6c6c2..66cfc1c 100644 --- a/chrome/renderer/extensions/extension_custom_bindings.cc +++ b/chrome/renderer/extensions/extension_custom_bindings.cc @@ -27,9 +27,8 @@ namespace { } // namespace -ExtensionCustomBindings::ExtensionCustomBindings( - Dispatcher* dispatcher, - v8::Handle<v8::Context> context) +ExtensionCustomBindings::ExtensionCustomBindings(Dispatcher* dispatcher, + ChromeV8Context* context) : ChromeV8Extension(dispatcher, context) { RouteFunction("GetExtensionViews", base::Bind(&ExtensionCustomBindings::GetExtensionViews, diff --git a/chrome/renderer/extensions/extension_custom_bindings.h b/chrome/renderer/extensions/extension_custom_bindings.h index fb52a27..1bb3ff3 100644 --- a/chrome/renderer/extensions/extension_custom_bindings.h +++ b/chrome/renderer/extensions/extension_custom_bindings.h @@ -14,7 +14,7 @@ class Dispatcher; class ExtensionCustomBindings : public ChromeV8Extension { public: explicit ExtensionCustomBindings(Dispatcher* dispatcher, - v8::Handle<v8::Context> context); + ChromeV8Context* context); private: v8::Handle<v8::Value> GetExtensionViews(const v8::Arguments& args); diff --git a/chrome/renderer/extensions/file_browser_handler_custom_bindings.cc b/chrome/renderer/extensions/file_browser_handler_custom_bindings.cc index b29e90f..3c6b89c 100644 --- a/chrome/renderer/extensions/file_browser_handler_custom_bindings.cc +++ b/chrome/renderer/extensions/file_browser_handler_custom_bindings.cc @@ -8,6 +8,7 @@ #include "base/basictypes.h" #include "base/logging.h" +#include "chrome/renderer/extensions/chrome_v8_context.h" #include "grit/renderer_resources.h" #include "third_party/WebKit/public/platform/WebFileSystem.h" #include "third_party/WebKit/public/platform/WebFileSystemType.h" @@ -17,7 +18,7 @@ namespace extensions { FileBrowserHandlerCustomBindings::FileBrowserHandlerCustomBindings( - Dispatcher* dispatcher, v8::Handle<v8::Context> context) + Dispatcher* dispatcher, ChromeV8Context* context) : ChromeV8Extension(dispatcher, context) { RouteFunction( "GetExternalFileEntry", @@ -45,7 +46,7 @@ v8::Handle<v8::Value> FileBrowserHandlerCustomBindings::GetExternalFileEntry( bool is_directory = file_def->Get(v8::String::New("fileIsDirectory"))->ToBoolean()->Value(); WebKit::WebFrame* webframe = - WebKit::WebFrame::frameForContext(v8_context()); + WebKit::WebFrame::frameForContext(context()->v8_context()); return webframe->createFileEntry( WebKit::WebFileSystemTypeExternal, WebKit::WebString::fromUTF8(file_system_name.c_str()), diff --git a/chrome/renderer/extensions/file_browser_handler_custom_bindings.h b/chrome/renderer/extensions/file_browser_handler_custom_bindings.h index 7e9948e..c02e501 100644 --- a/chrome/renderer/extensions/file_browser_handler_custom_bindings.h +++ b/chrome/renderer/extensions/file_browser_handler_custom_bindings.h @@ -14,7 +14,7 @@ namespace extensions { class FileBrowserHandlerCustomBindings : public ChromeV8Extension { public: FileBrowserHandlerCustomBindings(Dispatcher* dispatcher, - v8::Handle<v8::Context> context); + ChromeV8Context* context); private: v8::Handle<v8::Value> GetExternalFileEntry(const v8::Arguments& args); diff --git a/chrome/renderer/extensions/file_browser_private_custom_bindings.cc b/chrome/renderer/extensions/file_browser_private_custom_bindings.cc index 1263efc..fee6815 100644 --- a/chrome/renderer/extensions/file_browser_private_custom_bindings.cc +++ b/chrome/renderer/extensions/file_browser_private_custom_bindings.cc @@ -8,6 +8,7 @@ #include "base/basictypes.h" #include "base/logging.h" +#include "chrome/renderer/extensions/chrome_v8_context.h" #include "grit/renderer_resources.h" #include "third_party/WebKit/public/platform/WebFileSystem.h" #include "third_party/WebKit/public/platform/WebFileSystemType.h" @@ -17,7 +18,7 @@ namespace extensions { FileBrowserPrivateCustomBindings::FileBrowserPrivateCustomBindings( - Dispatcher* dispatcher, v8::Handle<v8::Context> context) + Dispatcher* dispatcher, ChromeV8Context* context) : ChromeV8Extension(dispatcher, context) { RouteFunction( "GetLocalFileSystem", @@ -33,7 +34,8 @@ v8::Handle<v8::Value> FileBrowserPrivateCustomBindings::GetLocalFileSystem( std::string name(*v8::String::Utf8Value(args[0])); std::string path(*v8::String::Utf8Value(args[1])); - WebKit::WebFrame* webframe = WebKit::WebFrame::frameForContext(v8_context()); + WebKit::WebFrame* webframe = + WebKit::WebFrame::frameForContext(context()->v8_context()); DCHECK(webframe); return webframe->createFileSystem( WebKit::WebFileSystemTypeExternal, diff --git a/chrome/renderer/extensions/file_browser_private_custom_bindings.h b/chrome/renderer/extensions/file_browser_private_custom_bindings.h index 9b3e84c..91065bb 100644 --- a/chrome/renderer/extensions/file_browser_private_custom_bindings.h +++ b/chrome/renderer/extensions/file_browser_private_custom_bindings.h @@ -14,7 +14,7 @@ namespace extensions { class FileBrowserPrivateCustomBindings : public ChromeV8Extension { public: FileBrowserPrivateCustomBindings(Dispatcher* dispatcher, - v8::Handle<v8::Context> context); + ChromeV8Context* context); v8::Handle<v8::Value> GetLocalFileSystem(const v8::Arguments& args); diff --git a/chrome/renderer/extensions/file_system_natives.cc b/chrome/renderer/extensions/file_system_natives.cc index 1d73be0..7b28e48 100644 --- a/chrome/renderer/extensions/file_system_natives.cc +++ b/chrome/renderer/extensions/file_system_natives.cc @@ -9,6 +9,7 @@ #include "base/basictypes.h" #include "base/logging.h" #include "chrome/common/url_constants.h" +#include "chrome/renderer/extensions/chrome_v8_context.h" #include "chrome/renderer/extensions/user_script_slave.h" #include "extensions/common/constants.h" #include "grit/renderer_resources.h" @@ -21,7 +22,7 @@ namespace extensions { -FileSystemNatives::FileSystemNatives(v8::Handle<v8::Context> context) +FileSystemNatives::FileSystemNatives(ChromeV8Context* context) : ObjectBackedNativeHandler(context) { RouteFunction("GetFileEntry", base::Bind(&FileSystemNatives::GetFileEntry, base::Unretained(this))); @@ -38,7 +39,8 @@ v8::Handle<v8::Value> FileSystemNatives::GetIsolatedFileSystem( DCHECK(args.Length() == 1 || args.Length() == 2); DCHECK(args[0]->IsString()); std::string file_system_id(*v8::String::Utf8Value(args[0])); - WebKit::WebFrame* webframe = WebKit::WebFrame::frameForContext(v8_context()); + WebKit::WebFrame* webframe = + WebKit::WebFrame::frameForContext(context()->v8_context()); DCHECK(webframe); GURL context_url = @@ -91,7 +93,8 @@ v8::Handle<v8::Value> FileSystemNatives::GetFileEntry( DCHECK(args[4]->IsBoolean()); bool is_directory = args[4]->BooleanValue(); - WebKit::WebFrame* webframe = WebKit::WebFrame::frameForContext(v8_context()); + WebKit::WebFrame* webframe = + WebKit::WebFrame::frameForContext(context()->v8_context()); DCHECK(webframe); return webframe->createFileEntry( type, diff --git a/chrome/renderer/extensions/file_system_natives.h b/chrome/renderer/extensions/file_system_natives.h index 46a6f67..b3f9cbc 100644 --- a/chrome/renderer/extensions/file_system_natives.h +++ b/chrome/renderer/extensions/file_system_natives.h @@ -13,7 +13,7 @@ namespace extensions { // Custom bindings for the nativeFileSystem API. class FileSystemNatives : public ObjectBackedNativeHandler { public: - explicit FileSystemNatives(v8::Handle<v8::Context> context); + explicit FileSystemNatives(ChromeV8Context* context); private: v8::Handle<v8::Value> GetFileEntry(const v8::Arguments& args); diff --git a/chrome/renderer/extensions/i18n_custom_bindings.cc b/chrome/renderer/extensions/i18n_custom_bindings.cc index bf86c59..eade2a6 100644 --- a/chrome/renderer/extensions/i18n_custom_bindings.cc +++ b/chrome/renderer/extensions/i18n_custom_bindings.cc @@ -14,7 +14,7 @@ namespace extensions { I18NCustomBindings::I18NCustomBindings(Dispatcher* dispatcher, - v8::Handle<v8::Context> context) + ChromeV8Context* context) : ChromeV8Extension(dispatcher, context) { RouteFunction("GetL10nMessage", base::Bind(&I18NCustomBindings::GetL10nMessage, base::Unretained(this))); diff --git a/chrome/renderer/extensions/i18n_custom_bindings.h b/chrome/renderer/extensions/i18n_custom_bindings.h index 3f0e5c4..26d62a3 100644 --- a/chrome/renderer/extensions/i18n_custom_bindings.h +++ b/chrome/renderer/extensions/i18n_custom_bindings.h @@ -12,7 +12,7 @@ namespace extensions { // Implements custom bindings for the i18n API. class I18NCustomBindings : public ChromeV8Extension { public: - I18NCustomBindings(Dispatcher* dispatcher, v8::Handle<v8::Context> context); + I18NCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context); private: v8::Handle<v8::Value> GetL10nMessage(const v8::Arguments& args); @@ -21,4 +21,3 @@ class I18NCustomBindings : public ChromeV8Extension { } // extensions #endif // CHROME_RENDERER_EXTENSIONS_I18N_CUSTOM_BINDINGS_H_ - diff --git a/chrome/renderer/extensions/media_galleries_custom_bindings.cc b/chrome/renderer/extensions/media_galleries_custom_bindings.cc index 6be473c..cf4e5f1 100644 --- a/chrome/renderer/extensions/media_galleries_custom_bindings.cc +++ b/chrome/renderer/extensions/media_galleries_custom_bindings.cc @@ -17,8 +17,8 @@ namespace extensions { MediaGalleriesCustomBindings::MediaGalleriesCustomBindings( - Dispatcher* dispatcher, v8::Handle<v8::Context> v8_context) - : ChromeV8Extension(dispatcher, v8_context) { + Dispatcher* dispatcher, ChromeV8Context* context) + : ChromeV8Extension(dispatcher, context) { RouteFunction( "GetMediaFileSystemObject", base::Bind(&MediaGalleriesCustomBindings::GetMediaFileSystemObject, diff --git a/chrome/renderer/extensions/media_galleries_custom_bindings.h b/chrome/renderer/extensions/media_galleries_custom_bindings.h index 736c04e..3502843b 100644 --- a/chrome/renderer/extensions/media_galleries_custom_bindings.h +++ b/chrome/renderer/extensions/media_galleries_custom_bindings.h @@ -13,7 +13,7 @@ namespace extensions { class MediaGalleriesCustomBindings : public ChromeV8Extension { public: MediaGalleriesCustomBindings(Dispatcher* dispatcher, - v8::Handle<v8::Context> context); + ChromeV8Context* context); private: // FileSystemObject GetMediaFileSystem(string file_system_url): construct @@ -31,4 +31,3 @@ class MediaGalleriesCustomBindings : public ChromeV8Extension { } // extensions #endif // CHROME_RENDERER_EXTENSIONS_MEDIA_GALLERIES_CUSTOM_BINDINGS_H_ - diff --git a/chrome/renderer/extensions/miscellaneous_bindings.cc b/chrome/renderer/extensions/miscellaneous_bindings.cc index d40d517..0f37653 100644 --- a/chrome/renderer/extensions/miscellaneous_bindings.cc +++ b/chrome/renderer/extensions/miscellaneous_bindings.cc @@ -73,7 +73,7 @@ const char kReceivingEndDoesntExistError[] = class ExtensionImpl : public extensions::ChromeV8Extension { public: explicit ExtensionImpl(extensions::Dispatcher* dispatcher, - v8::Handle<v8::Context> context) + extensions::ChromeV8Context* context) : extensions::ChromeV8Extension(dispatcher, context) { RouteFunction("CloseChannel", base::Bind(&ExtensionImpl::CloseChannel, base::Unretained(this))); @@ -194,7 +194,7 @@ namespace extensions { ChromeV8Extension* MiscellaneousBindings::Get( Dispatcher* dispatcher, - v8::Handle<v8::Context> context) { + ChromeV8Context* context) { return new ExtensionImpl(dispatcher, context); } diff --git a/chrome/renderer/extensions/miscellaneous_bindings.h b/chrome/renderer/extensions/miscellaneous_bindings.h index 33bb15e..8fb563e 100644 --- a/chrome/renderer/extensions/miscellaneous_bindings.h +++ b/chrome/renderer/extensions/miscellaneous_bindings.h @@ -34,7 +34,7 @@ class MiscellaneousBindings { public: // Creates an instance of the extension. static ChromeV8Extension* Get(Dispatcher* dispatcher, - v8::Handle<v8::Context> context); + ChromeV8Context* context); // Dispatches the Port.onConnect content script messaging event to some // contexts in |contexts|. If |restrict_to_render_view| is specified, only diff --git a/chrome/renderer/extensions/module_system.cc b/chrome/renderer/extensions/module_system.cc index 85050a7..3f46ee1 100644 --- a/chrome/renderer/extensions/module_system.cc +++ b/chrome/renderer/extensions/module_system.cc @@ -69,7 +69,7 @@ void DumpException(const v8::TryCatch& try_catch) { } // namespace -ModuleSystem::ModuleSystem(v8::Handle<v8::Context> context, +ModuleSystem::ModuleSystem(ChromeV8Context* context, SourceMap* source_map) : ObjectBackedNativeHandler(context), source_map_(source_map), @@ -79,7 +79,7 @@ ModuleSystem::ModuleSystem(v8::Handle<v8::Context> context, RouteFunction("requireNative", base::Bind(&ModuleSystem::RequireNative, base::Unretained(this))); - v8::Handle<v8::Object> global(context->Global()); + v8::Handle<v8::Object> global(context->v8_context()->Global()); global->SetHiddenValue(v8::String::New(kModulesField), v8::Object::New()); global->SetHiddenValue(v8::String::New(kModuleSystem), v8::External::New(this)); @@ -97,7 +97,7 @@ void ModuleSystem::Invalidate() { // and we use this as a signal in lazy handlers that we no longer exist. { v8::HandleScope scope; - v8::Handle<v8::Object> global = v8_context()->Global(); + v8::Handle<v8::Object> global = context()->v8_context()->Global(); global->DeleteHiddenValue(v8::String::New(kModulesField)); global->DeleteHiddenValue(v8::String::New(kModuleSystem)); } @@ -144,9 +144,9 @@ v8::Handle<v8::Value> ModuleSystem::RequireForJs(const v8::Arguments& args) { v8::Handle<v8::Value> ModuleSystem::RequireForJsInner( v8::Handle<v8::String> module_name) { v8::HandleScope handle_scope; - v8::Context::Scope context_scope(v8_context()); + v8::Context::Scope context_scope(context()->v8_context()); - v8::Handle<v8::Object> global(v8_context()->Global()); + v8::Handle<v8::Object> global(context()->v8_context()->Global()); // The module system might have been deleted. This can happen if a different // context keeps a reference to us, but our frame is destroyed (e.g. @@ -236,7 +236,7 @@ v8::Local<v8::Value> ModuleSystem::CallModuleMethod( v8::Handle<v8::Function> func = v8::Handle<v8::Function>::Cast(value); - v8::Handle<v8::Object> global(v8_context()->Global()); + v8::Handle<v8::Object> global(context()->v8_context()->Global()); v8::Local<v8::Value> result; { WebKit::WebScopedMicrotaskSuppression suppression; @@ -287,7 +287,7 @@ v8::Handle<v8::Value> ModuleSystem::LazyFieldGetterInner( CHECK(info.Data()->IsObject()); v8::HandleScope handle_scope; v8::Handle<v8::Object> parameters = v8::Handle<v8::Object>::Cast(info.Data()); - // This context should be the same as v8_context(). + // This context should be the same as context()->v8_context(). v8::Handle<v8::Context> context = parameters->CreationContext(); v8::Handle<v8::Object> global(context->Global()); v8::Handle<v8::Value> module_system_value = diff --git a/chrome/renderer/extensions/module_system.h b/chrome/renderer/extensions/module_system.h index a3c9606..53205a0 100644 --- a/chrome/renderer/extensions/module_system.h +++ b/chrome/renderer/extensions/module_system.h @@ -8,6 +8,7 @@ #include "base/compiler_specific.h" #include "base/memory/linked_ptr.h" #include "base/memory/scoped_ptr.h" +#include "chrome/renderer/extensions/native_handler.h" #include "chrome/renderer/extensions/object_backed_native_handler.h" #include "v8/include/v8.h" @@ -61,7 +62,7 @@ class ModuleSystem : public ObjectBackedNativeHandler { }; // |source_map| is a weak pointer. - ModuleSystem(v8::Handle<v8::Context> context, SourceMap* source_map); + ModuleSystem(ChromeV8Context* context, SourceMap* source_map); virtual ~ModuleSystem(); // Require the specified module. This is the equivalent of calling diff --git a/chrome/renderer/extensions/module_system_unittest.cc b/chrome/renderer/extensions/module_system_unittest.cc index 461690b..b46411e 100644 --- a/chrome/renderer/extensions/module_system_unittest.cc +++ b/chrome/renderer/extensions/module_system_unittest.cc @@ -13,7 +13,7 @@ using extensions::ObjectBackedNativeHandler; class CounterNatives : public ObjectBackedNativeHandler { public: - explicit CounterNatives(v8::Handle<v8::Context> context) + explicit CounterNatives(extensions::ChromeV8Context* context) : ObjectBackedNativeHandler(context), counter_(0) { RouteFunction("Get", base::Bind(&CounterNatives::Get, base::Unretained(this))); @@ -175,7 +175,7 @@ TEST_F(ModuleSystemTest, TestLazyFieldIsOnlyEvaledOnce) { ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); module_system_->RegisterNativeHandler( "counter", - scoped_ptr<NativeHandler>(new CounterNatives(v8::Context::GetCurrent()))); + scoped_ptr<NativeHandler>(new CounterNatives(context_.get()))); RegisterModule("lazy", "requireNative('counter').Increment();" "exports.x = 5;"); @@ -229,7 +229,7 @@ TEST_F(ModuleSystemTest, TestModulesOnlyGetEvaledOnce) { ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); module_system_->RegisterNativeHandler( "counter", - scoped_ptr<NativeHandler>(new CounterNatives(v8::Context::GetCurrent()))); + scoped_ptr<NativeHandler>(new CounterNatives(context_.get()))); RegisterModule("incrementsWhenEvaled", "requireNative('counter').Increment();"); diff --git a/chrome/renderer/extensions/object_backed_native_handler.cc b/chrome/renderer/extensions/object_backed_native_handler.cc index bb5f22b..a7eeeaf 100644 --- a/chrome/renderer/extensions/object_backed_native_handler.cc +++ b/chrome/renderer/extensions/object_backed_native_handler.cc @@ -6,6 +6,7 @@ #include "base/logging.h" #include "base/memory/linked_ptr.h" +#include "chrome/renderer/extensions/chrome_v8_context.h" #include "chrome/renderer/extensions/console.h" #include "chrome/renderer/extensions/module_system.h" #include "v8/include/v8.h" @@ -18,8 +19,8 @@ const char* kHandlerFunction = "handler_function"; } // namespace ObjectBackedNativeHandler::ObjectBackedNativeHandler( - v8::Handle<v8::Context> context) - : v8_context_(context), + ChromeV8Context* context) + : context_(context), object_template_(v8::ObjectTemplate::New()) { } @@ -55,9 +56,10 @@ void ObjectBackedNativeHandler::RouteFunction( const std::string& name, const HandlerFunction& handler_function) { v8::HandleScope handle_scope; - v8::Context::Scope context_scope(v8_context_.get()); + v8::Context::Scope context_scope(context_->v8_context()); - v8::Persistent<v8::Object> data(v8_context_->GetIsolate(), v8::Object::New()); + v8::Persistent<v8::Object> data(context_->v8_context()->GetIsolate(), + v8::Object::New()); data->Set(v8::String::New(kHandlerFunction), v8::External::New(new HandlerFunction(handler_function))); router_data_.push_back(data); @@ -70,7 +72,7 @@ void ObjectBackedNativeHandler::Invalidate() { if (!is_valid()) return; v8::HandleScope handle_scope; - v8::Context::Scope context_scope(v8_context_.get()); + v8::Context::Scope context_scope(context_->v8_context()); for (RouterData::iterator it = router_data_.begin(); it != router_data_.end(); ++it) { @@ -81,10 +83,10 @@ void ObjectBackedNativeHandler::Invalidate() { delete static_cast<HandlerFunction*>( handler_function_value.As<v8::External>()->Value()); data->Delete(v8::String::New(kHandlerFunction)); - data.Dispose(v8_context_->GetIsolate()); + data.Dispose(context_->v8_context()->GetIsolate()); } object_template_.reset(); - v8_context_.reset(); + context_ = NULL; NativeHandler::Invalidate(); } diff --git a/chrome/renderer/extensions/object_backed_native_handler.h b/chrome/renderer/extensions/object_backed_native_handler.h index 0439adf..78e893d 100644 --- a/chrome/renderer/extensions/object_backed_native_handler.h +++ b/chrome/renderer/extensions/object_backed_native_handler.h @@ -15,13 +15,14 @@ #include "v8/include/v8.h" namespace extensions { +class ChromeV8Context; // An ObjectBackedNativeHandler is a factory for JS objects with functions on // them that map to native C++ functions. Subclasses should call RouteFunction() // in their constructor to define functions on the created JS objects. class ObjectBackedNativeHandler : public NativeHandler { public: - explicit ObjectBackedNativeHandler(v8::Handle<v8::Context> context); + explicit ObjectBackedNativeHandler(ChromeV8Context* context); virtual ~ObjectBackedNativeHandler(); // Create an object with bindings to the native functions defined through @@ -38,7 +39,7 @@ class ObjectBackedNativeHandler : public NativeHandler { void RouteFunction(const std::string& name, const HandlerFunction& handler_function); - v8::Handle<v8::Context> v8_context() { return v8_context_.get(); } + ChromeV8Context* context() { return context_; } virtual void Invalidate() OVERRIDE; @@ -63,9 +64,7 @@ class ObjectBackedNativeHandler : public NativeHandler { typedef std::vector<v8::Persistent<v8::Object> > RouterData; RouterData router_data_; - // TODO(kalman): Just pass around a ChromeV8Context. It already has a - // persistent handle to this context. - ScopedPersistent<v8::Context> v8_context_; + ChromeV8Context* context_; ScopedPersistent<v8::ObjectTemplate> object_template_; diff --git a/chrome/renderer/extensions/page_actions_custom_bindings.cc b/chrome/renderer/extensions/page_actions_custom_bindings.cc index 4c88f11..8326072 100644 --- a/chrome/renderer/extensions/page_actions_custom_bindings.cc +++ b/chrome/renderer/extensions/page_actions_custom_bindings.cc @@ -16,8 +16,8 @@ namespace extensions { PageActionsCustomBindings::PageActionsCustomBindings( - Dispatcher* dispatcher, v8::Handle<v8::Context> v8_context) - : ChromeV8Extension(dispatcher, v8_context) { + Dispatcher* dispatcher, ChromeV8Context* context) + : ChromeV8Extension(dispatcher, context) { RouteFunction("GetCurrentPageActions", base::Bind(&PageActionsCustomBindings::GetCurrentPageActions, base::Unretained(this))); diff --git a/chrome/renderer/extensions/page_actions_custom_bindings.h b/chrome/renderer/extensions/page_actions_custom_bindings.h index d0c105d..b8e8018 100644 --- a/chrome/renderer/extensions/page_actions_custom_bindings.h +++ b/chrome/renderer/extensions/page_actions_custom_bindings.h @@ -14,7 +14,7 @@ class Dispatcher; class PageActionsCustomBindings : public ChromeV8Extension { public: PageActionsCustomBindings(Dispatcher* extension_dispatcher, - v8::Handle<v8::Context> v8_context); + ChromeV8Context* context); private: v8::Handle<v8::Value> GetCurrentPageActions(const v8::Arguments& args); diff --git a/chrome/renderer/extensions/page_capture_custom_bindings.cc b/chrome/renderer/extensions/page_capture_custom_bindings.cc index c6ad3ba..fd1950e 100644 --- a/chrome/renderer/extensions/page_capture_custom_bindings.cc +++ b/chrome/renderer/extensions/page_capture_custom_bindings.cc @@ -16,7 +16,7 @@ namespace extensions { PageCaptureCustomBindings::PageCaptureCustomBindings( Dispatcher* dispatcher, - v8::Handle<v8::Context> context) + ChromeV8Context* context) : ChromeV8Extension(dispatcher, context) { RouteFunction("CreateBlob", base::Bind(&PageCaptureCustomBindings::CreateBlob, diff --git a/chrome/renderer/extensions/page_capture_custom_bindings.h b/chrome/renderer/extensions/page_capture_custom_bindings.h index a2faa61..60cb19c 100644 --- a/chrome/renderer/extensions/page_capture_custom_bindings.h +++ b/chrome/renderer/extensions/page_capture_custom_bindings.h @@ -13,7 +13,7 @@ namespace extensions { class PageCaptureCustomBindings : public ChromeV8Extension { public: PageCaptureCustomBindings(Dispatcher* dispatcher, - v8::Handle<v8::Context> context); + ChromeV8Context* context); private: // Creates a Blob with the content of the specified file. diff --git a/chrome/renderer/extensions/runtime_custom_bindings.cc b/chrome/renderer/extensions/runtime_custom_bindings.cc index b41f43c..0f4801f 100644 --- a/chrome/renderer/extensions/runtime_custom_bindings.cc +++ b/chrome/renderer/extensions/runtime_custom_bindings.cc @@ -24,8 +24,7 @@ namespace extensions { RuntimeCustomBindings::RuntimeCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context) - : ChromeV8Extension(dispatcher, context->v8_context()), - context_(context) { + : ChromeV8Extension(dispatcher, context) { RouteFunction("GetManifest", base::Bind(&RuntimeCustomBindings::GetManifest, base::Unretained(this))); @@ -68,7 +67,7 @@ v8::Handle<v8::Value> RuntimeCustomBindings::OpenChannelToNativeApp( const v8::Arguments& args) { // Verify that the extension has permission to use native messaging. if (!dispatcher()->CheckContextAccessToExtensionAPI( - "nativeMessaging", context_)) { + "nativeMessaging", context())) { return v8::Undefined(); } @@ -97,11 +96,11 @@ v8::Handle<v8::Value> RuntimeCustomBindings::OpenChannelToNativeApp( v8::Handle<v8::Value> RuntimeCustomBindings::GetManifest( const v8::Arguments& args) { - CHECK(context_->extension()); + CHECK(context()->extension()); scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create()); - return converter->ToV8Value(context_->extension()->manifest()->value(), - context_->v8_context()); + return converter->ToV8Value(context()->extension()->manifest()->value(), + context()->v8_context()); } } // extensions diff --git a/chrome/renderer/extensions/runtime_custom_bindings.h b/chrome/renderer/extensions/runtime_custom_bindings.h index d800713..b7de030 100644 --- a/chrome/renderer/extensions/runtime_custom_bindings.h +++ b/chrome/renderer/extensions/runtime_custom_bindings.h @@ -29,8 +29,6 @@ class RuntimeCustomBindings : public ChromeV8Extension { private: v8::Handle<v8::Value> GetManifest(const v8::Arguments& args); - - ChromeV8Context* context_; }; } // extensions diff --git a/chrome/renderer/extensions/send_request_natives.cc b/chrome/renderer/extensions/send_request_natives.cc index 6af9985..2ea83a0 100644 --- a/chrome/renderer/extensions/send_request_natives.cc +++ b/chrome/renderer/extensions/send_request_natives.cc @@ -15,9 +15,8 @@ namespace extensions { SendRequestNatives::SendRequestNatives(Dispatcher* dispatcher, RequestSender* request_sender, ChromeV8Context* context) - : ChromeV8Extension(dispatcher, context->v8_context()), - request_sender_(request_sender), - context_(context) { + : ChromeV8Extension(dispatcher, context), + request_sender_(request_sender) { RouteFunction("GetNextRequestId", base::Bind(&SendRequestNatives::GetNextRequestId, base::Unretained(this))); @@ -53,14 +52,15 @@ v8::Handle<v8::Value> SendRequestNatives::StartRequest( if (!preserve_null_in_objects) converter->SetStripNullFromObjects(true); - scoped_ptr<Value> value_args(converter->FromV8Value(args[1], v8_context())); + scoped_ptr<Value> value_args( + converter->FromV8Value(args[1], context()->v8_context())); if (!value_args.get() || !value_args->IsType(Value::TYPE_LIST)) { NOTREACHED() << "Unable to convert args passed to StartRequest"; return v8::Undefined(); } request_sender_->StartRequest( - context_, name, request_id, has_callback, for_io_thread, + context(), name, request_id, has_callback, for_io_thread, static_cast<ListValue*>(value_args.get())); return v8::Undefined(); } diff --git a/chrome/renderer/extensions/send_request_natives.h b/chrome/renderer/extensions/send_request_natives.h index 1e3437a..54bc78f 100644 --- a/chrome/renderer/extensions/send_request_natives.h +++ b/chrome/renderer/extensions/send_request_natives.h @@ -34,8 +34,6 @@ class SendRequestNatives : public ChromeV8Extension { RequestSender* request_sender_; - ChromeV8Context* context_; - DISALLOW_COPY_AND_ASSIGN(SendRequestNatives); }; diff --git a/chrome/renderer/extensions/set_icon_natives.cc b/chrome/renderer/extensions/set_icon_natives.cc index 084c5a8..614bbb2 100644 --- a/chrome/renderer/extensions/set_icon_natives.cc +++ b/chrome/renderer/extensions/set_icon_natives.cc @@ -26,9 +26,8 @@ namespace extensions { SetIconNatives::SetIconNatives(Dispatcher* dispatcher, RequestSender* request_sender, ChromeV8Context* context) - : ChromeV8Extension(dispatcher, context->v8_context()), - request_sender_(request_sender), - context_(context) { + : ChromeV8Extension(dispatcher, context), + request_sender_(request_sender) { RouteFunction( "SetIconCommon", base::Bind(&SetIconNatives::SetIconCommon, base::Unretained(this))); @@ -138,7 +137,7 @@ v8::Handle<v8::Value> SetIconNatives::SetIconCommon( bool has_callback = args[3]->BooleanValue(); bool for_io_thread = args[4]->BooleanValue(); - request_sender_->StartRequest(context_, + request_sender_->StartRequest(context(), name, request_id, has_callback, diff --git a/chrome/renderer/extensions/set_icon_natives.h b/chrome/renderer/extensions/set_icon_natives.h index 7e0352a..6e3c6d1 100644 --- a/chrome/renderer/extensions/set_icon_natives.h +++ b/chrome/renderer/extensions/set_icon_natives.h @@ -33,8 +33,6 @@ class SetIconNatives : public ChromeV8Extension { RequestSender* request_sender_; - ChromeV8Context* context_; - DISALLOW_COPY_AND_ASSIGN(SetIconNatives); }; diff --git a/chrome/renderer/extensions/sync_file_system_custom_bindings.cc b/chrome/renderer/extensions/sync_file_system_custom_bindings.cc index da273df..90d860b 100644 --- a/chrome/renderer/extensions/sync_file_system_custom_bindings.cc +++ b/chrome/renderer/extensions/sync_file_system_custom_bindings.cc @@ -7,6 +7,7 @@ #include <string> #include "chrome/common/extensions/extension_constants.h" +#include "chrome/renderer/extensions/chrome_v8_context.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" #include "v8/include/v8.h" #include "webkit/common/fileapi/file_system_util.h" @@ -14,8 +15,8 @@ namespace extensions { SyncFileSystemCustomBindings::SyncFileSystemCustomBindings( - Dispatcher* dispatcher, v8::Handle<v8::Context> v8_context) - : ChromeV8Extension(dispatcher, v8_context) { + Dispatcher* dispatcher, ChromeV8Context* context) + : ChromeV8Extension(dispatcher, context) { RouteFunction( "GetSyncFileSystemObject", base::Bind(&SyncFileSystemCustomBindings::GetSyncFileSystemObject, @@ -49,7 +50,7 @@ v8::Handle<v8::Value> SyncFileSystemCustomBindings::GetSyncFileSystemObject( } WebKit::WebFrame* webframe = - WebKit::WebFrame::frameForContext(v8_context()); + WebKit::WebFrame::frameForContext(context()->v8_context()); return webframe->createFileSystem( WebKit::WebFileSystemTypeExternal, WebKit::WebString::fromUTF8(name), diff --git a/chrome/renderer/extensions/sync_file_system_custom_bindings.h b/chrome/renderer/extensions/sync_file_system_custom_bindings.h index c5820c7..524f669 100644 --- a/chrome/renderer/extensions/sync_file_system_custom_bindings.h +++ b/chrome/renderer/extensions/sync_file_system_custom_bindings.h @@ -14,7 +14,7 @@ namespace extensions { class SyncFileSystemCustomBindings : public ChromeV8Extension { public: SyncFileSystemCustomBindings(Dispatcher* dispatcher, - v8::Handle<v8::Context> v8_context); + ChromeV8Context* context); private: // FileSystemObject GetSyncFileSystemObject(string name, string root_url): diff --git a/chrome/renderer/extensions/tabs_custom_bindings.cc b/chrome/renderer/extensions/tabs_custom_bindings.cc index 1d2bbad..7164e6b 100644 --- a/chrome/renderer/extensions/tabs_custom_bindings.cc +++ b/chrome/renderer/extensions/tabs_custom_bindings.cc @@ -15,7 +15,7 @@ namespace extensions { TabsCustomBindings::TabsCustomBindings(Dispatcher* dispatcher, - v8::Handle<v8::Context> context) + ChromeV8Context* context) : ChromeV8Extension(dispatcher, context) { RouteFunction("OpenChannelToTab", base::Bind(&TabsCustomBindings::OpenChannelToTab, diff --git a/chrome/renderer/extensions/tabs_custom_bindings.h b/chrome/renderer/extensions/tabs_custom_bindings.h index 0eec4ea..9b501e7 100644 --- a/chrome/renderer/extensions/tabs_custom_bindings.h +++ b/chrome/renderer/extensions/tabs_custom_bindings.h @@ -12,7 +12,7 @@ namespace extensions { // Implements custom bindings for the tabs API. class TabsCustomBindings : public ChromeV8Extension { public: - TabsCustomBindings(Dispatcher* dispatcher, v8::Handle<v8::Context> context); + TabsCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context); private: // Creates a new messaging channel to the tab with the given ID. diff --git a/chrome/renderer/extensions/tts_custom_bindings.cc b/chrome/renderer/extensions/tts_custom_bindings.cc index c2a0e9a..a2d0dca 100644 --- a/chrome/renderer/extensions/tts_custom_bindings.cc +++ b/chrome/renderer/extensions/tts_custom_bindings.cc @@ -13,8 +13,8 @@ namespace extensions { TTSCustomBindings::TTSCustomBindings( - Dispatcher* dispatcher, v8::Handle<v8::Context> v8_context) - : ChromeV8Extension(dispatcher, v8_context) { + Dispatcher* dispatcher, ChromeV8Context* context) + : ChromeV8Extension(dispatcher, context) { RouteFunction("GetNextTTSEventId", base::Bind(&TTSCustomBindings::GetNextTTSEventId, base::Unretained(this))); diff --git a/chrome/renderer/extensions/tts_custom_bindings.h b/chrome/renderer/extensions/tts_custom_bindings.h index c060431..e3a49a6 100644 --- a/chrome/renderer/extensions/tts_custom_bindings.h +++ b/chrome/renderer/extensions/tts_custom_bindings.h @@ -12,7 +12,7 @@ namespace extensions { // Implements custom bindings for the tts API. class TTSCustomBindings : public ChromeV8Extension { public: - TTSCustomBindings(Dispatcher* dispatcher, v8::Handle<v8::Context> v8_context); + TTSCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context); private: v8::Handle<v8::Value> GetNextTTSEventId(const v8::Arguments& args); diff --git a/chrome/renderer/extensions/web_request_custom_bindings.cc b/chrome/renderer/extensions/web_request_custom_bindings.cc index 768733e..be606ea 100644 --- a/chrome/renderer/extensions/web_request_custom_bindings.cc +++ b/chrome/renderer/extensions/web_request_custom_bindings.cc @@ -14,8 +14,8 @@ namespace extensions { WebRequestCustomBindings::WebRequestCustomBindings( - Dispatcher* dispatcher, v8::Handle<v8::Context> v8_context) - : ChromeV8Extension(dispatcher, v8_context) { + Dispatcher* dispatcher, ChromeV8Context* context) + : ChromeV8Extension(dispatcher, context) { RouteFunction("GetUniqueSubEventName", base::Bind(&WebRequestCustomBindings::GetUniqueSubEventName, base::Unretained(this))); @@ -34,4 +34,3 @@ v8::Handle<v8::Value> WebRequestCustomBindings::GetUniqueSubEventName( } } // extensions - diff --git a/chrome/renderer/extensions/web_request_custom_bindings.h b/chrome/renderer/extensions/web_request_custom_bindings.h index 596a3ff..fddd624 100644 --- a/chrome/renderer/extensions/web_request_custom_bindings.h +++ b/chrome/renderer/extensions/web_request_custom_bindings.h @@ -12,8 +12,7 @@ namespace extensions { // Implements custom bindings for the webRequest API. class WebRequestCustomBindings : public ChromeV8Extension { public: - WebRequestCustomBindings(Dispatcher* dispatcher, - v8::Handle<v8::Context> v8_context); + WebRequestCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context); private: v8::Handle<v8::Value> GetUniqueSubEventName(const v8::Arguments& args); diff --git a/chrome/renderer/extensions/webstore_bindings.cc b/chrome/renderer/extensions/webstore_bindings.cc index 275c04e..6dd18f1 100644 --- a/chrome/renderer/extensions/webstore_bindings.cc +++ b/chrome/renderer/extensions/webstore_bindings.cc @@ -55,7 +55,7 @@ int g_next_install_id = 0; WebstoreBindings::WebstoreBindings(Dispatcher* dispatcher, ChromeV8Context* context) - : ChromeV8Extension(dispatcher, context->v8_context()), + : ChromeV8Extension(dispatcher, context), ChromeV8ExtensionHandler(context) { RouteFunction("Install", base::Bind(&WebstoreBindings::Install, base::Unretained(this))); @@ -63,7 +63,7 @@ WebstoreBindings::WebstoreBindings(Dispatcher* dispatcher, v8::Handle<v8::Value> WebstoreBindings::Install( const v8::Arguments& args) { - WebFrame* frame = WebFrame::frameForContext(v8_context()); + WebFrame* frame = WebFrame::frameForContext(context()->v8_context()); if (!frame || !frame->view()) return v8::Undefined(); @@ -212,12 +212,12 @@ void WebstoreBindings::OnInlineWebstoreInstallResponse( bool success, const std::string& error) { v8::HandleScope handle_scope; - v8::Context::Scope context_scope(context_->v8_context()); + v8::Context::Scope context_scope(context()->v8_context()); v8::Handle<v8::Value> argv[3]; argv[0] = v8::Integer::New(install_id); argv[1] = v8::Boolean::New(success); argv[2] = v8::String::New(error.c_str()); - context_->CallChromeHiddenMethod("webstore.onInstallResponse", + context()->CallChromeHiddenMethod("webstore.onInstallResponse", arraysize(argv), argv, NULL); } diff --git a/chrome/test/base/module_system_test.cc b/chrome/test/base/module_system_test.cc index 5602426..5382fed 100644 --- a/chrome/test/base/module_system_test.cc +++ b/chrome/test/base/module_system_test.cc @@ -20,7 +20,7 @@ using extensions::ObjectBackedNativeHandler; // Native JS functions for doing asserts. class AssertNatives : public ObjectBackedNativeHandler { public: - explicit AssertNatives(v8::Handle<v8::Context> context) + explicit AssertNatives(extensions::ChromeV8Context* context) : ObjectBackedNativeHandler(context), assertion_made_(false), failed_(false) { @@ -87,10 +87,15 @@ class FailsOnException : public ModuleSystem::ExceptionHandler { ModuleSystemTest::ModuleSystemTest() : isolate_(v8::Isolate::GetCurrent()), handle_scope_(isolate_), - context_(v8::Context::New(isolate_)), + context_( + new extensions::ChromeV8Context( + v8::Context::New(isolate_), + reinterpret_cast<WebKit::WebFrame*>(1), + NULL, + extensions::Feature::UNSPECIFIED_CONTEXT)), source_map_(new StringSourceMap()), should_assertions_be_made_(true) { - context_->Enter(); + context_->v8_context()->Enter(); assert_natives_ = new AssertNatives(context_.get()); module_system_.reset(new ModuleSystem(context_.get(), source_map_.get())); module_system_->RegisterNativeHandler("assert", scoped_ptr<NativeHandler>( @@ -101,7 +106,7 @@ ModuleSystemTest::ModuleSystemTest() ModuleSystemTest::~ModuleSystemTest() { module_system_.reset(); - context_->Exit(); + context_->v8_context()->Exit(); } void ModuleSystemTest::RegisterModule(const std::string& name, diff --git a/chrome/test/base/module_system_test.h b/chrome/test/base/module_system_test.h index ce3f654..3f2fcb3 100644 --- a/chrome/test/base/module_system_test.h +++ b/chrome/test/base/module_system_test.h @@ -5,6 +5,7 @@ #ifndef CHROME_TEST_BASE_MODULE_SYSTEM_TEST_H_ #define CHROME_TEST_BASE_MODULE_SYSTEM_TEST_H_ +#include "chrome/renderer/extensions/chrome_v8_context.h" #include "chrome/renderer/extensions/module_system.h" #include "chrome/renderer/extensions/scoped_persistent.h" #include "v8/include/v8.h" @@ -53,7 +54,7 @@ class ModuleSystemTest : public testing::Test { v8::Isolate* isolate_; v8::HandleScope handle_scope_; - extensions::ScopedPersistent<v8::Context> context_; + scoped_ptr<extensions::ChromeV8Context> context_; AssertNatives* assert_natives_; scoped_ptr<StringSourceMap> source_map_; scoped_ptr<extensions::ModuleSystem> module_system_; |