| Index: content/renderer/render_view_impl.cc
|
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
|
| index a3c5cf06cdfb593c863ad1e65c982822e8a2a58d..2dd5d83d2a8a8fa6c38f512444c9507e17a46f3c 100644
|
| --- a/content/renderer/render_view_impl.cc
|
| +++ b/content/renderer/render_view_impl.cc
|
| @@ -359,6 +359,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,7 +539,7 @@ int64 ExtractPostId(const WebHistoryItem& item) {
|
|
|
| } // namespace
|
|
|
| -RenderViewImpl::RenderViewImpl(
|
| +RenderViewImplParams::RenderViewImplParams(
|
| int32 opener_id,
|
| const RendererPreferences& renderer_prefs,
|
| const WebPreferences& webkit_prefs,
|
| @@ -550,8 +553,28 @@ RenderViewImpl::RenderViewImpl(
|
| int32 next_page_id,
|
| const WebKit::WebScreenInfo& screen_info,
|
| AccessibilityMode accessibility_mode)
|
| - : RenderWidget(WebKit::WebPopupTypeNone, screen_info, swapped_out),
|
| - webkit_preferences_(webkit_prefs),
|
| + : opener_id(opener_id),
|
| + renderer_prefs(renderer_prefs),
|
| + webkit_prefs(webkit_prefs),
|
| + counter(counter),
|
| + routing_id(routing_id),
|
| + surface_id(surface_id),
|
| + session_storage_namespace_id(session_storage_namespace_id),
|
| + frame_name(frame_name),
|
| + is_renderer_created(is_renderer_created),
|
| + swapped_out(swapped_out),
|
| + next_page_id(next_page_id),
|
| + screen_info(screen_info),
|
| + accessibility_mode(accessibility_mode) {
|
| +}
|
| +
|
| +RenderViewImplParams::~RenderViewImplParams() {}
|
| +
|
| +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 +584,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 +614,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 +624,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 +661,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 +688,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 +718,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 +731,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 +816,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 +830,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) {
|
|
|