summaryrefslogtreecommitdiffstats
path: root/chrome/test/automation/browser_proxy.cc
diff options
context:
space:
mode:
authorstoyan@chromium.org <stoyan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-28 19:12:46 +0000
committerstoyan@chromium.org <stoyan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-28 19:12:46 +0000
commit802376eb9aacca5284b76da93face73a9488bdb6 (patch)
tree705226a6750fed9a1429aaf07fe9c0a03303c759 /chrome/test/automation/browser_proxy.cc
parent319d4ae6c8b2236fa7e0acf218c533a5a93af5a6 (diff)
downloadchromium_src-802376eb9aacca5284b76da93face73a9488bdb6.zip
chromium_src-802376eb9aacca5284b76da93face73a9488bdb6.tar.gz
chromium_src-802376eb9aacca5284b76da93face73a9488bdb6.tar.bz2
Make automation proxy objects to ref_counted. That allows to process async notifications directly in channel background thread. Add support for listener-less ChannelProxy.
BUG=none TEST=none Review URL: http://codereview.chromium.org/113722 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17093 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test/automation/browser_proxy.cc')
-rw-r--r--chrome/test/automation/browser_proxy.cc56
1 files changed, 43 insertions, 13 deletions
diff --git a/chrome/test/automation/browser_proxy.cc b/chrome/test/automation/browser_proxy.cc
index 03a1e51..28dd022 100644
--- a/chrome/test/automation/browser_proxy.cc
+++ b/chrome/test/automation/browser_proxy.cc
@@ -112,25 +112,34 @@ bool BrowserProxy::GetActiveTabIndexWithTimeout(int* active_tab_index,
return succeeded;
}
-TabProxy* BrowserProxy::GetTab(int tab_index) const {
+scoped_refptr<TabProxy> BrowserProxy::GetTab(int tab_index) const {
if (!is_valid())
return NULL;
- int handle = 0;
+ int tab_handle = 0;
- sender_->Send(new AutomationMsg_Tab(0, handle_, tab_index, &handle));
- if (!handle)
+ sender_->Send(new AutomationMsg_Tab(0, handle_, tab_index, &tab_handle));
+ if (!tab_handle)
return NULL;
- return new TabProxy(sender_, tracker_, handle);
+ TabProxy* tab = static_cast<TabProxy*>(tracker_->GetResource(tab_handle));
+ if (!tab) {
+ tab = new TabProxy(sender_, tracker_, tab_handle);
+ tab->AddRef();
+ }
+
+ // Since there is no scoped_refptr::attach.
+ scoped_refptr<TabProxy> result;
+ result.swap(&tab);
+ return result;
}
-TabProxy* BrowserProxy::GetActiveTab() const {
+scoped_refptr<TabProxy> BrowserProxy::GetActiveTab() const {
return GetActiveTabWithTimeout(base::kNoTimeout, NULL);
}
-TabProxy* BrowserProxy::GetActiveTabWithTimeout(uint32 timeout_ms,
- bool* is_timeout) const {
+scoped_refptr<TabProxy> BrowserProxy::GetActiveTabWithTimeout(uint32 timeout_ms,
+ bool* is_timeout) const {
int active_tab_index;
if (!GetActiveTabIndexWithTimeout(&active_tab_index, timeout_ms, is_timeout))
return NULL;
@@ -365,9 +374,9 @@ bool BrowserProxy::SetBooleanPreference(const std::wstring& name,
return result;
}
-WindowProxy* BrowserProxy::GetWindow() const {
+scoped_refptr<WindowProxy> BrowserProxy::GetWindow() const {
if (!is_valid())
- return false;
+ return NULL;
bool handle_ok = false;
int window_handle = 0;
@@ -377,10 +386,20 @@ WindowProxy* BrowserProxy::GetWindow() const {
if (!handle_ok)
return NULL;
- return new WindowProxy(sender_, tracker_, window_handle);
+ WindowProxy* window =
+ static_cast<WindowProxy*>(tracker_->GetResource(window_handle));
+ if (!window) {
+ window = new WindowProxy(sender_, tracker_, window_handle);
+ window->AddRef();
+ }
+
+ // Since there is no scoped_refptr::attach.
+ scoped_refptr<WindowProxy> result;
+ result.swap(&window);
+ return result;
}
-AutocompleteEditProxy* BrowserProxy::GetAutocompleteEdit() {
+scoped_refptr<AutocompleteEditProxy> BrowserProxy::GetAutocompleteEdit() {
if (!is_valid())
return NULL;
@@ -393,5 +412,16 @@ AutocompleteEditProxy* BrowserProxy::GetAutocompleteEdit() {
if (!handle_ok)
return NULL;
- return new AutocompleteEditProxy(sender_, tracker_, autocomplete_edit_handle);
+ AutocompleteEditProxy* p = static_cast<AutocompleteEditProxy*>(
+ tracker_->GetResource(autocomplete_edit_handle));
+
+ if (!p) {
+ p = new AutocompleteEditProxy(sender_, tracker_, autocomplete_edit_handle);
+ p->AddRef();
+ }
+
+ // Since there is no scoped_refptr::attach.
+ scoped_refptr<AutocompleteEditProxy> result;
+ result.swap(&p);
+ return result;
}