summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/all.gyp14
-rw-r--r--chrome/browser/automation/automation_provider.cc2
-rw-r--r--chrome/browser/automation/automation_provider.h16
-rw-r--r--chrome/browser/automation/automation_provider_win.cc37
-rw-r--r--chrome/browser/automation/chrome_frame_automation_provider_win.cc (renamed from chrome/browser/automation/chrome_frame_automation_provider.cc)9
-rw-r--r--chrome/browser/automation/chrome_frame_automation_provider_win.h (renamed from chrome/browser/automation/chrome_frame_automation_provider.h)6
-rw-r--r--chrome/browser/automation/chrome_frame_automation_provider_win_unittest.cc (renamed from chrome/browser/automation/automation_provider_unittest.cc)3
-rw-r--r--chrome/browser/external_tab/external_tab_container.h14
-rw-r--r--chrome/browser/ui/startup/startup_browser_creator.cc4
-rw-r--r--chrome/browser/ui/views/external_tab_container_win.cc177
-rw-r--r--chrome/browser/ui/views/external_tab_container_win.h45
-rw-r--r--chrome/chrome_browser.gypi8
-rw-r--r--chrome/chrome_browser_ui.gypi2
-rw-r--r--chrome/chrome_installer.gypi2
-rw-r--r--chrome/chrome_tests_unit.gypi3
-rw-r--r--chrome/common/automation_messages.h8
-rw-r--r--chrome/common/automation_messages_internal.h20
-rw-r--r--chrome/test/automation/automation_proxy.cc25
-rw-r--r--chrome/test/automation/automation_proxy.h8
-rw-r--r--chrome/test/automation/tab_proxy.cc2
-rw-r--r--chrome_frame/test/chrome_frame_test_utils.cc5
-rw-r--r--content/common/content_message_generator.cc24
-rw-r--r--ipc/ipc_message_utils.h7
-rw-r--r--ui/views/widget/native_widget_delegate.h1
-rw-r--r--ui/views/widget/widget.cc3
-rw-r--r--ui/views/widget/widget_observer.h8
26 files changed, 207 insertions, 246 deletions
diff --git a/build/all.gyp b/build/all.gyp
index ddb6558..dfc3811 100644
--- a/build/all.gyp
+++ b/build/all.gyp
@@ -258,15 +258,14 @@
'../chrome_frame/chrome_frame.gyp:chrome_frame_tests',
'../chrome_frame/chrome_frame.gyp:chrome_frame_unittests',
]
- }], # target_arch!="x64"
- ['use_aura==1 or target_arch=="x64"', {
+ }, { # target_arch!="x64"
'dependencies!': [
'../chrome_frame/chrome_frame.gyp:npchrome_frame',
],
'defines': [
'OMIT_CHROME_FRAME',
],
- }], # use_aura==1 or target_arch=="x64"
+ }], # target_arch=="x64"
],
}],
['OS=="linux"', {
@@ -579,15 +578,14 @@
'../chrome_frame/chrome_frame.gyp:chrome_frame_tests',
'../chrome_frame/chrome_frame.gyp:chrome_frame_unittests',
]
- }], # target_arch!="x64"
- ['use_aura==1 or target_arch=="x64"', {
+ }, { # target_arch!="x64"
'dependencies!': [
'../chrome_frame/chrome_frame.gyp:npchrome_frame',
],
'defines': [
'OMIT_CHROME_FRAME',
],
- }], # use_aura==1 or target_arch=="x64"
+ }], # target_arch=="x64"
],
},
{
@@ -706,14 +704,14 @@
'../remoting/remoting.gyp:remoting_host_installation',
],
}], # component != "shared_library"
- ['use_aura==1 or target_arch=="x64"', {
+ ['target_arch=="x64"', {
'dependencies!': [
'../chrome_frame/chrome_frame.gyp:npchrome_frame',
],
'defines': [
'OMIT_CHROME_FRAME',
],
- }], # use_aura==1 or target_arch=="x64"
+ }], # target_arch=="x64"
]
},
], # targets
diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc
index 08a7cc7..f85aaaa 100644
--- a/chrome/browser/automation/automation_provider.cc
+++ b/chrome/browser/automation/automation_provider.cc
@@ -428,7 +428,7 @@ bool AutomationProvider::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(AutomationMsg_BeginTracing, BeginTracing)
IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_EndTracing, EndTracing)
IPC_MESSAGE_HANDLER(AutomationMsg_GetTracingOutput, GetTracingOutput)
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
// These are for use with external tabs.
IPC_MESSAGE_HANDLER(AutomationMsg_CreateExternalTab, CreateExternalTab)
IPC_MESSAGE_HANDLER(AutomationMsg_ProcessUnhandledAccelerator,
diff --git a/chrome/browser/automation/automation_provider.h b/chrome/browser/automation/automation_provider.h
index a288308..1c5b8b6 100644
--- a/chrome/browser/automation/automation_provider.h
+++ b/chrome/browser/automation/automation_provider.h
@@ -146,7 +146,7 @@ class AutomationProvider
return reply_message;
}
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
// Adds the external tab passed in to the tab tracker.
bool AddExternalTab(ExternalTabContainer* external_tab);
#endif
@@ -285,7 +285,7 @@ class AutomationProvider
// Method called by the popup menu tracker when a popup menu is opened.
void NotifyPopupMenuOpened();
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
// The functions in this block are for use with external tabs, so they are
// Windows only.
@@ -304,16 +304,16 @@ class AutomationProvider
void OnForwardContextMenuCommandToChrome(int tab_handle, int command);
void CreateExternalTab(const ExternalTabSettings& settings,
- gfx::NativeWindow* tab_container_window,
- gfx::NativeWindow* tab_window,
+ HWND* tab_container_window,
+ HWND* tab_window,
int* tab_handle,
int* session_id);
void ConnectExternalTab(uint64 cookie,
bool allow,
- gfx::NativeWindow parent_window,
- gfx::NativeWindow* tab_container_window,
- gfx::NativeWindow* tab_window,
+ HWND parent_window,
+ HWND* tab_container_window,
+ HWND* tab_window,
int* tab_handle,
int* session_id);
@@ -335,7 +335,7 @@ class AutomationProvider
void OnSetZoomLevel(int handle, int zoom_level);
ExternalTabContainer* GetExternalTabForHandle(int handle);
-#endif // defined(OS_WIN) && !defined(USE_AURA)
+#endif // defined(OS_WIN)
scoped_ptr<IPC::ChannelProxy> channel_;
scoped_ptr<NewTabUILoadObserver> new_tab_ui_load_observer_;
diff --git a/chrome/browser/automation/automation_provider_win.cc b/chrome/browser/automation/automation_provider_win.cc
index 358ad6f..3bf1c12 100644
--- a/chrome/browser/automation/automation_provider_win.cc
+++ b/chrome/browser/automation/automation_provider_win.cc
@@ -24,7 +24,6 @@
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
-#include "content/public/browser/web_contents_view.h"
#include "content/public/common/page_zoom.h"
#include "ui/base/keycodes/keyboard_codes.h"
#include "ui/views/focus/accelerator_handler.h"
@@ -36,8 +35,10 @@ using content::WebContents;
void AutomationProvider::CreateExternalTab(
const ExternalTabSettings& settings,
- gfx::NativeWindow* tab_container_window, gfx::NativeWindow* tab_window,
- int* tab_handle, int* session_id) {
+ HWND* tab_container_window,
+ HWND* tab_window,
+ int* tab_handle,
+ int* session_id) {
TRACE_EVENT_BEGIN_ETW("AutomationProvider::CreateExternalTab", 0, "");
*tab_handle = 0;
@@ -63,8 +64,8 @@ void AutomationProvider::CreateExternalTab(
SessionTabHelper* session_tab_helper =
SessionTabHelper::FromWebContents(web_contents);
*tab_handle = external_tab_container->GetTabHandle();
- *tab_container_window = external_tab_container->GetExternalTabNativeView();
- *tab_window = web_contents->GetView()->GetNativeView();
+ *tab_container_window = external_tab_container->GetExternalTabHWND();
+ *tab_window = external_tab_container->GetContentHWND();
*session_id = session_tab_helper->session_id().id();
} else {
external_tab_container->Uninitialize();
@@ -118,15 +119,14 @@ void AutomationProvider::PrintAsync(int tab_handle) {
ExternalTabContainer* AutomationProvider::GetExternalTabForHandle(int handle) {
if (tab_tracker_->ContainsHandle(handle)) {
NavigationController* tab = tab_tracker_->GetResource(handle);
- return ExternalTabContainer::GetContainerForTab(
- tab->GetWebContents()->GetView()->GetNativeView());
+ return ExternalTabContainer::GetContainerForTab(tab->GetWebContents());
}
return NULL;
}
-void AutomationProvider::OnTabReposition(
- int tab_handle, const Reposition_Params& params) {
+void AutomationProvider::OnTabReposition(int tab_handle,
+ const Reposition_Params& params) {
if (!tab_tracker_->ContainsHandle(tab_handle))
return;
@@ -161,14 +161,13 @@ void AutomationProvider::OnForwardContextMenuCommandToChrome(int tab_handle,
external_tab->ExecuteContextMenuCommand(command);
}
-void AutomationProvider::ConnectExternalTab(
- uint64 cookie,
- bool allow,
- gfx::NativeWindow parent_window,
- gfx::NativeWindow* tab_container_window,
- gfx::NativeWindow* tab_window,
- int* tab_handle,
- int* session_id) {
+void AutomationProvider::ConnectExternalTab(uint64 cookie,
+ bool allow,
+ HWND parent_window,
+ HWND* tab_container_window,
+ HWND* tab_window,
+ int* tab_handle,
+ int* session_id) {
TRACE_EVENT_BEGIN_ETW("AutomationProvider::ConnectExternalTab", 0, "");
*tab_handle = 0;
@@ -191,8 +190,8 @@ void AutomationProvider::ConnectExternalTab(
SessionTabHelper* session_tab_helper =
SessionTabHelper::FromWebContents(web_contents);
*tab_handle = external_tab_container->GetTabHandle();
- *tab_container_window = external_tab_container->GetExternalTabNativeView();
- *tab_window = web_contents->GetView()->GetNativeView();
+ *tab_container_window = external_tab_container->GetExternalTabHWND();
+ *tab_window = external_tab_container->GetContentHWND();
*session_id = session_tab_helper->session_id().id();
} else {
external_tab_container->Uninitialize();
diff --git a/chrome/browser/automation/chrome_frame_automation_provider.cc b/chrome/browser/automation/chrome_frame_automation_provider_win.cc
index 5f8127d..808b711 100644
--- a/chrome/browser/automation/chrome_frame_automation_provider.cc
+++ b/chrome/browser/automation/chrome_frame_automation_provider_win.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/automation/chrome_frame_automation_provider.h"
+#include "chrome/browser/automation/chrome_frame_automation_provider_win.h"
#include <algorithm>
@@ -83,14 +83,10 @@ bool ChromeFrameAutomationProvider::IsValidMessage(uint32 type) {
switch (type) {
case AutomationMsg_CreateExternalTab::ID:
case AutomationMsg_ConnectExternalTab::ID:
-#if defined(OS_WIN)
case AutomationMsg_BrowserMove::ID:
case AutomationMsg_ProcessUnhandledAccelerator::ID:
case AutomationMsg_ForwardContextMenuCommandToChrome::ID:
-#endif // defined(OS_WIN)
-#if defined(OS_WIN)
case AutomationMsg_TabReposition::ID:
-#endif
case AutomationMsg_NavigateInExternalTab::ID:
case AutomationMsg_NavigateExternalTabAtIndex::ID:
case AutomationMsg_Find::ID:
@@ -128,8 +124,7 @@ bool ChromeFrameAutomationProvider::IsValidMessage(uint32 type) {
// static
void ChromeFrameAutomationProvider::ReleaseBrowserProcess() {
if (g_browser_process) {
- VLOG(1) << "ChromeFrameAutomationProvider: "
- "Releasing browser process.";
+ VLOG(1) << "ChromeFrameAutomationProvider: Releasing browser process.";
g_browser_process->ReleaseModule();
}
}
diff --git a/chrome/browser/automation/chrome_frame_automation_provider.h b/chrome/browser/automation/chrome_frame_automation_provider_win.h
index 99f3297..6b5a145 100644
--- a/chrome/browser/automation/chrome_frame_automation_provider.h
+++ b/chrome/browser/automation/chrome_frame_automation_provider_win.h
@@ -8,8 +8,8 @@
// The entire lifetime of this object should be contained within that of
// the BrowserProcess
-#ifndef CHROME_BROWSER_AUTOMATION_CHROME_FRAME_AUTOMATION_PROVIDER_H_
-#define CHROME_BROWSER_AUTOMATION_CHROME_FRAME_AUTOMATION_PROVIDER_H_
+#ifndef CHROME_BROWSER_AUTOMATION_CHROME_FRAME_AUTOMATION_PROVIDER_WIN_H_
+#define CHROME_BROWSER_AUTOMATION_CHROME_FRAME_AUTOMATION_PROVIDER_WIN_H_
#include "base/basictypes.h"
#include "chrome/browser/automation/automation_provider.h"
@@ -41,5 +41,5 @@ class ChromeFrameAutomationProvider : public AutomationProvider {
DISALLOW_COPY_AND_ASSIGN(ChromeFrameAutomationProvider);
};
-#endif // CHROME_BROWSER_AUTOMATION_CHROME_FRAME_AUTOMATION_PROVIDER_H_
+#endif // CHROME_BROWSER_AUTOMATION_CHROME_FRAME_AUTOMATION_PROVIDER_WIN_H_
diff --git a/chrome/browser/automation/automation_provider_unittest.cc b/chrome/browser/automation/chrome_frame_automation_provider_win_unittest.cc
index 3458158..1b9b9f0 100644
--- a/chrome/browser/automation/automation_provider_unittest.cc
+++ b/chrome/browser/automation/chrome_frame_automation_provider_win_unittest.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/automation/chrome_frame_automation_provider.h"
+#include "chrome/browser/automation/chrome_frame_automation_provider_win.h"
#include "chrome/test/base/testing_browser_process.h"
#include "content/public/test/test_browser_thread.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -37,4 +37,3 @@ TEST_F(AutomationProviderTest, TestInvalidChromeFrameMessage) {
-1))).Times(1);
mock->OnMessageReceived(bad_msg);
}
-
diff --git a/chrome/browser/external_tab/external_tab_container.h b/chrome/browser/external_tab/external_tab_container.h
index d48c170..4afaa6e 100644
--- a/chrome/browser/external_tab/external_tab_container.h
+++ b/chrome/browser/external_tab/external_tab_container.h
@@ -34,14 +34,17 @@ class ExternalTabContainer : public base::RefCounted<ExternalTabContainer> {
AutomationResourceMessageFilter* filter);
// A helper method that retrieves the ExternalTabContainer object that
- // hosts the given tab window.
- static ExternalTabContainer* GetContainerForTab(HWND tab_window);
+ // hosts the given WebContents.
+ static ExternalTabContainer* GetContainerForTab(
+ content::WebContents* web_contents);
// Returns the ExternalTabContainer instance associated with the cookie
// passed in. It also erases the corresponding reference from the map.
// Returns NULL if we fail to find the cookie in the map.
static scoped_refptr<ExternalTabContainer> RemovePendingTab(uintptr_t cookie);
+ // Initializes the instance. This must be invoked before any other member
+ // functions.
virtual bool Init(Profile* profile,
HWND parent,
const gfx::Rect& bounds,
@@ -66,7 +69,7 @@ class ExternalTabContainer : public base::RefCounted<ExternalTabContainer> {
// instance is created by Chrome and attached to an automation client.
virtual bool Reinitialize(AutomationProvider* automation_provider,
AutomationResourceMessageFilter* filter,
- gfx::NativeWindow parent_window) = 0;
+ HWND parent_window) = 0;
// This is invoked when the external host reflects back to us a keyboard
// message it did not process.
@@ -79,9 +82,8 @@ class ExternalTabContainer : public base::RefCounted<ExternalTabContainer> {
virtual void RunUnloadHandlers(IPC::Message* reply_message) = 0;
virtual content::WebContents* GetWebContents() const = 0;
-
- // This is a wrapper for GetNativeView from ExternalTabContainerWin.
- virtual gfx::NativeView GetExternalTabNativeView() const = 0;
+ virtual HWND GetExternalTabHWND() const = 0;
+ virtual HWND GetContentHWND() const = 0;
virtual void SetTabHandle(int handle) = 0;
virtual int GetTabHandle() const = 0;
diff --git a/chrome/browser/ui/startup/startup_browser_creator.cc b/chrome/browser/ui/startup/startup_browser_creator.cc
index e052cfc..62357be 100644
--- a/chrome/browser/ui/startup/startup_browser_creator.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator.cc
@@ -27,7 +27,6 @@
#include "chrome/browser/auto_launch_trial.h"
#include "chrome/browser/automation/automation_provider.h"
#include "chrome/browser/automation/automation_provider_list.h"
-#include "chrome/browser/automation/chrome_frame_automation_provider.h"
#include "chrome/browser/automation/testing_automation_provider.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
@@ -78,6 +77,7 @@
#endif
#if defined(OS_WIN)
+#include "chrome/browser/automation/chrome_frame_automation_provider_win.h"
#include "chrome/browser/ui/startup/startup_browser_creator_win.h"
#endif
@@ -497,7 +497,7 @@ bool StartupBrowserCreator::ProcessCmdLineImpl(
silent_launch = true;
if (command_line.HasSwitch(switches::kChromeFrame)) {
-#if !defined(USE_AURA)
+#if defined(OS_WIN)
if (!CreateAutomationProvider<ChromeFrameAutomationProvider>(
automation_channel_id, last_used_profile, expected_tabs))
return false;
diff --git a/chrome/browser/ui/views/external_tab_container_win.cc b/chrome/browser/ui/views/external_tab_container_win.cc
index bc5d9ce..d89b3a5 100644
--- a/chrome/browser/ui/views/external_tab_container_win.cc
+++ b/chrome/browser/ui/views/external_tab_container_win.cc
@@ -4,6 +4,10 @@
#include "chrome/browser/ui/views/external_tab_container_win.h"
+#include <atlbase.h>
+#include <atlapp.h>
+#include <atlconv.h>
+#include <atlmisc.h>
#include <string>
#include "base/bind.h"
@@ -36,6 +40,7 @@
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/media_stream_infobar_delegate.h"
#include "chrome/browser/ui/tab_modal_confirm_dialog.h"
+#include "chrome/browser/ui/views/hwnd_util.h"
#include "chrome/browser/ui/views/infobars/infobar_container_view.h"
#include "chrome/browser/ui/views/tab_contents/render_view_context_menu_win.h"
#include "chrome/common/automation_messages.h"
@@ -70,7 +75,12 @@
#include "ui/base/view_prop.h"
#include "ui/views/controls/webview/webview.h"
#include "ui/views/layout/grid_layout.h"
-#include "ui/views/win/hwnd_message_handler.h"
+#include "ui/views/widget/widget.h"
+
+#if defined(USE_AURA)
+#include "ui/aura/root_window.h"
+#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
+#endif
using content::BrowserThread;
using content::LoadNotificationDetails;
@@ -81,15 +91,44 @@ using content::OpenURLParams;
using content::RenderViewHost;
using content::SSLStatus;
using content::WebContents;
-using ui::ViewProp;
using WebKit::WebCString;
using WebKit::WebReferrerPolicy;
using WebKit::WebSecurityPolicy;
using WebKit::WebString;
+namespace {
+
static const char kWindowObjectKey[] = "ChromeWindowObject";
-namespace {
+// The following helper functions exist to localize UI toolkit-specific code.
+
+void ShowNativeView(gfx::NativeView view) {
+#if !defined(USE_AURA)
+ ::ShowWindow(view, SW_SHOWNA);
+#endif
+}
+
+scoped_ptr<content::NativeWebKeyboardEvent> CreateKeyboardEvent(
+ const MSG& msg) {
+#if defined(USE_AURA)
+ // TODO(grt): confirm that this is a translated character event.
+ ui::KeyEvent key_event(msg, true);
+ return scoped_ptr<content::NativeWebKeyboardEvent>(
+ new content::NativeWebKeyboardEvent(&key_event));
+#else
+ return scoped_ptr<content::NativeWebKeyboardEvent>(
+ new content::NativeWebKeyboardEvent(msg));
+#endif
+}
+
+const MSG& MessageFromKeyboardEvent(
+ const content::NativeWebKeyboardEvent& event) {
+#if defined(USE_AURA)
+ return event.os_event->native_event();
+#else
+ return event.os_event;
+#endif
+}
// Convert ui::MenuModel into a serializable form for Chrome Frame
ContextMenuModel* ConvertMenuModel(const ui::MenuModel* ui_model) {
@@ -123,7 +162,7 @@ base::LazyInstance<ExternalTabContainerWin::PendingTabs>
ExternalTabContainerWin::ExternalTabContainerWin(
AutomationProvider* automation,
AutomationResourceMessageFilter* filter)
- : views::NativeWidgetWin(new views::Widget),
+ : widget_(NULL),
automation_(automation),
tab_contents_container_(NULL),
tab_handle_(0),
@@ -131,12 +170,12 @@ ExternalTabContainerWin::ExternalTabContainerWin(
automation_resource_message_filter_(filter),
load_requests_via_automation_(false),
handle_top_level_requests_(false),
+ route_all_top_level_navigations_(false),
ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
pending_(false),
focus_manager_(NULL),
external_tab_view_(NULL),
unload_reply_message_(NULL),
- route_all_top_level_navigations_(false),
is_popup_window_(false) {
}
@@ -167,29 +206,28 @@ bool ExternalTabContainerWin::Init(Profile* profile,
const GURL& referrer,
bool infobars_enabled,
bool route_all_top_level_navigations) {
- if (IsWindow(GetNativeView())) {
+ if (widget_) {
NOTREACHED();
return false;
}
+ widget_ = new views::Widget();
+ widget_->AddObserver(this);
load_requests_via_automation_ = load_requests_via_automation;
handle_top_level_requests_ = handle_top_level_requests;
route_all_top_level_navigations_ = route_all_top_level_navigations;
- GetMessageHandler()->set_window_style(WS_POPUP | WS_CLIPCHILDREN);
-
views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
params.bounds = bounds;
- params.native_widget = this;
- GetWidget()->Init(params);
- if (!IsWindow(GetNativeView())) {
- NOTREACHED();
- return false;
- }
+#if defined(USE_AURA)
+ params.native_widget = new views::DesktopNativeWidgetAura(widget_);
+#endif
+ widget_->Init(params);
+ HWND window = chrome::HWNDForWidget(widget_);
// TODO(jcampan): limit focus traversal to contents.
- prop_.reset(new ViewProp(GetNativeView(), kWindowObjectKey, this));
+ prop_.reset(new ui::ViewProp(window, kWindowObjectKey, this));
if (existing_contents) {
existing_contents->GetController().SetBrowserContext(profile);
@@ -243,15 +281,14 @@ bool ExternalTabContainerWin::Init(Profile* profile,
// Note that it's important to do this before we call SetParent since
// during the SetParent call we will otherwise get a WA_ACTIVATE call
// that causes us to steal the current focus.
- SetWindowLong(
- GetNativeView(), GWL_STYLE,
- (GetWindowLong(GetNativeView(), GWL_STYLE) & ~WS_POPUP) | style);
+ SetWindowLong(window, GWL_STYLE,
+ (GetWindowLong(window, GWL_STYLE) & ~WS_POPUP) | style);
// Now apply the parenting and style
if (parent)
- SetParent(GetNativeView(), parent);
+ SetParent(window, parent);
- ::ShowWindow(existing_contents->GetView()->GetNativeView(), SW_SHOWNA);
+ ShowNativeView(existing_contents->GetView()->GetNativeView());
LoadAccelerators();
SetupExternalTabView();
@@ -263,6 +300,7 @@ bool ExternalTabContainerWin::Init(Profile* profile,
void ExternalTabContainerWin::Uninitialize() {
registrar_.RemoveAll();
if (web_contents_.get()) {
+ tab_contents_container_->SetWebContents(NULL);
UnregisterRenderViewHost(web_contents_->GetRenderViewHost());
// Explicitly tell the RPH to shutdown, as doing so is the only thing that
@@ -284,8 +322,9 @@ void ExternalTabContainerWin::Uninitialize() {
// more fitting.
web_contents_->GetRenderProcessHost()->FastShutdownForPageCount(1);
- if (GetWidget()->GetRootView())
- GetWidget()->GetRootView()->RemoveAllChildViews(true);
+ if (widget_->GetRootView())
+ widget_->GetRootView()->RemoveAllChildViews(true);
+ widget_ = NULL;
content::NotificationService::current()->Notify(
chrome::NOTIFICATION_EXTERNAL_TAB_CLOSED,
@@ -308,7 +347,7 @@ void ExternalTabContainerWin::Uninitialize() {
bool ExternalTabContainerWin::Reinitialize(
AutomationProvider* automation_provider,
AutomationResourceMessageFilter* filter,
- gfx::NativeWindow parent_window) {
+ HWND parent_window) {
if (!automation_provider || !filter) {
NOTREACHED();
return false;
@@ -323,7 +362,7 @@ bool ExternalTabContainerWin::Reinitialize(
weak_factory_.GetWeakPtr()));
if (parent_window)
- SetParent(GetNativeView(), parent_window);
+ SetParent(chrome::HWNDForWidget(widget_), parent_window);
return true;
}
@@ -331,8 +370,12 @@ WebContents* ExternalTabContainerWin::GetWebContents() const {
return web_contents_.get();
}
-gfx::NativeView ExternalTabContainerWin::GetExternalTabNativeView() const {
- return GetNativeView();
+HWND ExternalTabContainerWin::GetExternalTabHWND() const {
+ return chrome::HWNDForWidget(widget_);
+}
+
+HWND ExternalTabContainerWin::GetContentHWND() const {
+ return chrome::HWNDForNativeWindow(web_contents_->GetView()->GetNativeView());
}
void ExternalTabContainerWin::SetTabHandle(int handle) {
@@ -389,8 +432,8 @@ void ExternalTabContainerWin::RunUnloadHandlers(IPC::Message* reply_message) {
}
void ExternalTabContainerWin::ProcessUnhandledAccelerator(const MSG& msg) {
- NativeWebKeyboardEvent keyboard_event(msg);
- unhandled_keyboard_event_handler_.HandleKeyboardEvent(keyboard_event,
+ scoped_ptr<NativeWebKeyboardEvent> keyboard_event(CreateKeyboardEvent(msg));
+ unhandled_keyboard_event_handler_.HandleKeyboardEvent(*keyboard_event,
focus_manager_);
}
@@ -409,22 +452,6 @@ void ExternalTabContainerWin::FocusThroughTabTraversal(
web_contents_->FocusThroughTabTraversal(reverse);
}
-// static
-bool ExternalTabContainerWin::IsExternalTabContainer(HWND window) {
- return ViewProp::GetValue(window, kWindowObjectKey) != NULL;
-}
-
-// static
-ExternalTabContainer*
- ExternalTabContainerWin::GetExternalContainerFromNativeWindow(
- gfx::NativeView native_window) {
- ExternalTabContainer* tab_container = NULL;
- if (native_window) {
- tab_container = reinterpret_cast<ExternalTabContainer*>(
- ViewProp::GetValue(native_window, kWindowObjectKey));
- }
- return tab_container;
-}
////////////////////////////////////////////////////////////////////////////////
// ExternalTabContainer, content::WebContentsDelegate implementation:
@@ -719,7 +746,7 @@ bool ExternalTabContainerWin::HandleContextMenu(
ConvertMenuModel(&external_context_menu_->menu_model()));
POINT screen_pt = { params.x, params.y };
- MapWindowPoints(GetNativeView(), HWND_DESKTOP, &screen_pt, 1);
+ MapWindowPoints(chrome::HWNDForWidget(widget_), HWND_DESKTOP, &screen_pt, 1);
MiniContextMenuParams ipc_params;
ipc_params.screen_x = screen_pt.x;
@@ -750,8 +777,9 @@ bool ExternalTabContainerWin::PreHandleKeyboardEvent(
void ExternalTabContainerWin::HandleKeyboardEvent(
content::WebContents* source,
const NativeWebKeyboardEvent& event) {
- ProcessUnhandledKeyStroke(event.os_event.hwnd, event.os_event.message,
- event.os_event.wParam, event.os_event.lParam);
+ const MSG& message = MessageFromKeyboardEvent(event);
+ ProcessUnhandledKeyStroke(message.hwnd, message.message,
+ message.wParam, message.lParam);
}
void ExternalTabContainerWin::BeforeUnloadFired(WebContents* tab,
@@ -950,30 +978,23 @@ void ExternalTabContainerWin::Observe(
}
////////////////////////////////////////////////////////////////////////////////
-// ExternalTabContainer, views::NativeWidgetWin overrides:
-
-bool ExternalTabContainerWin::PreHandleMSG(UINT message,
- WPARAM w_param,
- LPARAM l_param,
- LRESULT* result) {
- if (message == WM_DESTROY) {
- prop_.reset();
- Uninitialize();
- }
- return false;
+// WidgetObserver overrides:
+
+void ExternalTabContainerWin::OnWidgetCreated(views::Widget* widget) {
+ DCHECK_EQ(widget_, widget);
+ // Grab a reference here which will be released in OnWidgetDestroyed.
+ AddRef();
}
-void ExternalTabContainerWin::PostHandleMSG(UINT message,
- WPARAM w_param,
- LPARAM l_param) {
- // Grab a reference here which will be released in OnFinalMessage
- if (message == WM_CREATE)
- AddRef();
+void ExternalTabContainerWin::OnWidgetDestroying(views::Widget* widget) {
+ DCHECK_EQ(widget_, widget);
+ Uninitialize();
+ prop_.reset();
}
-void ExternalTabContainerWin::OnFinalMessage(HWND window) {
- GetWidget()->OnNativeWidgetDestroyed();
- // Release the reference which we grabbed in WM_CREATE.
+void ExternalTabContainerWin::OnWidgetDestroyed(views::Widget* widget) {
+ DCHECK_EQ(widget_, static_cast<views::Widget*>(NULL));
+ // Release the reference which we grabbed in OnWidgetCreated.
Release();
}
@@ -1144,7 +1165,7 @@ void ExternalTabContainerWin::LoadAccelerators() {
CopyAcceleratorTable(accelerator_table, accelerators, count);
- focus_manager_ = GetWidget()->GetFocusManager();
+ focus_manager_ = widget_->GetFocusManager();
DCHECK(focus_manager_);
// Let's fill our own accelerator table.
@@ -1222,7 +1243,7 @@ void ExternalTabContainerWin::SetupExternalTabView() {
layout->AddView(info_bar_container);
layout->StartRow(1, 0);
layout->AddView(tab_contents_container_);
- GetWidget()->SetContentsView(external_tab_view_);
+ widget_->SetContentsView(external_tab_view_);
// Note that SetWebContents must be called after AddChildView is called
tab_contents_container_->SetWebContents(web_contents());
}
@@ -1236,17 +1257,13 @@ ExternalTabContainer* ExternalTabContainer::Create(
// static
ExternalTabContainer* ExternalTabContainer::GetContainerForTab(
- HWND tab_window) {
- HWND parent_window = ::GetParent(tab_window);
- if (!::IsWindow(parent_window)) {
+ content::WebContents* web_contents) {
+ HWND parent_window = chrome::HWNDForNativeWindow(
+ web_contents->GetView()->GetTopLevelNativeWindow());
+ if (!::IsWindow(parent_window))
return NULL;
- }
- if (!ExternalTabContainerWin::IsExternalTabContainer(parent_window)) {
- return NULL;
- }
- ExternalTabContainer* container = reinterpret_cast<ExternalTabContainer*>(
- ViewProp::GetValue(parent_window, kWindowObjectKey));
- return container;
+ return reinterpret_cast<ExternalTabContainerWin*>(
+ ui::ViewProp::GetValue(parent_window, kWindowObjectKey));
}
// static
@@ -1283,6 +1300,6 @@ WebContents* TemporaryPopupExternalTabContainerWin::OpenURLFromTab(
WebContents* new_contents =
ExternalTabContainerWin::OpenURLFromTab(source, forward_params);
// support only one navigation for a dummy tab before it is killed.
- ::DestroyWindow(GetNativeView());
+ widget_->CloseNow();
return new_contents;
}
diff --git a/chrome/browser/ui/views/external_tab_container_win.h b/chrome/browser/ui/views/external_tab_container_win.h
index 3d06fec..139db42 100644
--- a/chrome/browser/ui/views/external_tab_container_win.h
+++ b/chrome/browser/ui/views/external_tab_container_win.h
@@ -25,7 +25,7 @@
#include "content/public/browser/web_contents_delegate.h"
#include "content/public/browser/web_contents_observer.h"
#include "ui/base/accelerators/accelerator.h"
-#include "ui/views/widget/native_widget_win.h"
+#include "ui/views/widget/widget_observer.h"
class AutomationProvider;
class Browser;
@@ -39,7 +39,9 @@ class ViewProp;
}
namespace views {
+class View;
class WebView;
+class Widget;
}
// This class serves as the container window for an external tab.
@@ -50,7 +52,7 @@ class ExternalTabContainerWin : public ExternalTabContainer,
public content::WebContentsDelegate,
public content::WebContentsObserver,
public content::NotificationObserver,
- public views::NativeWidgetWin,
+ public views::WidgetObserver,
public ui::AcceleratorTarget,
public InfoBarContainer::Delegate,
public BlockedContentTabHelperDelegate {
@@ -79,9 +81,10 @@ class ExternalTabContainerWin : public ExternalTabContainer,
virtual void Uninitialize() OVERRIDE;
virtual bool Reinitialize(AutomationProvider* automation_provider,
AutomationResourceMessageFilter* filter,
- gfx::NativeWindow parent_window) OVERRIDE;
+ HWND parent_window) OVERRIDE;
virtual content::WebContents* GetWebContents() const OVERRIDE;
- virtual gfx::NativeView GetExternalTabNativeView() const OVERRIDE;
+ virtual HWND GetExternalTabHWND() const OVERRIDE;
+ virtual HWND GetContentHWND() const OVERRIDE;
virtual void SetTabHandle(int handle) OVERRIDE;
virtual int GetTabHandle() const OVERRIDE;
virtual bool ExecuteContextMenuCommand(int command) OVERRIDE;
@@ -90,16 +93,6 @@ class ExternalTabContainerWin : public ExternalTabContainer,
virtual void FocusThroughTabTraversal(bool reverse,
bool restore_focus_to_view) OVERRIDE;
- // A helper method that tests whether the given window is an
- // ExternalTabContainerWin window.
- static bool IsExternalTabContainer(HWND window);
-
- // A helper function that returns a pointer to the ExternalTabContainerWin
- // instance associated with a native view. Returns NULL if the window
- // is not an ExternalTabContainerWin.
- static ExternalTabContainer* GetExternalContainerFromNativeWindow(
- gfx::NativeView native_window);
-
// Overridden from content::WebContentsDelegate:
virtual content::WebContents* OpenURLFromTab(
content::WebContents* source,
@@ -219,15 +212,10 @@ class ExternalTabContainerWin : public ExternalTabContainer,
protected:
virtual ~ExternalTabContainerWin();
- // Overridden from views::NativeWidgetWin:
- virtual bool PreHandleMSG(UINT message,
- WPARAM w_param,
- LPARAM l_param,
- LRESULT* result) OVERRIDE;
- virtual void PostHandleMSG(UINT message,
- WPARAM w_param,
- LPARAM l_param) OVERRIDE;
- virtual void OnFinalMessage(HWND window);
+ // WidgetObserver overrides.
+ virtual void OnWidgetCreated(views::Widget* widget) OVERRIDE;
+ virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
+ virtual void OnWidgetDestroyed(views::Widget* widget) OVERRIDE;
bool InitNavigationInfo(NavigationInfo* nav_info,
content::NavigationType nav_type,
@@ -257,6 +245,7 @@ class ExternalTabContainerWin : public ExternalTabContainer,
// ExternalTabContainerWin.
void SetupExternalTabView();
+ views::Widget* widget_;
scoped_ptr<content::WebContents> web_contents_;
scoped_refptr<AutomationProvider> automation_;
@@ -284,6 +273,11 @@ class ExternalTabContainerWin : public ExternalTabContainer,
// whether top level URL requests are to be handled by the automation client.
bool handle_top_level_requests_;
+ // Set to true if the host needs to get notified of all top level navigations
+ // in this page. This typically applies to hosts which would render the new
+ // page without chrome frame.
+ bool route_all_top_level_navigations_;
+
// Contains ExternalTabContainers that have not been connected to as yet.
static base::LazyInstance<PendingTabs> pending_tabs_;
@@ -322,11 +316,6 @@ class ExternalTabContainerWin : public ExternalTabContainer,
IPC::Message* unload_reply_message_;
- // set to true if the host needs to get notified of all top level navigations
- // in this page. This typically applies to hosts which would render the new
- // page without chrome frame.
- bool route_all_top_level_navigations_;
-
scoped_ptr<ui::ViewProp> prop_;
// if this tab is a popup
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 2873e98..1860b28 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -311,8 +311,8 @@
'browser/automation/automation_util.h',
'browser/automation/automation_window_tracker.cc',
'browser/automation/automation_window_tracker.h',
- 'browser/automation/chrome_frame_automation_provider.cc',
- 'browser/automation/chrome_frame_automation_provider.h',
+ 'browser/automation/chrome_frame_automation_provider_win.cc',
+ 'browser/automation/chrome_frame_automation_provider_win.h',
'browser/automation/testing_automation_provider.cc',
'browser/automation/testing_automation_provider.h',
'browser/automation/testing_automation_provider_aura.cc',
@@ -2578,9 +2578,6 @@
}],
['use_aura==1', {
'sources/': [
- ['exclude', '^browser/automation/automation_provider_win.cc'],
- ['exclude', '^browser/automation/chrome_frame_automation_provider.cc'],
- ['exclude', '^browser/automation/chrome_frame_automation_provider.h'],
['exclude', '^browser/automation/testing_automation_provider_win.cc'],
['exclude', '^browser/google/google_update_win.cc'],
['exclude', '^browser/google/google_update_win.h'],
@@ -2604,6 +2601,7 @@
'conditions': [
['OS=="win"', {
'sources/': [
+ ['exclude', '^browser/automation/automation_provider_aura.cc'],
['exclude', '^browser/background/background_mode_manager_aura.cc'],
['exclude', '^browser/fullscreen_ash.cc'],
['exclude', '^browser/lifetime/application_lifetime_win.cc'],
diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi
index bc2185d..3d14c63 100644
--- a/chrome/chrome_browser_ui.gypi
+++ b/chrome/chrome_browser_ui.gypi
@@ -2427,8 +2427,6 @@
['exclude', '^browser/ui/views/certificate_viewer_win.cc'],
['exclude', '^browser/ui/views/dropdown_bar_host_win.cc'],
['exclude', '^browser/ui/views/external_protocol_dialog.cc'],
- ['exclude', '^browser/ui/views/external_tab_container_win.cc'],
- ['exclude', '^browser/ui/views/external_tab_container_win.h'],
['exclude', '^browser/ui/views/find_bar_host_win.cc'],
['exclude', '^browser/ui/views/frame/browser_frame_win.cc'],
['exclude', '^browser/ui/views/frame/browser_frame_win.h'],
diff --git a/chrome/chrome_installer.gypi b/chrome/chrome_installer.gypi
index 6c5d7ec..f3da62d 100644
--- a/chrome/chrome_installer.gypi
+++ b/chrome/chrome_installer.gypi
@@ -374,7 +374,7 @@
'branding_dir_100': 'app/theme/default_100_percent/chromium',
},
}],
- ['use_aura==1 or target_arch=="x64"', {
+ ['target_arch=="x64"', {
'dependencies!': [
'../chrome_frame/chrome_frame.gyp:chrome_tab_idl',
'../chrome_frame/chrome_frame.gyp:npchrome_frame',
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index 56805e2..72d0df1 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -508,8 +508,8 @@
'browser/autofill/wallet/wallet_service_url_unittest.cc',
'browser/autofill/wallet/wallet_test_util.cc',
'browser/autofill/wallet/wallet_test_util.h',
- 'browser/automation/automation_provider_unittest.cc',
'browser/automation/automation_tab_helper_unittest.cc',
+ 'browser/automation/chrome_frame_automation_provider_win_unittest.cc',
'browser/background/background_application_list_model_unittest.cc',
'browser/background/background_contents_service_unittest.cc',
'browser/background/background_mode_manager_unittest.cc',
@@ -1823,7 +1823,6 @@
'../ui/aura/aura.gyp:aura_test_support',
],
'sources/': [
- ['exclude', '^browser/automation/automation_provider_unittest.cc'],
['exclude', '^browser/ui/views/extensions/browser_action_drag_data_unittest.cc'],
['exclude', '^browser/ui/views/bookmarks/bookmark_editor_view_unittest.cc'],
['exclude', '^browser/ui/panels/display_settings_provider_win_unittest.cc'],
diff --git a/chrome/common/automation_messages.h b/chrome/common/automation_messages.h
index 0f084dc..2f908f6 100644
--- a/chrome/common/automation_messages.h
+++ b/chrome/common/automation_messages.h
@@ -53,8 +53,10 @@ IPC_STRUCT_BEGIN(AutomationURLResponse)
IPC_STRUCT_MEMBER(uint64, upload_size)
IPC_STRUCT_END()
+#if defined(OS_WIN)
+
IPC_STRUCT_BEGIN(ExternalTabSettings)
- IPC_STRUCT_MEMBER(gfx::NativeWindow, parent)
+ IPC_STRUCT_MEMBER(HWND, parent)
IPC_STRUCT_MEMBER(gfx::Rect, dimensions)
IPC_STRUCT_MEMBER(unsigned int, style)
IPC_STRUCT_MEMBER(bool, is_incognito)
@@ -66,6 +68,8 @@ IPC_STRUCT_BEGIN(ExternalTabSettings)
IPC_STRUCT_MEMBER(bool, route_all_top_level_navigations)
IPC_STRUCT_END()
+#endif // defined(OS_WIN)
+
IPC_STRUCT_BEGIN(NavigationInfo)
IPC_STRUCT_MEMBER(int, navigation_type)
IPC_STRUCT_MEMBER(int, relative_offset)
@@ -120,7 +124,7 @@ IPC_STRUCT_BEGIN(AttachExternalTabParams)
IPC_STRUCT_MEMBER(std::string, profile_name)
IPC_STRUCT_END()
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
IPC_STRUCT_BEGIN(Reposition_Params)
IPC_STRUCT_MEMBER(HWND, window)
diff --git a/chrome/common/automation_messages_internal.h b/chrome/common/automation_messages_internal.h
index 00167ee..a9ee3dc 100644
--- a/chrome/common/automation_messages_internal.h
+++ b/chrome/common/automation_messages_internal.h
@@ -251,18 +251,18 @@ IPC_MESSAGE_CONTROL3(AutomationMsg_DEPRECATED_WindowKeyPress,
int,
int,
int)
-
+#if defined(OS_WIN)
// This message notifies the AutomationProvider to create a tab which is
// hosted by an external process.
// Request:
// ExternalTabSettings - settings for external tab
IPC_SYNC_MESSAGE_CONTROL1_4(AutomationMsg_CreateExternalTab,
ExternalTabSettings /* settings*/,
- gfx::NativeWindow /* Tab container window */,
- gfx::NativeWindow /* Tab window */,
+ HWND /* Tab container window */,
+ HWND /* Tab window */,
int /* Handle to the new tab */,
int /* Session Id of the new tab */)
-
+#endif // defined(OS_WIN)
// This message notifies the AutomationProvider to navigate to a specified
// url in the external tab with given handle. The first parameter is the
// handle to the tab resource. The second parameter is the target url.
@@ -557,7 +557,7 @@ IPC_MESSAGE_ROUTED2(AutomationMsg_NavigationFailed,
int,
GURL)
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
// This message is an outgoing message from an automation client to Chrome.
// It is used to reposition a chrome tab window.
IPC_MESSAGE_CONTROL2(AutomationMsg_TabReposition,
@@ -717,17 +717,17 @@ IPC_SYNC_MESSAGE_CONTROL2_1(
IPC_MESSAGE_ROUTED1(AutomationMsg_AttachExternalTab,
AttachExternalTabParams)
-
+#if defined(OS_WIN)
// Sent when the automation client connects to an existing tab.
IPC_SYNC_MESSAGE_CONTROL3_4(AutomationMsg_ConnectExternalTab,
uint64 /* cookie */,
bool /* allow/block tab*/,
- gfx::NativeWindow /* parent window */,
- gfx::NativeWindow /* Tab container window */,
- gfx::NativeWindow /* Tab window */,
+ HWND /* parent window */,
+ HWND /* Tab container window */,
+ HWND /* Tab window */,
int /* Handle to the new tab */,
int /* Session Id of the new tab */)
-
+#endif // defined(OS_WIN)
// Simulate an end of session. Normally this happens when the user
// shuts down the machine or logs off.
// Request:
diff --git a/chrome/test/automation/automation_proxy.cc b/chrome/test/automation/automation_proxy.cc
index 8371d74..8a0ed36 100644
--- a/chrome/test/automation/automation_proxy.cc
+++ b/chrome/test/automation/automation_proxy.cc
@@ -376,31 +376,6 @@ bool AutomationProxy::OpenNewBrowserWindow(Browser::Type type, bool show) {
show));
}
-scoped_refptr<TabProxy> AutomationProxy::CreateExternalTab(
- const ExternalTabSettings& settings,
- gfx::NativeWindow* external_tab_container,
- gfx::NativeWindow* tab) {
- int handle = 0;
- int session_id = 0;
- bool succeeded =
- Send(new AutomationMsg_CreateExternalTab(settings,
- external_tab_container,
- tab,
- &handle,
- &session_id));
- if (!succeeded) {
- return NULL;
- }
-
-#if defined(OS_WIN) && !defined(USE_AURA)
- DCHECK(IsWindow(*external_tab_container));
-#else // defined(OS_WIN)
- DCHECK(*external_tab_container);
-#endif // defined(OS_WIN)
- DCHECK(tracker_->GetResource(handle) == NULL);
- return new TabProxy(this, tracker_.get(), handle);
-}
-
template <class T> scoped_refptr<T> AutomationProxy::ProxyObjectFromHandle(
int handle) {
if (!handle)
diff --git a/chrome/test/automation/automation_proxy.h b/chrome/test/automation/automation_proxy.h
index 7f426cc..788a3dc 100644
--- a/chrome/test/automation/automation_proxy.h
+++ b/chrome/test/automation/automation_proxy.h
@@ -181,14 +181,6 @@ class AutomationProxy : public IPC::Listener, public AutomationMessageSender {
// the tracker.
virtual void InvalidateHandle(const IPC::Message& message);
- // Creates a tab that can hosted in an external process. The function
- // returns a TabProxy representing the tab as well as a window handle
- // that can be reparented in another process.
- scoped_refptr<TabProxy> CreateExternalTab(
- const ExternalTabSettings& settings,
- gfx::NativeWindow* external_tab_container,
- gfx::NativeWindow* tab);
-
base::TimeDelta action_timeout() const {
return action_timeout_;
}
diff --git a/chrome/test/automation/tab_proxy.cc b/chrome/test/automation/tab_proxy.cc
index a883070..2dcb0dd 100644
--- a/chrome/test/automation/tab_proxy.cc
+++ b/chrome/test/automation/tab_proxy.cc
@@ -385,7 +385,7 @@ bool TabProxy::CaptureEntirePageAsPNG(const base::FilePath& path) {
path, &error);
}
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
void TabProxy::Reposition(HWND window, HWND window_insert_after, int left,
int top, int width, int height, int flags,
HWND parent_window) {
diff --git a/chrome_frame/test/chrome_frame_test_utils.cc b/chrome_frame/test/chrome_frame_test_utils.cc
index 6eae23f..5e77f93 100644
--- a/chrome_frame/test/chrome_frame_test_utils.cc
+++ b/chrome_frame/test/chrome_frame_test_utils.cc
@@ -46,7 +46,8 @@ const DWORD kCrashServicePipeDesiredAccess = FILE_READ_DATA |
const DWORD kCrashServicePipeFlagsAndAttributes = SECURITY_IDENTIFICATION |
SECURITY_SQOS_PRESENT;
-const int kCrashServiceStartupTimeoutMs = 500;
+const int kCrashServiceDetectTimeoutMs = 500;
+const int kCrashServiceStartupTimeoutMs = 1000;
const wchar_t kIEImageName[] = L"iexplore.exe";
const wchar_t kIEBrokerImageName[] = L"ieuser.exe";
@@ -596,7 +597,7 @@ bool DetectRunningCrashService(int timeout_ms) {
}
base::ProcessHandle StartCrashService() {
- if (DetectRunningCrashService(kCrashServiceStartupTimeoutMs)) {
+ if (DetectRunningCrashService(kCrashServiceDetectTimeoutMs)) {
VLOG(1) << "crash_service.exe is already running. We will use the "
"existing process and leave it running after tests complete.";
return NULL;
diff --git a/content/common/content_message_generator.cc b/content/common/content_message_generator.cc
index a86fb17..2e2b5a6 100644
--- a/content/common/content_message_generator.cc
+++ b/content/common/content_message_generator.cc
@@ -14,30 +14,6 @@
#include "ipc/struct_destructor_macros.h"
#include "content/common/content_message_generator.h"
-#if defined(USE_AURA) && defined(OS_WIN)
-#include "ui/gfx/native_widget_types.h"
-
-namespace IPC {
-// TODO(beng): Figure out why this is needed, fix that issue and remove
-// this. Brett and I were unable to figure out why, but he
-// thought this should be harmless.
-template <>
-struct ParamTraits<gfx::PluginWindowHandle> {
- typedef gfx::PluginWindowHandle param_type;
- static void Write(Message* m, const param_type& p) {
- m->WriteUInt32(reinterpret_cast<uint32>(p));
- }
- static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
- DCHECK_EQ(sizeof(param_type), sizeof(uint32));
- return m->ReadUInt32(iter, reinterpret_cast<uint32*>(r));
- }
- static void Log(const param_type& p, std::string* l) {
- l->append(StringPrintf("0x%X", p));
- }
-};
-} // namespace IPC
-#endif
-
// Generate param traits write methods.
#include "ipc/param_traits_write_macros.h"
namespace IPC {
diff --git a/ipc/ipc_message_utils.h b/ipc/ipc_message_utils.h
index fc72210..c775d8d 100644
--- a/ipc/ipc_message_utils.h
+++ b/ipc/ipc_message_utils.h
@@ -475,6 +475,13 @@ struct SimilarTypeTraits<base::PlatformFileError> {
typedef int Type;
};
+#if defined(OS_WIN)
+template <>
+struct SimilarTypeTraits<HWND> {
+ typedef HANDLE Type;
+};
+#endif // defined(OS_WIN)
+
template <>
struct IPC_EXPORT ParamTraits<base::Time> {
typedef base::Time param_type;
diff --git a/ui/views/widget/native_widget_delegate.h b/ui/views/widget/native_widget_delegate.h
index 40636a2..40bdedc 100644
--- a/ui/views/widget/native_widget_delegate.h
+++ b/ui/views/widget/native_widget_delegate.h
@@ -28,6 +28,7 @@ class ScrollEvent;
namespace views {
class InputMethod;
+class Widget;
namespace internal {
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index a22691d..9f0bfbc 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -1026,6 +1026,8 @@ void Widget::OnNativeWidgetCreated() {
widget_delegate_->GetAccessibleWindowState());
native_widget_->InitModalType(widget_delegate_->GetModalType());
+
+ FOR_EACH_OBSERVER(WidgetObserver, observers_, OnWidgetCreated(this));
}
void Widget::OnNativeWidgetDestroying() {
@@ -1040,6 +1042,7 @@ void Widget::OnNativeWidgetDestroying() {
}
void Widget::OnNativeWidgetDestroyed() {
+ FOR_EACH_OBSERVER(WidgetObserver, observers_, OnWidgetDestroyed(this));
widget_delegate_->DeleteDelegate();
widget_delegate_ = NULL;
native_widget_destroyed_ = true;
diff --git a/ui/views/widget/widget_observer.h b/ui/views/widget/widget_observer.h
index 42f45b3..e156ef8 100644
--- a/ui/views/widget/widget_observer.h
+++ b/ui/views/widget/widget_observer.h
@@ -23,11 +23,19 @@ class VIEWS_EXPORT WidgetObserver {
// CloseNow()).
virtual void OnWidgetClosing(Widget* widget) {}
+ // Invoked after notification is received from the event loop that the native
+ // widget has been created.
+ virtual void OnWidgetCreated(Widget* widget) {}
+
// The destroying event occurs immediately before the widget is destroyed.
// This typically occurs asynchronously with respect the the close request, as
// a result of a later invocation from the event loop.
virtual void OnWidgetDestroying(Widget* widget) {}
+ // Invoked after notification is received from the event loop that the native
+ // widget has been destroyed.
+ virtual void OnWidgetDestroyed(Widget* widget) {}
+
virtual void OnWidgetVisibilityChanged(Widget* widget, bool visible) {}
virtual void OnWidgetActivationChanged(Widget* widget, bool active) {}