• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 "base/command_line.h"
6 #include "base/compiler_specific.h"
7 #include "base/prefs/pref_service.h"
8 #include "base/strings/string_number_conversions.h"
9 #include "chrome/browser/devtools/browser_list_tabcontents_provider.h"
10 #include "chrome/browser/devtools/device/port_forwarding_controller.h"
11 #include "chrome/browser/devtools/device/self_device_provider.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/ui/browser.h"
14 #include "chrome/browser/ui/tabs/tab_strip_model.h"
15 #include "chrome/common/chrome_switches.h"
16 #include "chrome/common/pref_names.h"
17 #include "chrome/test/base/in_process_browser_test.h"
18 #include "chrome/test/base/ui_test_utils.h"
19 #include "content/public/browser/web_contents.h"
20 #include "content/public/test/browser_test_utils.h"
21 #include "content/public/test/test_utils.h"
22 
23 namespace {
24 const char kPortForwardingTestPage[] =
25     "files/devtools/port_forwarding/main.html";
26 
27 const int kDefaultDebuggingPort = 9223;
28 }
29 
30 class PortForwardingTest: public InProcessBrowserTest {
SetUpCommandLine(CommandLine * command_line)31   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
32     InProcessBrowserTest::SetUpCommandLine(command_line);
33     command_line->AppendSwitchASCII(switches::kRemoteDebuggingPort,
34         base::IntToString(kDefaultDebuggingPort));
35   }
36 
37  protected:
38   class Listener : public PortForwardingController::Listener {
39    public:
Listener(Profile * profile)40     explicit Listener(Profile* profile)
41         : profile_(profile) {
42       PortForwardingController::Factory::GetForProfile(profile_)->
43           AddListener(this);
44     }
45 
~Listener()46     virtual ~Listener() {
47       PortForwardingController::Factory::GetForProfile(profile_)->
48           RemoveListener(this);
49     }
50 
PortStatusChanged(const DevicesStatus & status)51     virtual void PortStatusChanged(const DevicesStatus& status) OVERRIDE {
52       if (status.empty())
53         return;
54       base::MessageLoop::current()->PostTask(
55           FROM_HERE, base::MessageLoop::QuitClosure());
56     }
57 
58    private:
59     Profile* profile_;
60   };
61 };
62 
IN_PROC_BROWSER_TEST_F(PortForwardingTest,LoadPageWithStyleAnsScript)63 IN_PROC_BROWSER_TEST_F(PortForwardingTest,
64                        LoadPageWithStyleAnsScript) {
65   Profile* profile = browser()->profile();
66 
67   AndroidDeviceManager::DeviceProviders device_providers;
68   device_providers.push_back(new SelfAsDeviceProvider(kDefaultDebuggingPort));
69   DevToolsAndroidBridge::Factory::GetForProfile(profile)->
70       set_device_providers_for_test(device_providers);
71 
72   ASSERT_TRUE(test_server()->Start());
73   GURL original_url = test_server()->GetURL(kPortForwardingTestPage);
74 
75   std::string forwarding_port("8000");
76   GURL forwarding_url(original_url.scheme() + "://" +
77       original_url.host() + ":" + forwarding_port + original_url.path());
78 
79   PrefService* prefs = profile->GetPrefs();
80   prefs->SetBoolean(prefs::kDevToolsPortForwardingEnabled, true);
81 
82   base::DictionaryValue config;
83   config.SetString(
84       forwarding_port, original_url.host() + ":" + original_url.port());
85   prefs->Set(prefs::kDevToolsPortForwardingConfig, config);
86 
87   Listener wait_for_port_forwarding(profile);
88   content::RunMessageLoop();
89 
90   BrowserListTabContentsProvider::EnableTethering();
91 
92   ui_test_utils::NavigateToURL(browser(), forwarding_url);
93 
94   content::RenderViewHost* rvh = browser()->tab_strip_model()->
95       GetWebContentsAt(0)->GetRenderViewHost();
96 
97   std::string result;
98   ASSERT_TRUE(
99       content::ExecuteScriptAndExtractString(
100           rvh,
101           "window.domAutomationController.send(document.title)",
102           &result));
103   ASSERT_EQ("Port forwarding test", result) << "Document has not loaded.";
104 
105   ASSERT_TRUE(
106       content::ExecuteScriptAndExtractString(
107           rvh,
108           "window.domAutomationController.send(getBodyTextContent())",
109           &result));
110   ASSERT_EQ("content", result) << "Javascript has not loaded.";
111 
112   ASSERT_TRUE(
113       content::ExecuteScriptAndExtractString(
114           rvh,
115           "window.domAutomationController.send(getBodyMarginLeft())",
116           &result));
117   ASSERT_EQ("100px", result) << "CSS has not loaded.";
118 }
119