Index: chrome/test/automation/browser_proxy.cc |
=================================================================== |
--- chrome/test/automation/browser_proxy.cc (revision 261647) |
+++ chrome/test/automation/browser_proxy.cc (working copy) |
@@ -1,339 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/test/automation/browser_proxy.h" |
- |
-#include <algorithm> |
- |
-#include "base/json/json_reader.h" |
-#include "base/logging.h" |
-#include "base/threading/platform_thread.h" |
-#include "base/time/time.h" |
-#include "chrome/common/automation_constants.h" |
-#include "chrome/common/automation_messages.h" |
-#include "chrome/test/automation/automation_proxy.h" |
-#include "chrome/test/automation/tab_proxy.h" |
-#include "chrome/test/automation/window_proxy.h" |
-#include "ui/gfx/point.h" |
- |
-using base::TimeDelta; |
-using base::TimeTicks; |
- |
-bool BrowserProxy::ActivateTab(int tab_index) { |
- if (!is_valid()) |
- return false; |
- |
- int activate_tab_response = -1; |
- |
- if (!sender_->Send(new AutomationMsg_ActivateTab( |
- handle_, tab_index, &activate_tab_response))) { |
- return false; |
- } |
- |
- if (activate_tab_response >= 0) |
- return true; |
- |
- return false; |
-} |
- |
-bool BrowserProxy::BringToFront() { |
- if (!is_valid()) |
- return false; |
- |
- bool succeeded = false; |
- |
- if (!sender_->Send(new AutomationMsg_BringBrowserToFront( |
- handle_, &succeeded))) { |
- return false; |
- } |
- |
- return succeeded; |
-} |
- |
-bool BrowserProxy::AppendTab(const GURL& tab_url) { |
- if (!is_valid()) |
- return false; |
- |
- int append_tab_response = -1; |
- |
- sender_->Send(new AutomationMsg_AppendTab(handle_, tab_url, |
- &append_tab_response)); |
- return append_tab_response >= 0; |
-} |
- |
-bool BrowserProxy::GetActiveTabIndex(int* active_tab_index) const { |
- if (!is_valid()) |
- return false; |
- |
- if (!active_tab_index) { |
- NOTREACHED(); |
- return false; |
- } |
- |
- int active_tab_index_response = -1; |
- |
- if (!sender_->Send(new AutomationMsg_ActiveTabIndex( |
- handle_, &active_tab_index_response))) { |
- return false; |
- } |
- |
- if (active_tab_index_response >= 0) { |
- *active_tab_index = active_tab_index_response; |
- return true; |
- } |
- |
- return false; |
-} |
- |
-scoped_refptr<TabProxy> BrowserProxy::GetTab(int tab_index) const { |
- if (!is_valid()) |
- return NULL; |
- |
- int tab_handle = 0; |
- |
- sender_->Send(new AutomationMsg_Tab(handle_, tab_index, &tab_handle)); |
- if (!tab_handle) |
- return NULL; |
- |
- 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; |
-} |
- |
-scoped_refptr<TabProxy> BrowserProxy::GetActiveTab() const { |
- int active_tab_index; |
- if (!GetActiveTabIndex(&active_tab_index)) |
- return NULL; |
- return GetTab(active_tab_index); |
-} |
- |
-bool BrowserProxy::GetTabCount(int* num_tabs) const { |
- if (!is_valid()) |
- return false; |
- |
- if (!num_tabs) { |
- NOTREACHED(); |
- return false; |
- } |
- |
- int tab_count_response = -1; |
- |
- if (!sender_->Send(new AutomationMsg_TabCount( |
- handle_, &tab_count_response))) { |
- return false; |
- } |
- |
- if (tab_count_response >= 0) { |
- *num_tabs = tab_count_response; |
- return true; |
- } |
- |
- return false; |
-} |
- |
-bool BrowserProxy::GetType(Browser::Type* type) const { |
- if (!is_valid()) |
- return false; |
- |
- if (!type) { |
- NOTREACHED(); |
- return false; |
- } |
- |
- int type_as_int; |
- if (!sender_->Send(new AutomationMsg_Type(handle_, &type_as_int))) |
- return false; |
- |
- *type = static_cast<Browser::Type>(type_as_int); |
- return true; |
-} |
- |
-bool BrowserProxy::ApplyAccelerator(int id) { |
- return RunCommandAsync(id); |
-} |
- |
-bool BrowserProxy::WaitForTabCountToBecome(int count) { |
- bool success = false; |
- if (!sender_->Send(new AutomationMsg_WaitForTabCountToBecome( |
- handle_, count, &success))) { |
- return false; |
- } |
- |
- return success; |
-} |
- |
-bool BrowserProxy::WaitForTabToBecomeActive(int tab, |
- base::TimeDelta wait_timeout) { |
- const TimeTicks start = TimeTicks::Now(); |
- while (TimeTicks::Now() - start < wait_timeout) { |
- base::PlatformThread::Sleep( |
- base::TimeDelta::FromMilliseconds(automation::kSleepTime)); |
- int active_tab; |
- if (GetActiveTabIndex(&active_tab) && active_tab == tab) |
- return true; |
- } |
- // If we get here, the active tab hasn't changed. |
- return false; |
-} |
- |
-bool BrowserProxy::IsFindWindowFullyVisible(bool* is_visible) { |
- if (!is_valid()) |
- return false; |
- |
- if (!is_visible) { |
- NOTREACHED(); |
- return false; |
- } |
- |
- return sender_->Send( |
- new AutomationMsg_FindWindowVisibility(handle_, is_visible)); |
-} |
- |
-bool BrowserProxy::RunCommandAsync(int browser_command) const { |
- if (!is_valid()) |
- return false; |
- |
- bool result = false; |
- |
- sender_->Send(new AutomationMsg_WindowExecuteCommandAsync(handle_, |
- browser_command, |
- &result)); |
- |
- return result; |
-} |
- |
-bool BrowserProxy::RunCommand(int browser_command) const { |
- if (!is_valid()) |
- return false; |
- |
- bool result = false; |
- |
- sender_->Send(new AutomationMsg_WindowExecuteCommand(handle_, |
- browser_command, |
- &result)); |
- |
- return result; |
-} |
- |
-bool BrowserProxy::TerminateSession() { |
- if (!is_valid()) |
- return false; |
- |
- bool result = false; |
- |
- sender_->Send(new AutomationMsg_TerminateSession(handle_, &result)); |
- |
- return result; |
-} |
- |
-scoped_refptr<WindowProxy> BrowserProxy::GetWindow() const { |
- if (!is_valid()) |
- return NULL; |
- |
- bool handle_ok = false; |
- int window_handle = 0; |
- |
- sender_->Send(new AutomationMsg_WindowForBrowser(handle_, &handle_ok, |
- &window_handle)); |
- if (!handle_ok) |
- return NULL; |
- |
- 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; |
-} |
- |
-bool BrowserProxy::SendJSONRequest(const std::string& request, |
- int timeout_ms, |
- std::string* response) { |
- if (!is_valid()) |
- return false; |
- |
- bool result = false; |
- if (!sender_->Send( |
- new AutomationMsg_SendJSONRequestWithBrowserHandle(handle_, |
- request, |
- response, |
- &result), |
- timeout_ms)) |
- return false; |
- return result; |
-} |
- |
-bool BrowserProxy::GetInitialLoadTimes(base::TimeDelta timeout, |
- float* min_start_time, |
- float* max_stop_time, |
- std::vector<float>* stop_times) { |
- std::string json_response; |
- const char* kJSONCommand = "{\"command\": \"GetInitialLoadTimes\"}"; |
- |
- *max_stop_time = 0; |
- *min_start_time = -1; |
- if (!SendJSONRequest( |
- kJSONCommand, timeout.InMilliseconds(), &json_response)) { |
- // Older browser versions do not support GetInitialLoadTimes. |
- // Fail gracefully and do not record them in this case. |
- return false; |
- } |
- std::string error; |
- scoped_ptr<base::Value> values(base::JSONReader::ReadAndReturnError( |
- json_response, base::JSON_ALLOW_TRAILING_COMMAS, NULL, &error)); |
- if (!error.empty() || values->GetType() != base::Value::TYPE_DICTIONARY) |
- return false; |
- |
- base::DictionaryValue* values_dict = |
- static_cast<base::DictionaryValue*>(values.get()); |
- |
- base::Value* tabs_value; |
- if (!values_dict->Get("tabs", &tabs_value) || |
- tabs_value->GetType() != base::Value::TYPE_LIST) |
- return false; |
- |
- base::ListValue* tabs_list = static_cast<base::ListValue*>(tabs_value); |
- |
- for (size_t i = 0; i < tabs_list->GetSize(); i++) { |
- float stop_ms = 0; |
- float start_ms = 0; |
- base::Value* tab_value; |
- base::DictionaryValue* tab_dict; |
- |
- if (!tabs_list->Get(i, &tab_value) || |
- tab_value->GetType() != base::Value::TYPE_DICTIONARY) |
- return false; |
- tab_dict = static_cast<base::DictionaryValue*>(tab_value); |
- |
- double temp; |
- if (!tab_dict->GetDouble("load_start_ms", &temp)) |
- return false; |
- start_ms = static_cast<float>(temp); |
- // load_stop_ms can only be null if WaitForInitialLoads did not run. |
- if (!tab_dict->GetDouble("load_stop_ms", &temp)) |
- return false; |
- stop_ms = static_cast<float>(temp); |
- |
- if (i == 0) |
- *min_start_time = start_ms; |
- |
- *min_start_time = std::min(start_ms, *min_start_time); |
- *max_stop_time = std::max(stop_ms, *max_stop_time); |
- stop_times->push_back(stop_ms); |
- } |
- std::sort(stop_times->begin(), stop_times->end()); |
- return true; |
-} |