diff options
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/browser_process.h | 5 | ||||
-rw-r--r-- | chrome/browser/browser_process_impl.cc | 3 | ||||
-rw-r--r-- | chrome/browser/browser_process_impl.h | 4 | ||||
-rw-r--r-- | chrome/browser/browser_shutdown.cc | 3 | ||||
-rw-r--r-- | chrome/browser/render_view_host.cc | 26 | ||||
-rw-r--r-- | chrome/browser/render_view_host.h | 12 | ||||
-rw-r--r-- | chrome/browser/render_view_host_delegate.h | 9 | ||||
-rw-r--r-- | chrome/browser/render_view_host_manager.cc | 10 | ||||
-rw-r--r-- | chrome/browser/render_view_host_manager.h | 4 | ||||
-rw-r--r-- | chrome/browser/tab_contents/web_contents.cc | 2 | ||||
-rw-r--r-- | chrome/browser/tab_contents/web_contents.h | 6 | ||||
-rw-r--r-- | chrome/browser/tab_contents/web_contents_unittest.cc | 6 | ||||
-rw-r--r-- | chrome/browser/tab_contents/web_contents_view.cc | 3 | ||||
-rw-r--r-- | chrome/browser/tab_contents/web_contents_view.h | 11 | ||||
-rw-r--r-- | chrome/browser/tab_contents/web_contents_view_win.cc | 2 | ||||
-rw-r--r-- | chrome/browser/tab_contents/web_contents_view_win.h | 2 |
16 files changed, 69 insertions, 39 deletions
diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h index 18ce8be..adff28b 100644 --- a/chrome/browser/browser_process.h +++ b/chrome/browser/browser_process.h @@ -36,6 +36,7 @@ class SuspendController; namespace base { class Thread; +class WaitableEvent; } namespace sandbox { class BrokerServices; @@ -128,10 +129,10 @@ class BrowserProcess { ResourceDispatcherHost* rdh = resource_dispatcher_host(); return rdh ? rdh->download_request_manager() : NULL; } +#endif // Returns an event that is signaled when the browser shutdown. - virtual HANDLE shutdown_event() = 0; -#endif + virtual base::WaitableEvent* shutdown_event() = 0; // Returns a reference to the user-data-dir based profiles vector. std::vector<std::wstring>& user_data_dir_profiles() { diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc index 904de03..bccf10b 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc @@ -7,6 +7,7 @@ #include "base/command_line.h" #include "base/path_service.h" #include "base/thread.h" +#include "base/waitable_event.h" #include "chrome/browser/automation/automation_provider_list.h" #include "chrome/browser/browser_trial.h" #include "chrome/browser/chrome_thread.h" @@ -127,7 +128,7 @@ BrowserProcessImpl::BrowserProcessImpl(CommandLine& command_line) memory_model_ = MEDIUM_MEMORY_MODEL; } - shutdown_event_ = ::CreateEvent(NULL, TRUE, FALSE, NULL); + shutdown_event_ = new base::WaitableEvent(true, false); } BrowserProcessImpl::~BrowserProcessImpl() { diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_process_impl.h index 6f51102..3b8732c 100644 --- a/chrome/browser/browser_process_impl.h +++ b/chrome/browser/browser_process_impl.h @@ -167,7 +167,7 @@ class BrowserProcessImpl : public BrowserProcess, public NonThreadSafe { return memory_model_; } - virtual HANDLE shutdown_event() { return shutdown_event_; } + virtual base::WaitableEvent* shutdown_event() { return shutdown_event_; } private: void CreateResourceDispatcherHost(); @@ -242,7 +242,7 @@ class BrowserProcessImpl : public BrowserProcess, public NonThreadSafe { bool using_new_frames_; // An event that notifies when we are shutting-down. - HANDLE shutdown_event_; + base::WaitableEvent* shutdown_event_; DISALLOW_EVIL_CONSTRUCTORS(BrowserProcessImpl); }; diff --git a/chrome/browser/browser_shutdown.cc b/chrome/browser/browser_shutdown.cc index e192688..e0417fa 100644 --- a/chrome/browser/browser_shutdown.cc +++ b/chrome/browser/browser_shutdown.cc @@ -9,6 +9,7 @@ #include "base/path_service.h" #include "base/string_util.h" #include "base/time.h" +#include "base/waitable_event.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/first_run.h" #include "chrome/browser/jankometer.h" @@ -86,7 +87,7 @@ void Shutdown() { DCHECK(g_browser_process); // Notifies we are going away. - ::SetEvent(g_browser_process->shutdown_event()); + g_browser_process->shutdown_event()->Signal(); PluginService* plugin_service = PluginService::GetInstance(); if (plugin_service) { diff --git a/chrome/browser/render_view_host.cc b/chrome/browser/render_view_host.cc index 5ace177..399beee 100644 --- a/chrome/browser/render_view_host.cc +++ b/chrome/browser/render_view_host.cc @@ -8,6 +8,7 @@ #include <vector> #include "base/string_util.h" +#include "base/waitable_event.h" #include "chrome/app/result_codes.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/cross_site_request_manager.h" @@ -74,7 +75,7 @@ RenderViewHost* RenderViewHost::FromID(int render_process_id, RenderViewHost::RenderViewHost(SiteInstance* instance, RenderViewHostDelegate* delegate, int routing_id, - HANDLE modal_dialog_event) + base::WaitableEvent* modal_dialog_event) : RenderWidgetHost(instance->GetProcess(), routing_id), instance_(instance), enable_dom_ui_bindings_(false), @@ -93,9 +94,9 @@ RenderViewHost::RenderViewHost(SiteInstance* instance, DCHECK(instance_); DCHECK(delegate_); if (modal_dialog_event == NULL) - modal_dialog_event = CreateEvent(NULL, TRUE, FALSE, NULL); + modal_dialog_event = new base::WaitableEvent(true, false); - modal_dialog_event_.Set(modal_dialog_event); + modal_dialog_event_.reset(modal_dialog_event); #ifdef CHROME_PERSONALIZATION personalization_ = Personalization::CreateHostPersonalization(this); #endif @@ -134,7 +135,7 @@ bool RenderViewHost::CreateRenderView() { renderer_process_handle = GetCurrentProcess(); BOOL result = DuplicateHandle(GetCurrentProcess(), - modal_dialog_event_.Get(), + modal_dialog_event_->handle(), renderer_process_handle, &modal_dialog_event, SYNCHRONIZE, @@ -498,7 +499,7 @@ void RenderViewHost::JavaScriptMessageBoxClosed(IPC::Message* reply_msg, } if (--modal_dialog_count_ == 0) - ResetEvent(modal_dialog_event_.Get()); + modal_dialog_event_->Reset(); ViewHostMsg_RunJavaScriptMessage::WriteReplyParams(reply_msg, success, prompt); Send(reply_msg); } @@ -509,7 +510,7 @@ void RenderViewHost::ModalHTMLDialogClosed(IPC::Message* reply_msg, StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); if (--modal_dialog_count_ == 0) - ResetEvent(modal_dialog_event_.Get()); + modal_dialog_event_->Reset(); ViewHostMsg_ShowModalHTMLDialog::WriteReplyParams(reply_msg, json_retval); Send(reply_msg); @@ -742,7 +743,7 @@ void RenderViewHost::Shutdown() { // If we are being run modally (see RunModal), then we need to cleanup. if (run_modal_reply_msg_) { if (--modal_dialog_count_ == 0) - ResetEvent(modal_dialog_event_.Get()); + modal_dialog_event_->Reset(); Send(run_modal_reply_msg_); run_modal_reply_msg_ = NULL; } @@ -753,7 +754,8 @@ void RenderViewHost::OnMsgCreateWindow(int route_id, HANDLE modal_dialog_event) { RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); if (view) - view->CreateNewWindow(route_id, modal_dialog_event); + view->CreateNewWindow(route_id, + new base::WaitableEvent(modal_dialog_event)); } void RenderViewHost::OnMsgCreateWidget(int route_id, bool activatable) { @@ -781,7 +783,7 @@ void RenderViewHost::OnMsgShowWidget(int route_id, void RenderViewHost::OnMsgRunModal(IPC::Message* reply_msg) { DCHECK(!run_modal_reply_msg_); if (modal_dialog_count_++ == 0) - SetEvent(modal_dialog_event_.Get()); + modal_dialog_event_->Reset(); run_modal_reply_msg_ = reply_msg; // TODO(darin): Bug 1107929: Need to inform our delegate to show this view in @@ -1085,7 +1087,7 @@ void RenderViewHost::OnMsgRunJavaScriptMessage( IPC::Message* reply_msg) { StopHangMonitorTimeout(); if (modal_dialog_count_++ == 0) - SetEvent(modal_dialog_event_.Get()); + modal_dialog_event_->Signal(); bool did_suppress_message = false; delegate_->RunJavaScriptMessage(message, default_prompt, flags, reply_msg, &are_javascript_messages_suppressed_); @@ -1095,7 +1097,7 @@ void RenderViewHost::OnMsgRunBeforeUnloadConfirm(const std::wstring& message, IPC::Message* reply_msg) { StopHangMonitorTimeout(); if (modal_dialog_count_++ == 0) - SetEvent(modal_dialog_event_.Get()); + modal_dialog_event_->Signal(); delegate_->RunBeforeUnloadConfirm(message, reply_msg); } @@ -1104,7 +1106,7 @@ void RenderViewHost::OnMsgShowModalHTMLDialog( IPC::Message* reply_msg) { StopHangMonitorTimeout(); if (modal_dialog_count_++ == 0) - SetEvent(modal_dialog_event_.Get()); + modal_dialog_event_->Signal(); delegate_->ShowModalHTMLDialog(url, width, height, json_arguments, reply_msg); } diff --git a/chrome/browser/render_view_host.h b/chrome/browser/render_view_host.h index f95720e..7b0ef7a 100644 --- a/chrome/browser/render_view_host.h +++ b/chrome/browser/render_view_host.h @@ -8,7 +8,7 @@ #include <string> #include <vector> -#include "base/scoped_handle.h" +#include "base/scoped_ptr.h" #include "chrome/browser/render_view_host_delegate.h" #include "chrome/browser/render_widget_host.h" #include "chrome/common/page_zoom.h" @@ -33,6 +33,10 @@ struct WebDropData; struct WebPreferences; enum WindowOpenDisposition; +namespace base { +class WaitableEvent; +} + namespace gfx { class Point; } @@ -86,7 +90,7 @@ class RenderViewHost : public RenderWidgetHost { explicit RenderViewHost(SiteInstance* instance, RenderViewHostDelegate* delegate, int routing_id, - HANDLE modal_dialog_event); + base::WaitableEvent* modal_dialog_event); virtual ~RenderViewHost(); SiteInstance* site_instance() const { return instance_; } @@ -578,7 +582,7 @@ class RenderViewHost : public RenderWidgetHost { // Handle to an event that's set when the page is showing a modal dialog box // (or equivalent constrained window). The renderer and plugin processes // check this to know if they should pump messages/tasks then. - ScopedHandle modal_dialog_event_; + scoped_ptr<base::WaitableEvent> modal_dialog_event_; // Multiple dialog boxes can be shown before the first one is finished, // so we keep a counter to know when we can reset the modal dialog event. @@ -618,7 +622,7 @@ class RenderViewHostFactory { SiteInstance* instance, RenderViewHostDelegate* delegate, int routing_id, - HANDLE modal_dialog_event) = 0; + base::WaitableEvent* modal_dialog_event) = 0; }; #endif // CHROME_BROWSER_RENDER_VIEW_HOST_H__ diff --git a/chrome/browser/render_view_host_delegate.h b/chrome/browser/render_view_host_delegate.h index 1fd0c41..34aba46 100644 --- a/chrome/browser/render_view_host_delegate.h +++ b/chrome/browser/render_view_host_delegate.h @@ -22,6 +22,10 @@ class WebContents; struct WebDropData; enum WindowOpenDisposition; +namespace base { +class WaitableEvent; +} + namespace IPC { class Message; } @@ -56,7 +60,10 @@ class RenderViewHostDelegate { // // Note: this is not called "CreateWindow" because that will clash with // the Windows function which is actually a #define. - virtual void CreateNewWindow(int route_id, HANDLE modal_dialog_event) = 0; + // + // NOTE: this takes ownership of @modal_dialog_event + virtual void CreateNewWindow(int route_id, + base::WaitableEvent* modal_dialog_event) = 0; // The page is trying to open a new widget (e.g. a select popup). The // widget should be created associated with the given route, but it should diff --git a/chrome/browser/render_view_host_manager.cc b/chrome/browser/render_view_host_manager.cc index f7edacf..622df9e 100644 --- a/chrome/browser/render_view_host_manager.cc +++ b/chrome/browser/render_view_host_manager.cc @@ -15,6 +15,10 @@ #include "chrome/common/chrome_switches.h" #include "chrome/common/notification_service.h" +namespace base { +class WaitableEvent; +} + RenderViewHostManager::RenderViewHostManager( RenderViewHostFactory* render_view_factory, RenderViewHostDelegate* render_view_delegate, @@ -37,7 +41,7 @@ RenderViewHostManager::~RenderViewHostManager() { void RenderViewHostManager::Init(Profile* profile, SiteInstance* site_instance, int routing_id, - HANDLE modal_dialog_event) { + base::WaitableEvent* modal_dialog_event) { // Create a RenderViewHost, once we have an instance. It is important to // immediately give this SiteInstance to a RenderViewHost so that it is // ref counted. @@ -55,7 +59,7 @@ void RenderViewHostManager::Shutdown() { render_view_host_->Shutdown(); render_view_host_ = NULL; } - + RenderViewHost* RenderViewHostManager::Navigate(const NavigationEntry& entry) { RenderViewHost* dest_render_view_host = UpdateRendererStateNavigate(entry); if (!dest_render_view_host) @@ -347,7 +351,7 @@ bool RenderViewHostManager::CreatePendingRenderView(SiteInstance* instance) { RenderViewHost* RenderViewHostManager::CreateRenderViewHost( SiteInstance* instance, int routing_id, - HANDLE modal_dialog_event) { + base::WaitableEvent* modal_dialog_event) { if (render_view_factory_) { return render_view_factory_->CreateRenderViewHost( instance, render_view_delegate_, routing_id, modal_dialog_event); diff --git a/chrome/browser/render_view_host_manager.h b/chrome/browser/render_view_host_manager.h index 3c2f61d..ee0e16b 100644 --- a/chrome/browser/render_view_host_manager.h +++ b/chrome/browser/render_view_host_manager.h @@ -69,7 +69,7 @@ class RenderViewHostManager { void Init(Profile* profile, SiteInstance* site_instance, int routing_id, - HANDLE modal_dialog_event); + base::WaitableEvent* modal_dialog_event); // Schedules all RenderViewHosts for destruction. void Shutdown(); @@ -179,7 +179,7 @@ class RenderViewHostManager { // factory is NULL). RenderViewHost* CreateRenderViewHost(SiteInstance* instance, int routing_id, - HANDLE modal_dialog_event); + base::WaitableEvent* modal_dialog_event); // Replaces the currently shown render_view_host_ with the RenderViewHost in // the field pointed to by |new_render_view_host|, and then NULLs the field. diff --git a/chrome/browser/tab_contents/web_contents.cc b/chrome/browser/tab_contents/web_contents.cc index 77faa55..638d370 100644 --- a/chrome/browser/tab_contents/web_contents.cc +++ b/chrome/browser/tab_contents/web_contents.cc @@ -178,7 +178,7 @@ WebContents::WebContents(Profile* profile, SiteInstance* site_instance, RenderViewHostFactory* render_view_factory, int routing_id, - HANDLE modal_dialog_event) + base::WaitableEvent* modal_dialog_event) : TabContents(TAB_CONTENTS_WEB), view_(new WebContentsViewWin(this)), ALLOW_THIS_IN_INITIALIZER_LIST( diff --git a/chrome/browser/tab_contents/web_contents.h b/chrome/browser/tab_contents/web_contents.h index 7b44e79..86ce3bf 100644 --- a/chrome/browser/tab_contents/web_contents.h +++ b/chrome/browser/tab_contents/web_contents.h @@ -24,6 +24,10 @@ class RenderViewHostFactory; class RenderWidgetHost; class WebContentsView; +namespace base { +class WaitableEvent; +} + // WebContents represents the contents of a tab that shows web pages. It embeds // a RenderViewHost (via RenderViewHostManager) to actually display the page. class WebContents : public TabContents, @@ -41,7 +45,7 @@ class WebContents : public TabContents, SiteInstance* instance, RenderViewHostFactory* render_view_factory, int routing_id, - HANDLE modal_dialog_event); + base::WaitableEvent* modal_dialog_event); static void RegisterUserPrefs(PrefService* prefs); diff --git a/chrome/browser/tab_contents/web_contents_unittest.cc b/chrome/browser/tab_contents/web_contents_unittest.cc index df018c1..fbb3ad6 100644 --- a/chrome/browser/tab_contents/web_contents_unittest.cc +++ b/chrome/browser/tab_contents/web_contents_unittest.cc @@ -82,7 +82,7 @@ class TestRenderViewHost : public RenderViewHost { SiteInstance* instance, RenderViewHostDelegate* delegate, int routing_id, - HANDLE modal_dialog_event) + base::WaitableEvent* modal_dialog_event) : RenderViewHost(instance, delegate, routing_id, modal_dialog_event), is_loading(false), is_created(false), @@ -156,7 +156,7 @@ class TestRenderViewHostFactory : public RenderViewHostFactory { SiteInstance* instance, RenderViewHostDelegate* delegate, int routing_id, - HANDLE modal_dialog_event) { + base::WaitableEvent* modal_dialog_event) { return new TestRenderViewHost( instance, delegate, routing_id, modal_dialog_event); } @@ -217,7 +217,7 @@ class TestWebContents : public WebContents { RenderViewHost* CreateRenderViewHost(SiteInstance* instance, RenderViewHostDelegate* delegate, int routing_id, - HANDLE modal_dialog_event) { + base::WaitableEvent* modal_dialog_event) { return new TestRenderViewHost( instance, delegate, routing_id, modal_dialog_event); } diff --git a/chrome/browser/tab_contents/web_contents_view.cc b/chrome/browser/tab_contents/web_contents_view.cc index d95fd78..c3c8e8b 100644 --- a/chrome/browser/tab_contents/web_contents_view.cc +++ b/chrome/browser/tab_contents/web_contents_view.cc @@ -16,7 +16,8 @@ void WebContentsView::RenderWidgetHostDestroyed(RenderWidgetHost* host) { } } -void WebContentsView::CreateNewWindow(int route_id, HANDLE modal_dialog_event) { +void WebContentsView::CreateNewWindow(int route_id, + base::WaitableEvent* modal_dialog_event) { // Save the created window associated with the route so we can show it later. pending_contents_[route_id] = CreateNewWindowInternal(route_id, modal_dialog_event); diff --git a/chrome/browser/tab_contents/web_contents_view.h b/chrome/browser/tab_contents/web_contents_view.h index 232b449..dc5362c 100644 --- a/chrome/browser/tab_contents/web_contents_view.h +++ b/chrome/browser/tab_contents/web_contents_view.h @@ -24,6 +24,10 @@ class WebContents; struct WebDropData; class WebKeyboardEvent; +namespace base { +class WaitableEvent; +} + // The WebContentsView is an interface that is implemented by the platform- // dependent web contents views. The WebContents uses this interface to talk to // them. View-related messages will also get forwarded directly to this class @@ -152,8 +156,8 @@ class WebContentsView : public RenderViewHostDelegate::View { // created objects so that they can be associated with the given routes. When // they are shown later, we'll look them up again and pass the objects to // the Show functions rather than the route ID. - virtual WebContents* CreateNewWindowInternal(int route_id, - HANDLE modal_dialog_event) = 0; + virtual WebContents* CreateNewWindowInternal + (int route_id, base::WaitableEvent* modal_dialog_event) = 0; virtual RenderWidgetHostView* CreateNewWidgetInternal(int route_id, bool activatable) = 0; virtual void ShowCreatedWindowInternal(WebContents* new_web_contents, @@ -167,7 +171,8 @@ class WebContentsView : public RenderViewHostDelegate::View { // We implement these functions on RenderViewHostDelegate::View directly and // do some book-keeping associated with the request. The request is then // forwarded to *Internal which does platform-specific work. - virtual void CreateNewWindow(int route_id, HANDLE modal_dialog_event); + virtual void CreateNewWindow(int route_id, + base::WaitableEvent* modal_dialog_event); virtual void CreateNewWidget(int route_id, bool activatable); virtual void ShowCreatedWindow(int route_id, WindowOpenDisposition disposition, diff --git a/chrome/browser/tab_contents/web_contents_view_win.cc b/chrome/browser/tab_contents/web_contents_view_win.cc index ab244cc..29af1f6 100644 --- a/chrome/browser/tab_contents/web_contents_view_win.cc +++ b/chrome/browser/tab_contents/web_contents_view_win.cc @@ -326,7 +326,7 @@ void WebContentsViewWin::ShowContextMenu( WebContents* WebContentsViewWin::CreateNewWindowInternal( int route_id, - HANDLE modal_dialog_event) { + base::WaitableEvent* modal_dialog_event) { // Create the new web contents. This will automatically create the new // WebContentsView. In the future, we may want to create the view separately. WebContents* new_contents = diff --git a/chrome/browser/tab_contents/web_contents_view_win.h b/chrome/browser/tab_contents/web_contents_view_win.h index 137674a..a94b601 100644 --- a/chrome/browser/tab_contents/web_contents_view_win.h +++ b/chrome/browser/tab_contents/web_contents_view_win.h @@ -48,7 +48,7 @@ class WebContentsViewWin : public WebContentsView, // Backend implementation of RenderViewHostDelegate::View. virtual WebContents* CreateNewWindowInternal( - int route_id, HANDLE modal_dialog_event); + int route_id, base::WaitableEvent* modal_dialog_event); virtual RenderWidgetHostView* CreateNewWidgetInternal(int route_id, bool activatable); virtual void ShowCreatedWindowInternal(WebContents* new_web_contents, |