diff options
author | evan@chromium.org <evan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-08 01:44:20 +0000 |
---|---|---|
committer | evan@chromium.org <evan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-08 01:44:20 +0000 |
commit | 0e9f4ee56fac076c7128c746d48a53720ea3f4e2 (patch) | |
tree | ed0583cca018614dbe49292ad4c4720ece31b571 /chrome | |
parent | 18ad9e8b0e3f747daf065f9581450cd51d0b4349 (diff) | |
download | chromium_src-0e9f4ee56fac076c7128c746d48a53720ea3f4e2.zip chromium_src-0e9f4ee56fac076c7128c746d48a53720ea3f4e2.tar.gz chromium_src-0e9f4ee56fac076c7128c746d48a53720ea3f4e2.tar.bz2 |
posix: implement AutomationWindowTracker.
Review URL: http://codereview.chromium.org/62135
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13331 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/automation/automation_provider.cc | 14 | ||||
-rw-r--r-- | chrome/browser/automation/automation_provider.h | 4 | ||||
-rw-r--r-- | chrome/browser/automation/automation_window_tracker.h | 35 | ||||
-rw-r--r-- | chrome/common/temp_scaffolding_stubs.cc | 7 |
4 files changed, 37 insertions, 23 deletions
diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc index 8a9aa98..a7853be 100644 --- a/chrome/browser/automation/automation_provider.cc +++ b/chrome/browser/automation/automation_provider.cc @@ -749,9 +749,9 @@ AutomationProvider::AutomationProvider(Profile* profile) reply_message_(NULL) { browser_tracker_.reset(new AutomationBrowserTracker(this)); tab_tracker_.reset(new AutomationTabTracker(this)); + window_tracker_.reset(new AutomationWindowTracker(this)); #if defined(OS_WIN) // TODO(port): Enable as the trackers get ported. - window_tracker_.reset(new AutomationWindowTracker(this)); autocomplete_edit_tracker_.reset( new AutomationAutocompleteEditTracker(this)); cwindow_tracker_.reset(new AutomationConstrainedWindowTracker(this)); @@ -1705,14 +1705,9 @@ void AutomationProvider::GetTabTitle(int handle, int* title_string_size, } void AutomationProvider::HandleUnused(const IPC::Message& message, int handle) { -#if defined(OS_WIN) if (window_tracker_->ContainsHandle(handle)) { window_tracker_->Remove(window_tracker_->GetResource(handle)); } -#else - // TODO(port): Enable when window_tracker is ported. - NOTIMPLEMENTED(); -#endif } void AutomationProvider::OnChannelError() { @@ -2114,6 +2109,7 @@ void AutomationProvider::OpenNewBrowserWindow(int show_command) { if (show_command != SW_HIDE) browser->window()->Show(); } +#endif // defined(OS_WIN) void AutomationProvider::GetWindowForBrowser(int browser_handle, bool* success, @@ -2123,13 +2119,15 @@ void AutomationProvider::GetWindowForBrowser(int browser_handle, if (browser_tracker_->ContainsHandle(browser_handle)) { Browser* browser = browser_tracker_->GetResource(browser_handle); - HWND hwnd = reinterpret_cast<HWND>(browser->window()->GetNativeHandle()); + gfx::NativeWindow win = browser->window()->GetNativeHandle(); // Add() returns the existing handle for the resource if any. - *handle = window_tracker_->Add(hwnd); + *handle = window_tracker_->Add(win); *success = true; } } +#if defined(OS_WIN) +// TODO(port): Remove windowsisms. void AutomationProvider::GetAutocompleteEditForBrowser( int browser_handle, bool* success, diff --git a/chrome/browser/automation/automation_provider.h b/chrome/browser/automation/automation_provider.h index 1bf0892..0c4f876 100644 --- a/chrome/browser/automation/automation_provider.h +++ b/chrome/browser/automation/automation_provider.h @@ -18,6 +18,7 @@ #include "base/basictypes.h" #include "chrome/browser/automation/automation_browser_tracker.h" #include "chrome/browser/automation/automation_tab_tracker.h" +#include "chrome/browser/automation/automation_window_tracker.h" #include "chrome/browser/browser_list.h" #include "chrome/browser/history/history.h" #include "chrome/browser/tab_contents/navigation_entry.h" @@ -31,7 +32,6 @@ // TODO(port): enable these. #include "chrome/browser/automation/automation_autocomplete_edit_tracker.h" #include "chrome/browser/automation/automation_constrained_window_tracker.h" -#include "chrome/browser/automation/automation_window_tracker.h" enum AutomationMsg_NavigationResponseValues; #endif @@ -440,10 +440,10 @@ class AutomationProvider : public base::RefCounted<AutomationProvider>, scoped_ptr<NotificationObserver> dom_inspector_observer_; scoped_ptr<AutomationBrowserTracker> browser_tracker_; scoped_ptr<AutomationTabTracker> tab_tracker_; + scoped_ptr<AutomationWindowTracker> window_tracker_; #if defined(OS_WIN) // TODO(port): Enable as trackers get ported. scoped_ptr<AutomationConstrainedWindowTracker> cwindow_tracker_; - scoped_ptr<AutomationWindowTracker> window_tracker_; scoped_ptr<AutomationAutocompleteEditTracker> autocomplete_edit_tracker_; #endif scoped_ptr<NavigationControllerRestoredObserver> restore_tracker_; diff --git a/chrome/browser/automation/automation_window_tracker.h b/chrome/browser/automation/automation_window_tracker.h index decaabb4..cc70dd8 100644 --- a/chrome/browser/automation/automation_window_tracker.h +++ b/chrome/browser/automation/automation_window_tracker.h @@ -5,26 +5,49 @@ #ifndef CHROME_BROWSER_AUTOMATION_AUTOMATION_WINDOW_TRACKER_H__ #define CHROME_BROWSER_AUTOMATION_AUTOMATION_WINDOW_TRACKER_H__ +#include "base/gfx/native_widget_types.h" +#include "build/build_config.h" #include "chrome/browser/automation/automation_resource_tracker.h" + +#if defined(OS_WIN) +// Since HWNDs aren't pointers, we can't have NativeWindow +// be directly a pointer and so must explicitly declare the Source types +// for it. #include "chrome/views/widget/hwnd_notification_source.h" +#elif defined(OS_LINUX) || defined(OS_MACOSX) +// But on Linux and Mac, it is a pointer so this definition suffices. +template<> +class Source<gfx::NativeWindow> : public NotificationSource { + public: + explicit Source(gfx::NativeWindow win) : NotificationSource(win) {} + + explicit Source(const NotificationSource& other) + : NotificationSource(other) {} + + gfx::NativeWindow operator->() const { return ptr(); } + gfx::NativeWindow ptr() const { return static_cast<gfx::NativeWindow>(ptr_); } +}; +#endif class AutomationWindowTracker - : public AutomationResourceTracker<HWND> { + : public AutomationResourceTracker<gfx::NativeWindow> { public: AutomationWindowTracker(IPC::Message::Sender* automation) - : AutomationResourceTracker(automation) { } + : AutomationResourceTracker<gfx::NativeWindow>(automation) { } virtual ~AutomationWindowTracker() { ClearAllMappings(); } - virtual void AddObserver(HWND resource) { + virtual void AddObserver(gfx::NativeWindow resource) { NotificationService::current()->AddObserver( - this, NotificationType::WINDOW_CLOSED, Source<HWND>(resource)); + this, NotificationType::WINDOW_CLOSED, + Source<gfx::NativeWindow>(resource)); } - virtual void RemoveObserver(HWND resource) { + virtual void RemoveObserver(gfx::NativeWindow resource) { NotificationService::current()->RemoveObserver( - this, NotificationType::WINDOW_CLOSED, Source<HWND>(resource)); + this, NotificationType::WINDOW_CLOSED, + Source<gfx::NativeWindow>(resource)); } }; diff --git a/chrome/common/temp_scaffolding_stubs.cc b/chrome/common/temp_scaffolding_stubs.cc index 1ee64ea..ed1083c 100644 --- a/chrome/common/temp_scaffolding_stubs.cc +++ b/chrome/common/temp_scaffolding_stubs.cc @@ -68,13 +68,6 @@ void AutomationProvider::OpenNewBrowserWindow(int show_command) { NOTIMPLEMENTED(); } -void AutomationProvider::GetWindowForBrowser(int browser_handle, - bool* success, - int* handle) { - *success = false; - NOTIMPLEMENTED(); -} - void AutomationProvider::GetAutocompleteEditForBrowser( int browser_handle, bool* success, |