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

Unified Diff: chrome/test/chromedriver/web_view_impl.cc

Issue 12848005: [chromedriver] Separate stuff of chrome from chromedriver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments and fix compile error on mac. Created 7 years, 9 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/chromedriver/web_view_impl.h ('k') | chrome/test/chromedriver/web_view_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/chromedriver/web_view_impl.cc
diff --git a/chrome/test/chromedriver/web_view_impl.cc b/chrome/test/chromedriver/web_view_impl.cc
deleted file mode 100644
index 30db91b74cfb7dfd9c4c453a9520703aa17085db..0000000000000000000000000000000000000000
--- a/chrome/test/chromedriver/web_view_impl.cc
+++ /dev/null
@@ -1,438 +0,0 @@
-// Copyright (c) 2013 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/chromedriver/web_view_impl.h"
-
-#include "base/bind.h"
-#include "base/json/json_writer.h"
-#include "base/logging.h"
-#include "base/stringprintf.h"
-#include "base/values.h"
-#include "chrome/test/chromedriver/devtools_client_impl.h"
-#include "chrome/test/chromedriver/dom_tracker.h"
-#include "chrome/test/chromedriver/frame_tracker.h"
-#include "chrome/test/chromedriver/javascript_dialog_manager.h"
-#include "chrome/test/chromedriver/js.h"
-#include "chrome/test/chromedriver/navigation_tracker.h"
-#include "chrome/test/chromedriver/status.h"
-#include "chrome/test/chromedriver/ui_events.h"
-#include "chrome/test/chromedriver/web_view_delegate.h"
-
-namespace {
-
-Status GetContextIdForFrame(FrameTracker* tracker,
- const std::string& frame,
- int* context_id) {
- if (frame.empty()) {
- *context_id = 0;
- return Status(kOk);
- }
- Status status = tracker->GetContextIdForFrame(frame, context_id);
- if (status.IsError())
- return status;
- return Status(kOk);
-}
-
-const char* GetAsString(MouseEventType type) {
- switch (type) {
- case kPressedMouseEventType:
- return "mousePressed";
- case kReleasedMouseEventType:
- return "mouseReleased";
- case kMovedMouseEventType:
- return "mouseMoved";
- default:
- return "";
- }
-}
-
-const char* GetAsString(MouseButton button) {
- switch (button) {
- case kLeftMouseButton:
- return "left";
- case kMiddleMouseButton:
- return "middle";
- case kRightMouseButton:
- return "right";
- case kNoneMouseButton:
- return "none";
- default:
- return "";
- }
-}
-
-Status IsNotPendingNavigation(NavigationTracker* tracker,
- const std::string& frame_id,
- bool* is_not_pending) {
- bool is_pending;
- Status status = tracker->IsPendingNavigation(frame_id, &is_pending);
- if (status.IsError())
- return status;
- *is_not_pending = !is_pending;
- return Status(kOk);
-}
-
-const char* GetAsString(KeyEventType type) {
- switch (type) {
- case kKeyDownEventType:
- return "keyDown";
- case kKeyUpEventType:
- return "keyUp";
- case kRawKeyDownEventType:
- return "rawKeyDown";
- case kCharEventType:
- return "char";
- default:
- return "";
- }
-}
-
-} // namespace
-
-WebViewImpl::WebViewImpl(const std::string& id,
- DevToolsClient* client,
- WebViewDelegate* delegate,
- const CloserFunc& closer_func)
- : id_(id),
- dom_tracker_(new DomTracker(client)),
- frame_tracker_(new FrameTracker(client)),
- navigation_tracker_(new NavigationTracker(client)),
- dialog_manager_(new JavaScriptDialogManager(client)),
- client_(client),
- delegate_(delegate),
- closer_func_(closer_func) {}
-
-WebViewImpl::~WebViewImpl() {}
-
-std::string WebViewImpl::GetId() {
- return id_;
-}
-
-Status WebViewImpl::ConnectIfNecessary() {
- return client_->ConnectIfNecessary();
-}
-
-Status WebViewImpl::Close() {
- Status status = closer_func_.Run();
- if (status.IsOk())
- delegate_->OnWebViewClose(this);
- return status;
-}
-
-Status WebViewImpl::Load(const std::string& url) {
- base::DictionaryValue params;
- params.SetString("url", url);
- return client_->SendCommand("Page.navigate", params);
-}
-
-Status WebViewImpl::Reload() {
- base::DictionaryValue params;
- params.SetBoolean("ignoreCache", false);
- return client_->SendCommand("Page.reload", params);
-}
-
-Status WebViewImpl::EvaluateScript(const std::string& frame,
- const std::string& expression,
- scoped_ptr<base::Value>* result) {
- int context_id;
- Status status = GetContextIdForFrame(frame_tracker_.get(), frame,
- &context_id);
- if (status.IsError())
- return status;
- return internal::EvaluateScriptAndGetValue(
- client_.get(), context_id, expression, result);
-}
-
-Status WebViewImpl::CallFunction(const std::string& frame,
- const std::string& function,
- const base::ListValue& args,
- scoped_ptr<base::Value>* result) {
- std::string json;
- base::JSONWriter::Write(&args, &json);
- std::string expression = base::StringPrintf(
- "(%s).apply(null, [%s, %s])",
- kCallFunctionScript,
- function.c_str(),
- json.c_str());
- scoped_ptr<base::Value> temp_result;
- Status status = EvaluateScript(frame, expression, &temp_result);
- if (status.IsError())
- return status;
-
- return internal::ParseCallFunctionResult(*temp_result, result);
-}
-
-Status WebViewImpl::GetFrameByFunction(const std::string& frame,
- const std::string& function,
- const base::ListValue& args,
- std::string* out_frame) {
- int context_id;
- Status status = GetContextIdForFrame(frame_tracker_.get(), frame,
- &context_id);
- if (status.IsError())
- return status;
- int node_id;
- status = internal::GetNodeIdFromFunction(
- client_.get(), context_id, function, args, &node_id);
- if (status.IsError())
- return status;
- return dom_tracker_->GetFrameIdForNode(node_id, out_frame);
-}
-
-Status WebViewImpl::DispatchMouseEvents(const std::list<MouseEvent>& events) {
- for (std::list<MouseEvent>::const_iterator it = events.begin();
- it != events.end(); ++it) {
- base::DictionaryValue params;
- params.SetString("type", GetAsString(it->type));
- params.SetInteger("x", it->x);
- params.SetInteger("y", it->y);
- params.SetString("button", GetAsString(it->button));
- params.SetInteger("clickCount", it->click_count);
- Status status = client_->SendCommand("Input.dispatchMouseEvent", params);
- if (status.IsError())
- return status;
- }
- return Status(kOk);
-}
-
-Status WebViewImpl::DispatchKeyEvents(const std::list<KeyEvent>& events) {
- for (std::list<KeyEvent>::const_iterator it = events.begin();
- it != events.end(); ++it) {
- base::DictionaryValue params;
- params.SetString("type", GetAsString(it->type));
- if (it->modifiers & kNumLockKeyModifierMask) {
- params.SetBoolean("isKeypad", true);
- params.SetInteger("modifiers",
- it->modifiers & ~kNumLockKeyModifierMask);
- } else {
- params.SetInteger("modifiers", it->modifiers);
- }
- params.SetString("text", it->modified_text);
- params.SetString("unmodifiedText", it->unmodified_text);
- params.SetInteger("nativeVirtualKeyCode", it->key_code);
- params.SetInteger("windowsVirtualKeyCode", it->key_code);
- Status status = client_->SendCommand("Input.dispatchKeyEvent", params);
- if (status.IsError())
- return status;
- }
- return Status(kOk);
-}
-
-Status WebViewImpl::GetCookies(scoped_ptr<base::ListValue>* cookies) {
- base::DictionaryValue params;
- scoped_ptr<base::DictionaryValue> result;
- Status status = client_->SendCommandAndGetResult(
- "Page.getCookies", params, &result);
- if (status.IsError())
- return status;
- base::ListValue* cookies_tmp;
- if (!result->GetList("cookies", &cookies_tmp))
- return Status(kUnknownError, "DevTools didn't return cookies");
- cookies->reset(cookies_tmp->DeepCopy());
- return Status(kOk);
-}
-
-Status WebViewImpl::DeleteCookie(const std::string& name,
- const std::string& url) {
- base::DictionaryValue params;
- params.SetString("cookieName", name);
- params.SetString("url", url);
- return client_->SendCommand("Page.deleteCookie", params);
-}
-
-Status WebViewImpl::WaitForPendingNavigations(const std::string& frame_id) {
- std::string full_frame_id(frame_id);
- if (full_frame_id.empty()) {
- Status status = GetMainFrame(&full_frame_id);
- if (status.IsError())
- return status;
- }
- return client_->HandleEventsUntil(
- base::Bind(IsNotPendingNavigation, navigation_tracker_.get(),
- full_frame_id));
-}
-
-Status WebViewImpl::IsPendingNavigation(const std::string& frame_id,
- bool* is_pending) {
- std::string full_frame_id(frame_id);
- if (full_frame_id.empty()) {
- Status status = GetMainFrame(&full_frame_id);
- if (status.IsError())
- return status;
- }
- return navigation_tracker_->IsPendingNavigation(frame_id, is_pending);
-}
-
-Status WebViewImpl::GetMainFrame(std::string* out_frame) {
- base::DictionaryValue params;
- scoped_ptr<base::DictionaryValue> result;
- Status status = client_->SendCommandAndGetResult(
- "Page.getResourceTree", params, &result);
- if (status.IsError())
- return status;
- if (!result->GetString("frameTree.frame.id", out_frame))
- return Status(kUnknownError, "missing 'frameTree.frame.id' in response");
- return Status(kOk);
-}
-
-JavaScriptDialogManager* WebViewImpl::GetJavaScriptDialogManager() {
- return dialog_manager_.get();
-}
-
-Status WebViewImpl::CaptureScreenshot(std::string* screenshot) {
- base::DictionaryValue params;
- scoped_ptr<base::DictionaryValue> result;
- Status status = client_->SendCommandAndGetResult(
- "Page.captureScreenshot", params, &result);
- if (status.IsError())
- return status;
- if (!result->GetString("data", screenshot))
- return Status(kUnknownError, "expected string 'data' in response");
- return Status(kOk);
-}
-
-namespace internal {
-
-Status EvaluateScript(DevToolsClient* client,
- int context_id,
- const std::string& expression,
- EvaluateScriptReturnType return_type,
- scoped_ptr<base::DictionaryValue>* result) {
- base::DictionaryValue params;
- params.SetString("expression", expression);
- if (context_id)
- params.SetInteger("contextId", context_id);
- params.SetBoolean("returnByValue", return_type == ReturnByValue);
- scoped_ptr<base::DictionaryValue> cmd_result;
- Status status = client->SendCommandAndGetResult(
- "Runtime.evaluate", params, &cmd_result);
- if (status.IsError())
- return status;
-
- bool was_thrown;
- if (!cmd_result->GetBoolean("wasThrown", &was_thrown))
- return Status(kUnknownError, "Runtime.evaluate missing 'wasThrown'");
- if (was_thrown) {
- std::string description = "unknown";
- cmd_result->GetString("result.description", &description);
- return Status(kUnknownError,
- "Runtime.evaluate threw exception: " + description);
- }
-
- base::DictionaryValue* unscoped_result;
- if (!cmd_result->GetDictionary("result", &unscoped_result))
- return Status(kUnknownError, "evaluate missing dictionary 'result'");
- result->reset(unscoped_result->DeepCopy());
- return Status(kOk);
-}
-
-Status EvaluateScriptAndGetObject(DevToolsClient* client,
- int context_id,
- const std::string& expression,
- std::string* object_id) {
- scoped_ptr<base::DictionaryValue> result;
- Status status = EvaluateScript(client, context_id, expression, ReturnByObject,
- &result);
- if (status.IsError())
- return status;
- if (!result->GetString("objectId", object_id))
- return Status(kUnknownError, "evaluate missing string 'objectId'");
- return Status(kOk);
-}
-
-Status EvaluateScriptAndGetValue(DevToolsClient* client,
- int context_id,
- const std::string& expression,
- scoped_ptr<base::Value>* result) {
- scoped_ptr<base::DictionaryValue> temp_result;
- Status status = EvaluateScript(client, context_id, expression, ReturnByValue,
- &temp_result);
- if (status.IsError())
- return status;
-
- std::string type;
- if (!temp_result->GetString("type", &type))
- return Status(kUnknownError, "Runtime.evaluate missing string 'type'");
-
- if (type == "undefined") {
- result->reset(base::Value::CreateNullValue());
- } else {
- base::Value* value;
- if (!temp_result->Get("value", &value))
- return Status(kUnknownError, "Runtime.evaluate missing 'value'");
- result->reset(value->DeepCopy());
- }
- return Status(kOk);
-}
-
-Status ParseCallFunctionResult(const base::Value& temp_result,
- scoped_ptr<base::Value>* result) {
- const base::DictionaryValue* dict;
- if (!temp_result.GetAsDictionary(&dict))
- return Status(kUnknownError, "call function result must be a dictionary");
- int status_code;
- if (!dict->GetInteger("status", &status_code)) {
- return Status(kUnknownError,
- "call function result missing int 'status'");
- }
- if (status_code != kOk) {
- std::string message;
- dict->GetString("value", &message);
- return Status(static_cast<StatusCode>(status_code), message);
- }
- const base::Value* unscoped_value;
- if (!dict->Get("value", &unscoped_value)) {
- return Status(kUnknownError,
- "call function result missing 'value'");
- }
- result->reset(unscoped_value->DeepCopy());
- return Status(kOk);
-}
-
-Status GetNodeIdFromFunction(DevToolsClient* client,
- int context_id,
- const std::string& function,
- const base::ListValue& args,
- int* node_id) {
- std::string json;
- base::JSONWriter::Write(&args, &json);
- std::string expression = base::StringPrintf(
- "(%s).apply(null, [%s, %s, true])",
- kCallFunctionScript,
- function.c_str(),
- json.c_str());
-
- std::string element_id;
- Status status = internal::EvaluateScriptAndGetObject(
- client, context_id, expression, &element_id);
- if (status.IsError())
- return status;
-
- scoped_ptr<base::DictionaryValue> cmd_result;
- {
- base::DictionaryValue params;
- params.SetString("objectId", element_id);
- status = client->SendCommandAndGetResult(
- "DOM.requestNode", params, &cmd_result);
- }
- {
- // Release the remote object before doing anything else.
- base::DictionaryValue params;
- params.SetString("objectId", element_id);
- Status release_status =
- client->SendCommand("Runtime.releaseObject", params);
- if (release_status.IsError()) {
- LOG(ERROR) << "Failed to release remote object: "
- << release_status.message();
- }
- }
- if (status.IsError())
- return status;
-
- if (!cmd_result->GetInteger("nodeId", node_id))
- return Status(kUnknownError, "DOM.requestNode missing int 'nodeId'");
- return Status(kOk);
-}
-
-} // namespace internal
« no previous file with comments | « chrome/test/chromedriver/web_view_impl.h ('k') | chrome/test/chromedriver/web_view_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698