Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index 6c4573fb75aecf16a14461ae0f5f84b162823718..b70206ba961168936d15852c22f4825424fdca15 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -88,6 +88,7 @@ |
#include "content/renderer/plugin_channel_host.h" |
#include "content/renderer/render_process.h" |
#include "content/renderer/render_thread_impl.h" |
+#include "content/renderer/render_view_impl_params.h" |
#include "content/renderer/render_view_mouse_lock_dispatcher.h" |
#include "content/renderer/render_widget_fullscreen_pepper.h" |
#include "content/renderer/renderer_accessibility.h" |
@@ -359,6 +360,9 @@ static const float kScalingIncrementForGesture = 0.01f; |
static const size_t kContentIntentDelayMilliseconds = 700; |
#endif |
+static RenderViewImpl* (*g_create_render_view_impl)(RenderViewImplParams*) = |
+ NULL; |
+ |
static RenderViewImpl* FromRoutingID(int32 routing_id) { |
return static_cast<RenderViewImpl*>( |
ChildThread::current()->ResolveRoute(routing_id)); |
@@ -536,22 +540,11 @@ int64 ExtractPostId(const WebHistoryItem& item) { |
} // namespace |
-RenderViewImpl::RenderViewImpl( |
- int32 opener_id, |
- const RendererPreferences& renderer_prefs, |
- const WebPreferences& webkit_prefs, |
- SharedRenderViewCounter* counter, |
- int32 routing_id, |
- int32 surface_id, |
- int64 session_storage_namespace_id, |
- const string16& frame_name, |
- bool is_renderer_created, |
- bool swapped_out, |
- int32 next_page_id, |
- const WebKit::WebScreenInfo& screen_info, |
- AccessibilityMode accessibility_mode) |
- : RenderWidget(WebKit::WebPopupTypeNone, screen_info, swapped_out), |
- webkit_preferences_(webkit_prefs), |
+RenderViewImpl::RenderViewImpl(RenderViewImplParams* params) |
+ : RenderWidget(WebKit::WebPopupTypeNone, |
+ params->screen_info, |
+ params->swapped_out), |
+ webkit_preferences_(params->webkit_prefs), |
send_content_state_immediately_(false), |
enabled_bindings_(0), |
send_preferred_size_changes_(false), |
@@ -561,7 +554,7 @@ RenderViewImpl::RenderViewImpl( |
opener_suppressed_(false), |
page_id_(-1), |
last_page_id_sent_to_browser_(-1), |
- next_page_id_(next_page_id), |
+ next_page_id_(params->next_page_id), |
history_list_offset_(-1), |
history_list_length_(0), |
target_url_status_(TARGET_NONE), |
@@ -591,7 +584,7 @@ RenderViewImpl::RenderViewImpl( |
ALLOW_THIS_IN_INITIALIZER_LIST( |
load_progress_tracker_(new LoadProgressTracker(this))), |
#endif |
- session_storage_namespace_id_(session_storage_namespace_id), |
+ session_storage_namespace_id_(params->session_storage_namespace_id), |
handling_select_range_(false), |
#if defined(OS_WIN) |
focused_plugin_id_(-1), |
@@ -601,11 +594,11 @@ RenderViewImpl::RenderViewImpl( |
target_process_id_(0), |
target_routing_id_(0), |
ALLOW_THIS_IN_INITIALIZER_LIST(pepper_delegate_(this)) { |
- set_throttle_input_events(renderer_prefs.throttle_input_events); |
- routing_id_ = routing_id; |
- surface_id_ = surface_id; |
- if (opener_id != MSG_ROUTING_NONE && is_renderer_created) |
- opener_id_ = opener_id; |
+ set_throttle_input_events(params->renderer_prefs.throttle_input_events); |
+ routing_id_ = params->routing_id; |
+ surface_id_ = params->surface_id; |
+ if (params->opener_id != MSG_ROUTING_NONE && params->is_renderer_created) |
+ opener_id_ = params->opener_id; |
// Ensure we start with a valid next_page_id_ from the browser. |
DCHECK_GE(next_page_id_, 0); |
@@ -638,10 +631,10 @@ RenderViewImpl::RenderViewImpl( |
new EmailDetector())); |
#endif |
- if (counter) { |
- shared_popup_counter_ = counter; |
+ if (params->counter) { |
+ shared_popup_counter_ = params->counter; |
// Only count this if it isn't swapped out upon creation. |
- if (!swapped_out) |
+ if (!params->swapped_out) |
shared_popup_counter_->data++; |
decrement_shared_popup_at_destruction_ = true; |
} else { |
@@ -665,13 +658,13 @@ RenderViewImpl::RenderViewImpl( |
webview()->setDeviceScaleFactor(device_scale_factor_); |
webkit_preferences_.Apply(webview()); |
webview()->initializeMainFrame(this); |
- if (!frame_name.empty()) |
- webview()->mainFrame()->setName(frame_name); |
+ if (!params->frame_name.empty()) |
+ webview()->mainFrame()->setName(params->frame_name); |
webview()->settings()->setMinimumTimerInterval( |
is_hidden() ? webkit_glue::kBackgroundTabTimerInterval : |
webkit_glue::kForegroundTabTimerInterval); |
- OnSetRendererPrefs(renderer_prefs); |
+ OnSetRendererPrefs(params->renderer_prefs); |
#if defined(ENABLE_WEBRTC) |
if (!media_stream_dispatcher_) |
@@ -695,7 +688,7 @@ RenderViewImpl::RenderViewImpl( |
intents_host_ = new WebIntentsHost(this); |
// Create renderer_accessibility_ if needed. |
- OnSetAccessibilityMode(accessibility_mode); |
+ OnSetAccessibilityMode(params->accessibility_mode); |
new IdleUserDetector(this); |
@@ -708,8 +701,8 @@ RenderViewImpl::RenderViewImpl( |
// If we have an opener_id but we weren't created by a renderer, then |
// it's the browser asking us to set our opener to another RenderView. |
- if (opener_id != MSG_ROUTING_NONE && !is_renderer_created) { |
- RenderViewImpl* opener_view = FromRoutingID(opener_id); |
+ if (params->opener_id != MSG_ROUTING_NONE && !params->is_renderer_created) { |
+ RenderViewImpl* opener_view = FromRoutingID(params->opener_id); |
if (opener_view) |
webview()->mainFrame()->setOpener(opener_view->webview()->mainFrame()); |
} |
@@ -793,7 +786,7 @@ RenderViewImpl* RenderViewImpl::Create( |
const WebKit::WebScreenInfo& screen_info, |
AccessibilityMode accessibility_mode) { |
DCHECK(routing_id != MSG_ROUTING_NONE); |
- return new RenderViewImpl( |
+ RenderViewImplParams params( |
opener_id, |
renderer_prefs, |
webkit_prefs, |
@@ -807,6 +800,16 @@ RenderViewImpl* RenderViewImpl::Create( |
next_page_id, |
screen_info, |
accessibility_mode); |
+ if (g_create_render_view_impl) |
+ return g_create_render_view_impl(¶ms); |
+ return new RenderViewImpl(¶ms); |
+} |
+ |
+// static |
+void RenderViewImpl::InstallCreateHook( |
+ RenderViewImpl* (*create_render_view_impl)(RenderViewImplParams*)) { |
+ CHECK(!g_create_render_view_impl); |
+ g_create_render_view_impl = create_render_view_impl; |
} |
void RenderViewImpl::AddObserver(RenderViewObserver* observer) { |