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/compiler_specific.h" 6 #include "base/logging.h" 7 #include "base/macros.h" 8 #include "chrome/browser/chromeos/login/login_manager_test.h" 9 #include "chrome/browser/chromeos/login/ui/captive_portal_view.h" 10 #include "chrome/browser/chromeos/login/ui/captive_portal_window_proxy.h" 11 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" 12 #include "chrome/browser/chromeos/login/ui/simple_web_view_dialog.h" 13 #include "chrome/browser/chromeos/login/ui/webui_login_view.h" 14 #include "content/public/browser/interstitial_page.h" 15 #include "content/public/browser/interstitial_page_delegate.h" 16 #include "ui/views/controls/webview/webview.h" 17 18 namespace chromeos { 19 20 namespace { 21 22 class StubDelegate : public CaptivePortalWindowProxyDelegate { 23 public: 24 StubDelegate() {} 25 virtual ~StubDelegate() {} 26 virtual void OnPortalDetected() OVERRIDE {} 27 28 private: 29 DISALLOW_COPY_AND_ASSIGN(StubDelegate); 30 }; 31 32 class InterstitialPageDelegate : public content::InterstitialPageDelegate { 33 public: 34 explicit InterstitialPageDelegate(content::WebContents* web_contents) { 35 content::InterstitialPage* page = content::InterstitialPage::Create( 36 web_contents, true, GURL("http://foo"), this); 37 page->Show(); 38 } 39 40 virtual ~InterstitialPageDelegate() {} 41 42 private: 43 // InterstitialPageDelegate implementation: 44 virtual std::string GetHTMLContents() OVERRIDE { return "HTML Contents"; } 45 46 DISALLOW_COPY_AND_ASSIGN(InterstitialPageDelegate); 47 }; 48 49 } // namespace 50 51 class SimpleWebViewDialogTest : public LoginManagerTest { 52 public: 53 SimpleWebViewDialogTest(): LoginManagerTest(false) {} 54 virtual ~SimpleWebViewDialogTest() {} 55 56 InterstitialPageDelegate* CreateDelegate(CaptivePortalWindowProxy* proxy) { 57 SimpleWebViewDialog* dialog = proxy->captive_portal_view_for_testing(); 58 CHECK(dialog) << "CaptivePortalView is not initialized"; 59 return new InterstitialPageDelegate(dialog->web_view_->web_contents()); 60 } 61 62 private: 63 DISALLOW_COPY_AND_ASSIGN(SimpleWebViewDialogTest); 64 }; 65 66 IN_PROC_BROWSER_TEST_F(SimpleWebViewDialogTest, Interstitial) { 67 content::WebContents* web_contents = LoginDisplayHostImpl::default_host() 68 ->GetWebUILoginView() 69 ->GetWebContents(); 70 StubDelegate delegate; 71 CaptivePortalWindowProxy proxy(&delegate, web_contents); 72 proxy.Show(); 73 74 // Delegate creates a page and passes himself to it. Page owns the 75 // delegate and will be destroyed by the end of the test. 76 CreateDelegate(&proxy); 77 } 78 79 } // namespace chromeos 80