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

Side by Side Diff: chrome/test/remoting/remote_desktop_browsertest.cc

Issue 838543002: Implement browser test for It2Me (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address CL feedback Created 5 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/test/remoting/remote_desktop_browsertest.h" 5 #include "chrome/test/remoting/remote_desktop_browsertest.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/files/file_util.h" 8 #include "base/files/file_util.h"
9 #include "base/json/json_reader.h" 9 #include "base/json/json_reader.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 extensions::Manifest::Type type = extension_->GetType(); 159 extensions::Manifest::Type type = extension_->GetType();
160 EXPECT_TRUE(type == extensions::Manifest::TYPE_PLATFORM_APP || 160 EXPECT_TRUE(type == extensions::Manifest::TYPE_PLATFORM_APP ||
161 type == extensions::Manifest::TYPE_LEGACY_PACKAGED_APP); 161 type == extensions::Manifest::TYPE_LEGACY_PACKAGED_APP);
162 162
163 EXPECT_TRUE(extension_->ShouldDisplayInAppLauncher()); 163 EXPECT_TRUE(extension_->ShouldDisplayInAppLauncher());
164 } 164 }
165 165
166 ASSERT_EQ(installed, expected); 166 ASSERT_EQ(installed, expected);
167 } 167 }
168 168
169 void RemoteDesktopBrowserTest::LaunchChromotingApp(bool defer_start) { 169 void RemoteDesktopBrowserTest::LaunchChromotingApp(
170 bool defer_start,
171 WindowOpenDisposition window_open_disposition,
172 content::WebContents** app_web_contents) {
170 ASSERT_TRUE(extension_); 173 ASSERT_TRUE(extension_);
174 ASSERT_EQ(*app_web_contents, nullptr);
171 175
172 GURL chromoting_main = Chromoting_Main_URL(); 176 GURL chromoting_main = Chromoting_Main_URL();
173 // We cannot simply wait for any page load because the first page 177 // We cannot simply wait for any page load because the first page
174 // loaded could be the generated background page. We need to wait 178 // loaded could be the generated background page. We need to wait
175 // till the chromoting main page is loaded. 179 // till the chromoting main page is loaded.
176 PageLoadNotificationObserver observer(chromoting_main); 180 PageLoadNotificationObserver observer(chromoting_main);
177 observer.set_ignore_url_parameters(true); 181 observer.set_ignore_url_parameters(true);
178 182
179 // If the app should be started in deferred mode, ensure that a "source" URL 183 // If the app should be started in deferred mode, ensure that a "source" URL
180 // parameter; if not, ensure that no such parameter is present. The value of 184 // parameter; if not, ensure that no such parameter is present. The value of
181 // the parameter is determined by the AppLaunchParams ("test", in this case). 185 // the parameter is determined by the AppLaunchParams ("test", in this case).
182 extensions::FeatureSwitch::ScopedOverride override_trace_app_source( 186 extensions::FeatureSwitch::ScopedOverride override_trace_app_source(
183 extensions::FeatureSwitch::trace_app_source(), 187 extensions::FeatureSwitch::trace_app_source(),
184 defer_start); 188 defer_start);
185 189
190 if (is_platform_app()) {
191 window_open_disposition = NEW_WINDOW;
Jamie 2015/01/10 00:14:24 Could we get rid of the disposition parameter if w
kelvinp 2015/01/12 21:15:24 V2 test currently doesn't run reliably. I prefer
192 }
193
186 OpenApplication(AppLaunchParams(browser()->profile(), extension_, 194 OpenApplication(AppLaunchParams(browser()->profile(), extension_,
187 is_platform_app() 195 is_platform_app()
188 ? extensions::LAUNCH_CONTAINER_NONE 196 ? extensions::LAUNCH_CONTAINER_NONE
189 : extensions::LAUNCH_CONTAINER_TAB, 197 : extensions::LAUNCH_CONTAINER_TAB,
190 is_platform_app() ? NEW_WINDOW : CURRENT_TAB, 198 window_open_disposition,
191 extensions::SOURCE_TEST)); 199 extensions::SOURCE_TEST));
192 200
193 observer.Wait(); 201 observer.Wait();
194 202
195 203
196 // The active WebContents instance should be the source of the LOAD_STOP 204 // The active WebContents instance should be the source of the LOAD_STOP
197 // notification. 205 // notification.
198 content::NavigationController* controller = 206 content::NavigationController* controller =
199 content::Source<content::NavigationController>(observer.source()).ptr(); 207 content::Source<content::NavigationController>(observer.source()).ptr();
200 208
201 content::WebContents* web_contents = controller->GetWebContents(); 209 content::WebContents* web_contents = controller->GetWebContents();
210 ASSERT_TRUE(web_contents);
211
202 if (web_contents != active_web_contents()) 212 if (web_contents != active_web_contents())
203 web_contents_stack_.push_back(web_contents); 213 web_contents_stack_.push_back(web_contents);
204 214
205 app_web_content_ = web_contents; 215 *app_web_contents = web_contents;
206 216
207 if (is_platform_app()) { 217 if (is_platform_app()) {
208 EXPECT_EQ(GetFirstAppWindowWebContents(), active_web_contents()); 218 EXPECT_EQ(GetFirstAppWindowWebContents(), active_web_contents());
209 } else { 219 } else {
210 // For apps v1 only, the DOMOperationObserver is not ready at the LOAD_STOP 220 // For apps v1 only, the DOMOperationObserver is not ready at the LOAD_STOP
211 // event. A half second wait is necessary for the subsequent javascript 221 // event. A half second wait is necessary for the subsequent javascript
212 // injection to work. 222 // injection to work.
213 // TODO(weitaosu): Find out whether there is a more appropriate notification 223 // TODO(weitaosu): Find out whether there is a more appropriate notification
214 // to wait for so we can get rid of this wait. 224 // to wait for so we can get rid of this wait.
215 ASSERT_TRUE(TimeoutWaiter(base::TimeDelta::FromSeconds(5)).Wait()); 225 ASSERT_TRUE(TimeoutWaiter(base::TimeDelta::FromSeconds(5)).Wait());
216 } 226 }
217 227
218 EXPECT_EQ(Chromoting_Main_URL(), GetCurrentURL()); 228 EXPECT_EQ(Chromoting_Main_URL(), GetCurrentURL());
219 } 229 }
220 230
231 void RemoteDesktopBrowserTest::LaunchChromotingApp(
232 bool defer_start,
233 content::WebContents** app_web_contents) {
234 LaunchChromotingApp(defer_start, CURRENT_TAB, app_web_contents);
235 }
236
237 void RemoteDesktopBrowserTest::LaunchChromotingApp(bool defer_start) {
238 content::WebContents* app_web_contents = nullptr;
239 LaunchChromotingApp(defer_start, CURRENT_TAB, &app_web_contents);
240 }
241
221 void RemoteDesktopBrowserTest::StartChromotingApp() { 242 void RemoteDesktopBrowserTest::StartChromotingApp() {
222 ClickOnControl("browser-test-continue-init"); 243 ClickOnControl("browser-test-continue-init");
223 }; 244 };
224 245
225 void RemoteDesktopBrowserTest::Authorize() { 246 void RemoteDesktopBrowserTest::Authorize() {
226 // The chromoting extension should be installed. 247 // The chromoting extension should be installed.
227 ASSERT_TRUE(extension_); 248 ASSERT_TRUE(extension_);
228 249
229 // The chromoting main page should be loaded in the current tab 250 // The chromoting main page should be loaded in the current tab
230 // and isAuthenticated() should be false (auth dialog visible). 251 // and isAuthenticated() should be false (auth dialog visible).
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 VerifyChromotingLoaded(false); 484 VerifyChromotingLoaded(false);
464 } 485 }
465 486
466 // TODO(chaitali): Remove this additional timeout after we figure out 487 // TODO(chaitali): Remove this additional timeout after we figure out
467 // why this is needed for the v1 app to work. 488 // why this is needed for the v1 app to work.
468 // Without this timeout the test fail with a "CloseWebContents called for 489 // Without this timeout the test fail with a "CloseWebContents called for
469 // tab not in our strip" error for the v1 app. 490 // tab not in our strip" error for the v1 app.
470 ASSERT_TRUE(TimeoutWaiter(base::TimeDelta::FromSeconds(2)).Wait()); 491 ASSERT_TRUE(TimeoutWaiter(base::TimeDelta::FromSeconds(2)).Wait());
471 } 492 }
472 493
473 void RemoteDesktopBrowserTest::SetUpTestForMe2Me() { 494 content::WebContents* RemoteDesktopBrowserTest::SetUpTest() {
495 content::WebContents* app_web_content = nullptr;
474 VerifyInternetAccess(); 496 VerifyInternetAccess();
475 Install(); 497 Install();
476 LaunchChromotingApp(false); 498 LaunchChromotingApp(false, &app_web_content);
477 Auth(); 499 Auth();
478 LoadScript(app_web_content(), FILE_PATH_LITERAL("browser_test.js")); 500 LoadScript(app_web_content, FILE_PATH_LITERAL("browser_test.js"));
479 ExpandMe2Me(); 501 ExpandMe2Me();
480 // The call to EnsureRemoteConnectionEnabled() does a PIN reset. 502 // The call to EnsureRemoteConnectionEnabled() does a PIN reset.
481 // This causes the test to fail because of a recent bug: 503 // This causes the test to fail because of a recent bug:
482 // crbug.com/430676 504 // crbug.com/430676
483 // TODO(anandc): Reactivate this call after above bug is fixed. 505 // TODO(anandc): Reactivate this call after above bug is fixed.
484 //EnsureRemoteConnectionEnabled(); 506 //EnsureRemoteConnectionEnabled(app_web_content);
507 return app_web_content;
485 } 508 }
486 509
487 void RemoteDesktopBrowserTest::Auth() { 510 void RemoteDesktopBrowserTest::Auth() {
488 // For this test, we must be given the user-name and password. 511 // For this test, we must be given the user-name and password.
489 ASSERT_TRUE(!username_.empty() && !password_.empty()); 512 ASSERT_TRUE(!username_.empty() && !password_.empty());
490 513
491 Authorize(); 514 Authorize();
492 Authenticate(); 515 Authenticate();
493 Approve(); 516 Approve();
494 } 517 }
495 518
496 void RemoteDesktopBrowserTest::EnsureRemoteConnectionEnabled() { 519 void RemoteDesktopBrowserTest::EnsureRemoteConnectionEnabled(
520 content::WebContents* app_web_content) {
497 // browser_test.ensureRemoteConnectionEnabled is defined in 521 // browser_test.ensureRemoteConnectionEnabled is defined in
498 // browser_test.js, which must be loaded before calling this function. 522 // browser_test.js, which must be loaded before calling this function.
499 // TODO(kelvinp): This function currently only works on linux when the user is 523 // TODO(kelvinp): This function currently only works on linux when the user is
500 // already part of the chrome-remote-desktop group. Extend this functionality 524 // already part of the chrome-remote-desktop group. Extend this functionality
501 // to Mac (https://crbug.com/397576) and Windows (https://crbug.com/397575). 525 // to Mac (https://crbug.com/397576) and Windows (https://crbug.com/397575).
502 bool result; 526 bool result;
503 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 527 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
504 app_web_content(), 528 app_web_content,
505 "browserTest.ensureRemoteConnectionEnabled(" + me2me_pin() + ")", 529 "browserTest.ensureRemoteConnectionEnabled(" + me2me_pin() + ")",
506 &result)); 530 &result));
507 EXPECT_TRUE(result) << "Cannot start the host with Pin:" << me2me_pin(); 531 EXPECT_TRUE(result) << "Cannot start the host with Pin:" << me2me_pin();
508 } 532 }
509 533
510 void RemoteDesktopBrowserTest::ConnectToLocalHost(bool remember_pin) { 534 void RemoteDesktopBrowserTest::ConnectToLocalHost(bool remember_pin) {
511 // Wait for local-host to be ready. 535 // Wait for local-host to be ready.
512 ConditionalTimeoutWaiter waiter( 536 ConditionalTimeoutWaiter waiter(
513 base::TimeDelta::FromSeconds(5), 537 base::TimeDelta::FromSeconds(5),
514 base::TimeDelta::FromMilliseconds(500), 538 base::TimeDelta::FromMilliseconds(500),
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 base::FilePath script_path = src_dir.Append(path); 734 base::FilePath script_path = src_dir.Append(path);
711 735
712 if (!base::ReadFileToString(script_path, &script)) { 736 if (!base::ReadFileToString(script_path, &script)) {
713 LOG(ERROR) << "Failed to load script " << script_path.value(); 737 LOG(ERROR) << "Failed to load script " << script_path.value();
714 return false; 738 return false;
715 } 739 }
716 740
717 return content::ExecuteScript(web_contents, script); 741 return content::ExecuteScript(web_contents, script);
718 } 742 }
719 743
720 // static
721 void RemoteDesktopBrowserTest::RunJavaScriptTest( 744 void RemoteDesktopBrowserTest::RunJavaScriptTest(
722 content::WebContents* web_contents, 745 content::WebContents* web_contents,
723 const std::string& testName, 746 const std::string& testName,
724 const std::string& testData) { 747 const std::string& testData) {
725 std::string result; 748 std::string result;
726 std::string script = "browserTest.runTest(browserTest." + testName + ", " + 749 std::string script = "browserTest.runTest(browserTest." + testName + ", " +
727 testData + ");"; 750 testData + ");";
728 751
729 DVLOG(1) << "Executing " << script; 752 DVLOG(1) << "Executing " << script;
730 753
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 // static 918 // static
896 bool RemoteDesktopBrowserTest::IsEnabled( 919 bool RemoteDesktopBrowserTest::IsEnabled(
897 content::WebContents* client_web_content, 920 content::WebContents* client_web_content,
898 const std::string& element_name) { 921 const std::string& element_name) {
899 return !ExecuteScriptAndExtractBool( 922 return !ExecuteScriptAndExtractBool(
900 client_web_content, 923 client_web_content,
901 "document.getElementById(\"" + element_name + "\").disabled"); 924 "document.getElementById(\"" + element_name + "\").disabled");
902 } 925 }
903 926
904 } // namespace remoting 927 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698