| Index: chrome/renderer/render_view.cc
 | 
| ===================================================================
 | 
| --- chrome/renderer/render_view.cc	(revision 7533)
 | 
| +++ chrome/renderer/render_view.cc	(working copy)
 | 
| @@ -89,9 +89,9 @@
 | 
|  // delay.
 | 
|  static const int kDelayForForcedCaptureMs = 6000;
 | 
|  
 | 
| -// How often we will sync the navigation state when the user is changing form
 | 
| -// elements or scroll position.
 | 
| -const TimeDelta kDelayForNavigationSync = TimeDelta::FromSeconds(5);
 | 
| +// The default value for RenderView.delay_seconds_for_form_state_sync_, see
 | 
| +// that variable for more.
 | 
| +const int kDefaultDelaySecondsForFormStateSync = 5;
 | 
|  
 | 
|  // The next available page ID to use. This ensures that the page IDs are
 | 
|  // globally unique in the renderer.
 | 
| @@ -142,29 +142,30 @@
 | 
|  
 | 
|  ///////////////////////////////////////////////////////////////////////////////
 | 
|  
 | 
| -RenderView::RenderView()
 | 
| -  : RenderWidget(g_render_thread, true),
 | 
| -    is_loading_(false),
 | 
| -    page_id_(-1),
 | 
| -    last_page_id_sent_to_browser_(-1),
 | 
| -    last_indexed_page_id_(-1),
 | 
| -    method_factory_(this),
 | 
| -    opened_by_user_gesture_(true),
 | 
| -    enable_dom_automation_(false),
 | 
| -    enable_dom_ui_bindings_(false),
 | 
| -    target_url_status_(TARGET_NONE),
 | 
| -    printed_document_width_(0),
 | 
| -    first_default_plugin_(NULL),
 | 
| -    navigation_gesture_(NavigationGestureUnknown),
 | 
| -    history_back_list_count_(0),
 | 
| -    history_forward_list_count_(0),
 | 
| -    disable_popup_blocking_(false),
 | 
| -    has_unload_listener_(false),
 | 
| -    decrement_shared_popup_at_destruction_(false),
 | 
| -    greasemonkey_enabled_(false),
 | 
| -    waiting_for_create_window_ack_(false),
 | 
| -    form_field_autofill_request_id_(0),
 | 
| -    popup_notification_visible_(false)  {
 | 
| +RenderView::RenderView(RenderThreadBase* render_thread)
 | 
| +    : RenderWidget(render_thread, true),
 | 
| +      is_loading_(false),
 | 
| +      page_id_(-1),
 | 
| +      last_page_id_sent_to_browser_(-1),
 | 
| +      last_indexed_page_id_(-1),
 | 
| +      method_factory_(this),
 | 
| +      opened_by_user_gesture_(true),
 | 
| +      enable_dom_automation_(false),
 | 
| +      enable_dom_ui_bindings_(false),
 | 
| +      target_url_status_(TARGET_NONE),
 | 
| +      printed_document_width_(0),
 | 
| +      first_default_plugin_(NULL),
 | 
| +      navigation_gesture_(NavigationGestureUnknown),
 | 
| +      history_back_list_count_(0),
 | 
| +      history_forward_list_count_(0),
 | 
| +      disable_popup_blocking_(false),
 | 
| +      has_unload_listener_(false),
 | 
| +      decrement_shared_popup_at_destruction_(false),
 | 
| +      greasemonkey_enabled_(false),
 | 
| +      waiting_for_create_window_ack_(false),
 | 
| +      form_field_autofill_request_id_(0),
 | 
| +      popup_notification_visible_(false),
 | 
| +      delay_seconds_for_form_state_sync_(kDefaultDelaySecondsForFormStateSync) {
 | 
|    resource_dispatcher_ = new ResourceDispatcher(this);
 | 
|  #ifdef CHROME_PERSONALIZATION
 | 
|    personalization_ = Personalization::CreateRendererPersonalization();
 | 
| @@ -183,7 +184,7 @@
 | 
|      it = plugin_delegates_.erase(it);
 | 
|    }
 | 
|  
 | 
| -  g_render_thread->RemoveFilter(debug_message_handler_);
 | 
| +  render_thread_->RemoveFilter(debug_message_handler_);
 | 
|  
 | 
|  #ifdef CHROME_PERSONALIZATION
 | 
|    Personalization::CleanupRendererPersonalization(personalization_);
 | 
| @@ -193,6 +194,7 @@
 | 
|  
 | 
|  /*static*/
 | 
|  RenderView* RenderView::Create(
 | 
| +    RenderThreadBase* render_thread,
 | 
|      HWND parent_hwnd,
 | 
|      HANDLE modal_dialog_event,
 | 
|      int32 opener_id,
 | 
| @@ -200,7 +202,7 @@
 | 
|      SharedRenderViewCounter* counter,
 | 
|      int32 routing_id) {
 | 
|    DCHECK(routing_id != MSG_ROUTING_NONE);
 | 
| -  scoped_refptr<RenderView> view = new RenderView();
 | 
| +  scoped_refptr<RenderView> view = new RenderView(render_thread);
 | 
|    view->Init(parent_hwnd,
 | 
|               modal_dialog_event,
 | 
|               opener_id,
 | 
| @@ -271,7 +273,7 @@
 | 
|    webview()->SetBackForwardListSize(1);
 | 
|  
 | 
|    routing_id_ = routing_id;
 | 
| -  g_render_thread->AddRoute(routing_id_, this);
 | 
| +  render_thread_->AddRoute(routing_id_, this);
 | 
|    // Take a reference on behalf of the RenderThread.  This will be balanced
 | 
|    // when we receive ViewMsg_Close.
 | 
|    AddRef();
 | 
| @@ -295,7 +297,7 @@
 | 
|        command_line.HasSwitch(switches::kEnableGreasemonkey);
 | 
|  
 | 
|    debug_message_handler_ = new DebugMessageHandler(this);
 | 
| -  g_render_thread->AddFilter(debug_message_handler_);
 | 
| +  render_thread_->AddFilter(debug_message_handler_);
 | 
|  }
 | 
|  
 | 
|  void RenderView::OnMessageReceived(const IPC::Message& message) {
 | 
| @@ -1458,9 +1460,10 @@
 | 
|    // do inject into any other document.
 | 
|    if (greasemonkey_enabled_) {
 | 
|      const GURL &gurl = frame->GetURL();
 | 
| -    if (gurl.SchemeIs("file") ||
 | 
| -        gurl.SchemeIs("http") ||
 | 
| -        gurl.SchemeIs("https")) {
 | 
| +    if (g_render_thread &&  // Will be NULL when testing.
 | 
| +        (gurl.SchemeIs("file") ||
 | 
| +         gurl.SchemeIs("http") ||
 | 
| +         gurl.SchemeIs("https"))) {
 | 
|        g_render_thread->greasemonkey_slave()->InjectScripts(frame);
 | 
|      }
 | 
|    }
 | 
| @@ -1785,7 +1788,7 @@
 | 
|  
 | 
|    int32 routing_id = MSG_ROUTING_NONE;
 | 
|    HANDLE modal_dialog_event = NULL;
 | 
| -  bool result = g_render_thread->Send(
 | 
| +  bool result = render_thread_->Send(
 | 
|        new ViewHostMsg_CreateWindow(routing_id_, user_gesture, &routing_id,
 | 
|                                     &modal_dialog_event));
 | 
|    if (routing_id == MSG_ROUTING_NONE) {
 | 
| @@ -1795,7 +1798,8 @@
 | 
|  
 | 
|    // The WebView holds a reference to this new RenderView
 | 
|    const WebPreferences& prefs = webview->GetPreferences();
 | 
| -  RenderView* view = RenderView::Create(NULL, modal_dialog_event, routing_id_,
 | 
| +  RenderView* view = RenderView::Create(render_thread_,
 | 
| +                                        NULL, modal_dialog_event, routing_id_,
 | 
|                                          prefs, shared_popup_counter_,
 | 
|                                          routing_id);
 | 
|    view->set_opened_by_user_gesture(user_gesture);
 | 
| @@ -1811,7 +1815,7 @@
 | 
|  WebWidget* RenderView::CreatePopupWidget(WebView* webview,
 | 
|                                           bool focus_on_show) {
 | 
|    RenderWidget* widget = RenderWidget::Create(routing_id_,
 | 
| -                                              g_render_thread,
 | 
| +                                              render_thread_,
 | 
|                                                focus_on_show);
 | 
|    return widget->webwidget();
 | 
|  }
 | 
| @@ -1839,7 +1843,7 @@
 | 
|    bool is_gears = false;
 | 
|    if (ShouldLoadPluginInProcess(mime_type, &is_gears)) {
 | 
|      std::wstring path;
 | 
| -    g_render_thread->Send(
 | 
| +    render_thread_->Send(
 | 
|          new ViewHostMsg_GetPluginPath(url, mime_type, clsid, &path,
 | 
|                                        actual_mime_type));
 | 
|      if (path.empty())
 | 
| @@ -2369,9 +2373,11 @@
 | 
|  }
 | 
|  
 | 
|  void RenderView::OnNavStateChanged(WebView* webview) {
 | 
| -  if (!nav_state_sync_timer_.IsRunning())
 | 
| -    nav_state_sync_timer_.Start(kDelayForNavigationSync, this,
 | 
| -                                &RenderView::SyncNavigationState);
 | 
| +  if (!nav_state_sync_timer_.IsRunning()) {
 | 
| +    nav_state_sync_timer_.Start(
 | 
| +        TimeDelta::FromSeconds(delay_seconds_for_form_state_sync_), this,
 | 
| +        &RenderView::SyncNavigationState);
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  void RenderView::SetTooltipText(WebView* webview,
 | 
| 
 |