| 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;
|
| }
|
|
|