Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6641)

Unified Diff: chrome/test/automation/browser_proxy.cc

Issue 113722: Make automation proxy objects to ref_counted. That allows to process async no... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/automation/browser_proxy.h ('k') | chrome/test/automation/tab_proxy.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/automation/browser_proxy.cc
===================================================================
--- chrome/test/automation/browser_proxy.cc (revision 17078)
+++ chrome/test/automation/browser_proxy.cc (working copy)
@@ -112,25 +112,34 @@
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 @@
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 @@
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 @@
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;
}
« no previous file with comments | « chrome/test/automation/browser_proxy.h ('k') | chrome/test/automation/tab_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698