summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/renderer/render_view.cc40
-rw-r--r--chrome/renderer/render_view.h12
2 files changed, 33 insertions, 19 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 1b5d9e3..95da382 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -45,16 +45,19 @@
#include "chrome/renderer/about_handler.h"
#include "chrome/renderer/audio_message_filter.h"
#include "chrome/renderer/autofill_helper.h"
+#include "chrome/renderer/automation/dom_automation_controller.h"
#include "chrome/renderer/blocked_plugin.h"
#include "chrome/renderer/device_orientation_dispatcher.h"
#include "chrome/renderer/devtools_agent.h"
#include "chrome/renderer/devtools_client.h"
+#include "chrome/renderer/dom_ui_bindings.h"
#include "chrome/renderer/extension_groups.h"
#include "chrome/renderer/extensions/bindings_utils.h"
#include "chrome/renderer/extensions/extension_renderer_info.h"
#include "chrome/renderer/extensions/event_bindings.h"
#include "chrome/renderer/extensions/extension_process_bindings.h"
#include "chrome/renderer/extensions/renderer_extension_bindings.h"
+#include "chrome/renderer/external_host_bindings.h"
#include "chrome/renderer/geolocation_dispatcher.h"
#include "chrome/renderer/localized_error.h"
#include "chrome/renderer/media/audio_renderer_impl.h"
@@ -1575,10 +1578,13 @@ void RenderView::LoadNavigationErrorPage(WebFrame* frame,
}
void RenderView::BindDOMAutomationController(WebFrame* frame) {
- dom_automation_controller_.set_message_sender(this);
- dom_automation_controller_.set_routing_id(routing_id_);
- dom_automation_controller_.BindToJavascript(frame,
- L"domAutomationController");
+ if (!dom_automation_controller_.get()) {
+ dom_automation_controller_.reset(new DomAutomationController());
+ }
+ dom_automation_controller_->set_message_sender(this);
+ dom_automation_controller_->set_routing_id(routing_id_);
+ dom_automation_controller_->BindToJavascript(frame,
+ L"domAutomationController");
}
bool RenderView::RunJavaScriptMessage(int type,
@@ -3075,14 +3081,20 @@ void RenderView::didClearWindowObject(WebFrame* frame) {
if (BindingsPolicy::is_dom_automation_enabled(enabled_bindings_))
BindDOMAutomationController(frame);
if (BindingsPolicy::is_dom_ui_enabled(enabled_bindings_)) {
- dom_ui_bindings_.set_message_sender(this);
- dom_ui_bindings_.set_routing_id(routing_id_);
- dom_ui_bindings_.BindToJavascript(frame, L"chrome");
+ if (!dom_ui_bindings_.get()) {
+ dom_ui_bindings_.reset(new DOMUIBindings());
+ }
+ dom_ui_bindings_->set_message_sender(this);
+ dom_ui_bindings_->set_routing_id(routing_id_);
+ dom_ui_bindings_->BindToJavascript(frame, L"chrome");
}
if (BindingsPolicy::is_external_host_enabled(enabled_bindings_)) {
- external_host_bindings_.set_message_sender(this);
- external_host_bindings_.set_routing_id(routing_id_);
- external_host_bindings_.BindToJavascript(frame, L"externalHost");
+ if (!external_host_bindings_.get()) {
+ external_host_bindings_.reset(new ExternalHostBindings());
+ }
+ external_host_bindings_->set_message_sender(this);
+ external_host_bindings_->set_routing_id(routing_id_);
+ external_host_bindings_->BindToJavascript(frame, L"externalHost");
}
}
@@ -4185,7 +4197,8 @@ void RenderView::OnAllowBindings(int enabled_bindings_flags) {
void RenderView::OnSetDOMUIProperty(const std::string& name,
const std::string& value) {
DCHECK(BindingsPolicy::is_dom_ui_enabled(enabled_bindings_));
- dom_ui_bindings_.SetProperty(name, value);
+ DCHECK(dom_ui_bindings_.get());
+ dom_ui_bindings_->SetProperty(name, value);
}
void RenderView::OnReservePageIDRange(int size_of_range) {
@@ -4541,8 +4554,9 @@ void RenderView::OnHandleMessageFromExternalHost(const std::string& message,
const std::string& target) {
if (message.empty())
return;
- external_host_bindings_.ForwardMessageFromExternalHost(message, origin,
- target);
+ DCHECK(external_host_bindings_.get());
+ external_host_bindings_->ForwardMessageFromExternalHost(message, origin,
+ target);
}
void RenderView::OnDisassociateFromPopupCount() {
diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h
index 9299621..7b552d7 100644
--- a/chrome/renderer/render_view.h
+++ b/chrome/renderer/render_view.h
@@ -28,9 +28,6 @@
#include "chrome/common/render_messages.h"
#include "chrome/common/renderer_preferences.h"
#include "chrome/common/view_types.h"
-#include "chrome/renderer/automation/dom_automation_controller.h"
-#include "chrome/renderer/dom_ui_bindings.h"
-#include "chrome/renderer/external_host_bindings.h"
#include "chrome/renderer/pepper_plugin_delegate_impl.h"
#include "chrome/renderer/render_widget.h"
#include "chrome/renderer/renderer_webcookiejar_impl.h"
@@ -59,6 +56,9 @@ class DictionaryValue;
class DeviceOrientationDispatcher;
class DevToolsAgent;
class DevToolsClient;
+class DomAutomationController;
+class DOMUIBindings;
+class ExternalHostBindings;
class FilePath;
class GeolocationDispatcher;
class GURL;
@@ -1328,14 +1328,14 @@ class RenderView : public RenderWidget,
// Allows JS to access DOM automation. The JS object is only exposed when the
// DOM automation bindings are enabled.
- DomAutomationController dom_automation_controller_;
+ scoped_ptr<DomAutomationController> dom_automation_controller_;
// Allows DOM UI pages (new tab page, etc.) to talk to the browser. The JS
// object is only exposed when DOM UI bindings are enabled.
- DOMUIBindings dom_ui_bindings_;
+ scoped_ptr<DOMUIBindings> dom_ui_bindings_;
// External host exposed through automation controller.
- ExternalHostBindings external_host_bindings_;
+ scoped_ptr<ExternalHostBindings> external_host_bindings_;
// Pending openFileSystem completion objects.
struct PendingOpenFileSystem;