summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorevan@chromium.org <evan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-08 01:44:20 +0000
committerevan@chromium.org <evan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-08 01:44:20 +0000
commit0e9f4ee56fac076c7128c746d48a53720ea3f4e2 (patch)
treeed0583cca018614dbe49292ad4c4720ece31b571 /chrome
parent18ad9e8b0e3f747daf065f9581450cd51d0b4349 (diff)
downloadchromium_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.cc14
-rw-r--r--chrome/browser/automation/automation_provider.h4
-rw-r--r--chrome/browser/automation/automation_window_tracker.h35
-rw-r--r--chrome/common/temp_scaffolding_stubs.cc7
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,