1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/devtools/device/adb/adb_device_provider.h"
6#include "chrome/browser/devtools/device/adb/mock_adb_server.h"
7#include "chrome/browser/devtools/device/devtools_android_bridge.h"
8#include "chrome/browser/ui/browser.h"
9#include "chrome/browser/ui/tabs/tab_strip_model.h"
10#include "chrome/common/url_constants.h"
11#include "chrome/test/base/ui_test_utils.h"
12#include "chrome/test/base/web_ui_browser_test.h"
13#include "content/public/browser/navigation_details.h"
14#include "content/public/browser/web_contents.h"
15#include "content/public/test/browser_test_utils.h"
16
17using content::WebContents;
18
19namespace {
20
21const char kSharedWorkerTestPage[] =
22    "files/workers/workers_ui_shared_worker.html";
23const char kSharedWorkerJs[] =
24    "files/workers/workers_ui_shared_worker.js";
25
26class InspectUITest : public WebUIBrowserTest {
27 public:
28  InspectUITest() {}
29
30  virtual void SetUpOnMainThread() OVERRIDE {
31    WebUIBrowserTest::SetUpOnMainThread();
32    AddLibrary(base::FilePath(FILE_PATH_LITERAL("inspect_ui_test.js")));
33  }
34
35 private:
36  DISALLOW_COPY_AND_ASSIGN(InspectUITest);
37};
38
39IN_PROC_BROWSER_TEST_F(InspectUITest, InspectUIPage) {
40  ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIInspectURL));
41  ASSERT_TRUE(WebUIBrowserTest::RunJavascriptAsyncTest(
42      "testTargetListed",
43      new base::StringValue("#pages"),
44      new base::StringValue("populateWebContentsTargets"),
45      new base::StringValue(chrome::kChromeUIInspectURL)));
46}
47
48IN_PROC_BROWSER_TEST_F(InspectUITest, SharedWorker) {
49  ASSERT_TRUE(test_server()->Start());
50  GURL url = test_server()->GetURL(kSharedWorkerTestPage);
51  ui_test_utils::NavigateToURL(browser(), url);
52
53  ui_test_utils::NavigateToURLWithDisposition(
54      browser(),
55      GURL(chrome::kChromeUIInspectURL),
56      NEW_FOREGROUND_TAB,
57      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
58
59  ASSERT_TRUE(WebUIBrowserTest::RunJavascriptAsyncTest(
60      "testTargetListed",
61      new base::StringValue("#workers"),
62      new base::StringValue("populateWorkerTargets"),
63      new base::StringValue(kSharedWorkerJs)));
64
65  ASSERT_TRUE(WebUIBrowserTest::RunJavascriptAsyncTest(
66      "testTargetListed",
67      new base::StringValue("#pages"),
68      new base::StringValue("populateWebContentsTargets"),
69      new base::StringValue(kSharedWorkerTestPage)));
70}
71
72IN_PROC_BROWSER_TEST_F(InspectUITest, AndroidTargets) {
73  scoped_refptr<DevToolsAndroidBridge> android_bridge =
74      DevToolsAndroidBridge::Factory::GetForProfile(browser()->profile());
75  AndroidDeviceManager::DeviceProviders providers;
76  providers.push_back(new AdbDeviceProvider());
77  android_bridge->set_device_providers_for_test(providers);
78
79  StartMockAdbServer();
80
81  ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIInspectURL));
82
83  ASSERT_TRUE(WebUIBrowserTest::RunJavascriptAsyncTest("testAdbTargetsListed"));
84
85  StopMockAdbServer();
86}
87
88IN_PROC_BROWSER_TEST_F(InspectUITest, ReloadCrash) {
89  ASSERT_TRUE(test_server()->Start());
90  ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIInspectURL));
91  ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIInspectURL));
92}
93
94}  // namespace
95