| Index: chrome/browser/devtools/device/webrtc/devtools_bridge_client_browsertest.cc
|
| diff --git a/chrome/browser/devtools/device/webrtc/devtools_bridge_client_browsertest.cc b/chrome/browser/devtools/device/webrtc/devtools_bridge_client_browsertest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..91eed56f0c03f64db14671227cbdcdd5f5c68080
|
| --- /dev/null
|
| +++ b/chrome/browser/devtools/device/webrtc/devtools_bridge_client_browsertest.cc
|
| @@ -0,0 +1,167 @@
|
| +// Copyright 2014 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/browser/devtools/device/webrtc/devtools_bridge_client_browsertest.h"
|
| +
|
| +#include "chrome/browser/devtools/device/webrtc/devtools_bridge_client.h"
|
| +#include "chrome/browser/local_discovery/gcd_api_flow.h"
|
| +#include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
|
| +#include "chrome/browser/signin/fake_signin_manager.h"
|
| +#include "chrome/browser/ui/browser.h"
|
| +#include "content/public/browser/web_ui_message_handler.h"
|
| +
|
| +class DevToolsBridgeClientBrowserTest::GCDApiFlowMock
|
| + : public local_discovery::GCDApiFlow {
|
| + public:
|
| + explicit GCDApiFlowMock(DevToolsBridgeClientBrowserTest* test)
|
| + : test_(test), id_(++test->last_flow_id_) {
|
| + test_->flows_[id_] = this;
|
| + }
|
| +
|
| + ~GCDApiFlowMock() { test_->flows_.erase(id_); }
|
| +
|
| + // Passes request's data to the JS test. Result will be passed back
|
| + // in MessageHandler::Response.
|
| + void Start(scoped_ptr<Request> request) override {
|
| + request_ = request.Pass();
|
| +
|
| + std::string type;
|
| + std::string data;
|
| + request_->GetUploadData(&type, &data);
|
| +
|
| + ScopedVector<const base::Value> params;
|
| + params.push_back(new base::FundamentalValue(id_));
|
| + params.push_back(new base::StringValue(request_->GetURL().spec()));
|
| + params.push_back(new base::StringValue(data));
|
| +
|
| + test_->RunJavascriptFunction("callbacks.gcdApiRequest", params);
|
| + }
|
| +
|
| + void Respond(const base::DictionaryValue* response) {
|
| + if (request_.get())
|
| + request_->OnGCDAPIFlowComplete(*response);
|
| + }
|
| +
|
| + private:
|
| + DevToolsBridgeClientBrowserTest* const test_;
|
| + const int id_;
|
| + scoped_ptr<Request> request_;
|
| +};
|
| +
|
| +class DevToolsBridgeClientBrowserTest::DevToolsBridgeClientMock
|
| + : public DevToolsBridgeClient,
|
| + public base::SupportsWeakPtr<DevToolsBridgeClientMock> {
|
| + public:
|
| + explicit DevToolsBridgeClientMock(DevToolsBridgeClientBrowserTest* test)
|
| + : DevToolsBridgeClient(test->browser()->profile(),
|
| + test->fake_signin_manager_.get(),
|
| + test->fake_token_service_.get()),
|
| + test_(test) {}
|
| +
|
| + ~DevToolsBridgeClientMock() override {}
|
| +
|
| + void DocumentOnLoadCompletedInMainFrame() override {
|
| + DevToolsBridgeClient::DocumentOnLoadCompletedInMainFrame();
|
| +
|
| + test_->RunJavascriptFunction("callbacks.workerLoaded");
|
| + }
|
| +
|
| + void OnBrowserListUpdatedForTests() override {
|
| + int count = static_cast<int>(browsers().size());
|
| + test_->RunJavascriptFunction("callbacks.browserListUpdated",
|
| + new base::FundamentalValue(count));
|
| + }
|
| +
|
| + scoped_ptr<local_discovery::GCDApiFlow> CreateGCDApiFlow() override {
|
| + return make_scoped_ptr(new GCDApiFlowMock(test_));
|
| + }
|
| +
|
| + void GoogleSigninSucceeded() {
|
| + // This username is checked on Chrome OS.
|
| + const std::string username = "stub-user@example.com";
|
| + test_->fake_signin_manager_->SetAuthenticatedUsername(username);
|
| + identity_provider().GoogleSigninSucceeded("test_account", username,
|
| + "testing");
|
| + }
|
| +
|
| + private:
|
| + DevToolsBridgeClientBrowserTest* const test_;
|
| +};
|
| +
|
| +class DevToolsBridgeClientBrowserTest::MessageHandler
|
| + : public content::WebUIMessageHandler {
|
| + public:
|
| + explicit MessageHandler(DevToolsBridgeClientBrowserTest* test)
|
| + : test_(test) {}
|
| +
|
| + void RegisterMessages() override {
|
| + web_ui()->RegisterMessageCallback(
|
| + "signIn", base::Bind(&MessageHandler::SignIn, base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| + "gcdApiResponse",
|
| + base::Bind(&MessageHandler::GCDApiResponse, base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(
|
| + "queryDevices",
|
| + base::Bind(&MessageHandler::QueryDevices, base::Unretained(this)));
|
| + }
|
| +
|
| + void SignIn(const base::ListValue*) {
|
| + if (test_->client_mock_.get())
|
| + test_->client_mock_->GoogleSigninSucceeded();
|
| + test_->fake_token_service_->UpdateCredentials("test_user@gmail.com",
|
| + "token");
|
| + }
|
| +
|
| + void GCDApiResponse(const base::ListValue* params) {
|
| + CHECK(params->GetSize() >= 2);
|
| + int id;
|
| + const base::DictionaryValue* response;
|
| + CHECK(params->GetInteger(0, &id));
|
| + CHECK(params->GetDictionary(1, &response));
|
| +
|
| + auto flow = test_->flows_.find(id);
|
| + CHECK(test_->flows_.end() != flow);
|
| + flow->second->Respond(response);
|
| + }
|
| +
|
| + void QueryDevices(const base::ListValue*) {
|
| + DevToolsBridgeClient::GetDevices(test_->client_mock_);
|
| + }
|
| +
|
| + private:
|
| + DevToolsBridgeClientBrowserTest* const test_;
|
| +};
|
| +
|
| +DevToolsBridgeClientBrowserTest::DevToolsBridgeClientBrowserTest()
|
| + : last_flow_id_(0) {
|
| +}
|
| +
|
| +DevToolsBridgeClientBrowserTest::~DevToolsBridgeClientBrowserTest() {
|
| + DCHECK(flows_.empty());
|
| +}
|
| +
|
| +void DevToolsBridgeClientBrowserTest::SetUpOnMainThread() {
|
| + WebUIBrowserTest::SetUpOnMainThread();
|
| +
|
| + DCHECK(browser()->profile());
|
| + fake_signin_manager_.reset(
|
| + new FakeSigninManagerForTesting(browser()->profile()));
|
| + fake_token_service_.reset(new FakeProfileOAuth2TokenService());
|
| + client_mock_ = (new DevToolsBridgeClientMock(this))->AsWeakPtr();
|
| +}
|
| +
|
| +void DevToolsBridgeClientBrowserTest::TearDownOnMainThread() {
|
| + if (client_mock_.get())
|
| + client_mock_->DeleteSelf();
|
| + fake_token_service_.reset();
|
| + fake_signin_manager_.reset();
|
| + WebUIBrowserTest::TearDownOnMainThread();
|
| +}
|
| +
|
| +content::WebUIMessageHandler*
|
| +DevToolsBridgeClientBrowserTest::GetMockMessageHandler() {
|
| + if (!handler_.get())
|
| + handler_.reset(new MessageHandler(this));
|
| + return handler_.get();
|
| +}
|
|
|