| OLD | NEW |
| 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 "base/path_service.h" | 5 #include "base/path_service.h" |
| 6 #include "base/process/process.h" | 6 #include "base/process/process.h" |
| 7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "chrome/app/chrome_command_ids.h" | 9 #include "chrome/app/chrome_command_ids.h" |
| 10 #include "chrome/browser/apps/app_browsertest_util.h" | 10 #include "chrome/browser/apps/app_browsertest_util.h" |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 using task_manager::browsertest_util::MatchApp; | 82 using task_manager::browsertest_util::MatchApp; |
| 83 using task_manager::browsertest_util::MatchBackground; | 83 using task_manager::browsertest_util::MatchBackground; |
| 84 using task_manager::browsertest_util::MatchWebView; | 84 using task_manager::browsertest_util::MatchWebView; |
| 85 using task_manager::browsertest_util::WaitForTaskManagerRows; | 85 using task_manager::browsertest_util::WaitForTaskManagerRows; |
| 86 using ui::MenuModel; | 86 using ui::MenuModel; |
| 87 | 87 |
| 88 namespace { | 88 namespace { |
| 89 const char kEmptyResponsePath[] = "/close-socket"; | 89 const char kEmptyResponsePath[] = "/close-socket"; |
| 90 const char kRedirectResponsePath[] = "/server-redirect"; | 90 const char kRedirectResponsePath[] = "/server-redirect"; |
| 91 const char kUserAgentRedirectResponsePath[] = "/detect-user-agent"; | 91 const char kUserAgentRedirectResponsePath[] = "/detect-user-agent"; |
| 92 const char kCacheResponsePath[] = "/cache-control-response"; |
| 92 const char kRedirectResponseFullPath[] = | 93 const char kRedirectResponseFullPath[] = |
| 93 "/extensions/platform_apps/web_view/shim/guest_redirect.html"; | 94 "/extensions/platform_apps/web_view/shim/guest_redirect.html"; |
| 94 | 95 |
| 95 class EmptyHttpResponse : public net::test_server::HttpResponse { | 96 class EmptyHttpResponse : public net::test_server::HttpResponse { |
| 96 public: | 97 public: |
| 97 std::string ToResponseString() const override { return std::string(); } | 98 std::string ToResponseString() const override { return std::string(); } |
| 98 }; | 99 }; |
| 99 | 100 |
| 100 class TestInterstitialPageDelegate : public content::InterstitialPageDelegate { | 101 class TestInterstitialPageDelegate : public content::InterstitialPageDelegate { |
| 101 public: | 102 public: |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 | 250 |
| 250 private: | 251 private: |
| 251 bool requested_; | 252 bool requested_; |
| 252 bool checked_; | 253 bool checked_; |
| 253 scoped_refptr<content::MessageLoopRunner> request_message_loop_runner_; | 254 scoped_refptr<content::MessageLoopRunner> request_message_loop_runner_; |
| 254 scoped_refptr<content::MessageLoopRunner> check_message_loop_runner_; | 255 scoped_refptr<content::MessageLoopRunner> check_message_loop_runner_; |
| 255 | 256 |
| 256 DISALLOW_COPY_AND_ASSIGN(MockWebContentsDelegate); | 257 DISALLOW_COPY_AND_ASSIGN(MockWebContentsDelegate); |
| 257 }; | 258 }; |
| 258 | 259 |
| 259 class MockWebViewGuestDelegate : public extensions::WebViewGuestDelegate { | |
| 260 public: | |
| 261 explicit MockWebViewGuestDelegate(extensions::WebViewGuest* web_view_guest) | |
| 262 : web_view_guest_(web_view_guest), clear_cache_called_(false) {} | |
| 263 ~MockWebViewGuestDelegate() override {} | |
| 264 | |
| 265 // WebViewGuestDelegate implementation. | |
| 266 void ClearCache(base::Time remove_since, | |
| 267 const base::Closure& callback) override { | |
| 268 clear_cache_called_ = true; | |
| 269 base::MessageLoop::current()->PostTask(FROM_HERE, callback); | |
| 270 } | |
| 271 bool HandleContextMenu(const content::ContextMenuParams& params) override { | |
| 272 return false; | |
| 273 } | |
| 274 void OnAttachWebViewHelpers(content::WebContents* contents) override {} | |
| 275 void OnDidCommitProvisionalLoadForFrame(bool is_main_frame) override {} | |
| 276 void OnDidInitialize() override {} | |
| 277 void OnDocumentLoadedInFrame( | |
| 278 content::RenderFrameHost* render_frame_host) override {} | |
| 279 void OnGuestDestroyed() override {} | |
| 280 void OnShowContextMenu( | |
| 281 int request_id, | |
| 282 const WebViewGuestDelegate::MenuItemVector* items) override {} | |
| 283 | |
| 284 bool clear_cache_called() { return clear_cache_called_; } | |
| 285 | |
| 286 private: | |
| 287 extensions::WebViewGuest* web_view_guest_; | |
| 288 bool clear_cache_called_; | |
| 289 | |
| 290 DISALLOW_COPY_AND_ASSIGN(MockWebViewGuestDelegate); | |
| 291 }; | |
| 292 | |
| 293 // This class intercepts download request from the guest. | 260 // This class intercepts download request from the guest. |
| 294 class MockDownloadWebContentsDelegate : public content::WebContentsDelegate { | 261 class MockDownloadWebContentsDelegate : public content::WebContentsDelegate { |
| 295 public: | 262 public: |
| 296 explicit MockDownloadWebContentsDelegate( | 263 explicit MockDownloadWebContentsDelegate( |
| 297 content::WebContentsDelegate* orig_delegate) | 264 content::WebContentsDelegate* orig_delegate) |
| 298 : orig_delegate_(orig_delegate), | 265 : orig_delegate_(orig_delegate), |
| 299 waiting_for_decision_(false), | 266 waiting_for_decision_(false), |
| 300 expect_allow_(false), | 267 expect_allow_(false), |
| 301 decision_made_(false), | 268 decision_made_(false), |
| 302 last_download_allowed_(false) {} | 269 last_download_allowed_(false) {} |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 601 new net::test_server::BasicHttpResponse); | 568 new net::test_server::BasicHttpResponse); |
| 602 http_response->set_code(net::HTTP_MOVED_PERMANENTLY); | 569 http_response->set_code(net::HTTP_MOVED_PERMANENTLY); |
| 603 http_response->AddCustomHeader("Location", redirect_target.spec()); | 570 http_response->AddCustomHeader("Location", redirect_target.spec()); |
| 604 return http_response.Pass(); | 571 return http_response.Pass(); |
| 605 } | 572 } |
| 606 | 573 |
| 607 // Handles |request| by serving an empty response. | 574 // Handles |request| by serving an empty response. |
| 608 static scoped_ptr<net::test_server::HttpResponse> EmptyResponseHandler( | 575 static scoped_ptr<net::test_server::HttpResponse> EmptyResponseHandler( |
| 609 const std::string& path, | 576 const std::string& path, |
| 610 const net::test_server::HttpRequest& request) { | 577 const net::test_server::HttpRequest& request) { |
| 611 if (StartsWithASCII(path, request.relative_url, true)) { | 578 if (StartsWithASCII(path, request.relative_url, true)) |
| 612 return scoped_ptr<net::test_server::HttpResponse>( | 579 return scoped_ptr<net::test_server::HttpResponse>(new EmptyHttpResponse); |
| 613 new EmptyHttpResponse); | |
| 614 } | |
| 615 | 580 |
| 616 return scoped_ptr<net::test_server::HttpResponse>(); | 581 return scoped_ptr<net::test_server::HttpResponse>(); |
| 617 } | 582 } |
| 618 | 583 |
| 584 // Handles |request| by serving cache-able response. |
| 585 static scoped_ptr<net::test_server::HttpResponse> CacheControlResponseHandler( |
| 586 const std::string& path, |
| 587 const net::test_server::HttpRequest& request) { |
| 588 if (!StartsWithASCII(path, request.relative_url, true)) |
| 589 return scoped_ptr<net::test_server::HttpResponse>(); |
| 590 |
| 591 scoped_ptr<net::test_server::BasicHttpResponse> http_response( |
| 592 new net::test_server::BasicHttpResponse); |
| 593 http_response->AddCustomHeader("Cache-control", "max-age=3600"); |
| 594 http_response->set_content_type("text/plain"); |
| 595 http_response->set_content("dummy text"); |
| 596 return http_response.Pass(); |
| 597 } |
| 598 |
| 619 // Shortcut to return the current MenuManager. | 599 // Shortcut to return the current MenuManager. |
| 620 extensions::MenuManager* menu_manager() { | 600 extensions::MenuManager* menu_manager() { |
| 621 return extensions::MenuManager::Get(browser()->profile()); | 601 return extensions::MenuManager::Get(browser()->profile()); |
| 622 } | 602 } |
| 623 | 603 |
| 624 // This gets all the items that any extension has registered for possible | 604 // This gets all the items that any extension has registered for possible |
| 625 // inclusion in context menus. | 605 // inclusion in context menus. |
| 626 MenuItem::List GetItems() { | 606 MenuItem::List GetItems() { |
| 627 MenuItem::List result; | 607 MenuItem::List result; |
| 628 std::set<MenuItem::ExtensionKey> extension_ids = | 608 std::set<MenuItem::ExtensionKey> extension_ids = |
| (...skipping 26 matching lines...) Expand all Loading... |
| 655 embedded_test_server()->GetURL(kRedirectResponseFullPath))); | 635 embedded_test_server()->GetURL(kRedirectResponseFullPath))); |
| 656 | 636 |
| 657 embedded_test_server()->RegisterRequestHandler( | 637 embedded_test_server()->RegisterRequestHandler( |
| 658 base::Bind(&WebViewTest::EmptyResponseHandler, kEmptyResponsePath)); | 638 base::Bind(&WebViewTest::EmptyResponseHandler, kEmptyResponsePath)); |
| 659 | 639 |
| 660 embedded_test_server()->RegisterRequestHandler( | 640 embedded_test_server()->RegisterRequestHandler( |
| 661 base::Bind( | 641 base::Bind( |
| 662 &WebViewTest::UserAgentResponseHandler, | 642 &WebViewTest::UserAgentResponseHandler, |
| 663 kUserAgentRedirectResponsePath, | 643 kUserAgentRedirectResponsePath, |
| 664 embedded_test_server()->GetURL(kRedirectResponseFullPath))); | 644 embedded_test_server()->GetURL(kRedirectResponseFullPath))); |
| 645 |
| 646 embedded_test_server()->RegisterRequestHandler(base::Bind( |
| 647 &WebViewTest::CacheControlResponseHandler, kCacheResponsePath)); |
| 665 } | 648 } |
| 666 | 649 |
| 667 LoadAndLaunchPlatformApp(app_location.c_str(), "Launched"); | 650 LoadAndLaunchPlatformApp(app_location.c_str(), "Launched"); |
| 668 | 651 |
| 669 // Flush any pending events to make sure we start with a clean slate. | 652 // Flush any pending events to make sure we start with a clean slate. |
| 670 content::RunAllPendingInMessageLoop(); | 653 content::RunAllPendingInMessageLoop(); |
| 671 | 654 |
| 672 content::WebContents* embedder_web_contents = | 655 content::WebContents* embedder_web_contents = |
| 673 GetFirstAppWindowWebContents(); | 656 GetFirstAppWindowWebContents(); |
| 674 if (!embedder_web_contents) { | 657 if (!embedder_web_contents) { |
| (...skipping 1752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2427 return; | 2410 return; |
| 2428 #endif | 2411 #endif |
| 2429 | 2412 |
| 2430 ASSERT_TRUE(StartEmbeddedTestServer()); // For serving guest pages. | 2413 ASSERT_TRUE(StartEmbeddedTestServer()); // For serving guest pages. |
| 2431 ASSERT_TRUE(RunPlatformAppTestWithArg( | 2414 ASSERT_TRUE(RunPlatformAppTestWithArg( |
| 2432 "platform_apps/web_view/common", "cleardata")) | 2415 "platform_apps/web_view/common", "cleardata")) |
| 2433 << message_; | 2416 << message_; |
| 2434 } | 2417 } |
| 2435 | 2418 |
| 2436 IN_PROC_BROWSER_TEST_F(WebViewTest, ClearDataCache) { | 2419 IN_PROC_BROWSER_TEST_F(WebViewTest, ClearDataCache) { |
| 2437 LoadAppWithGuest("web_view/clear_data_cache"); | 2420 TestHelper("testClearCache", "web_view/clear_data_cache", NEEDS_TEST_SERVER); |
| 2438 content::WebContents* guest_web_contents = GetGuestWebContents(); | |
| 2439 auto guest = extensions::WebViewGuest::FromWebContents(guest_web_contents); | |
| 2440 ASSERT_TRUE(guest); | |
| 2441 scoped_ptr<extensions::WebViewGuestDelegate> mock_web_view_guest_delegate( | |
| 2442 new MockWebViewGuestDelegate(guest)); | |
| 2443 scoped_ptr<extensions::WebViewGuestDelegate> orig_web_view_guest_delegate = | |
| 2444 guest->SetDelegateForTesting(mock_web_view_guest_delegate.Pass()); | |
| 2445 | |
| 2446 ASSERT_TRUE(GetEmbedderWebContents()); | |
| 2447 ExtensionTestMessageListener clear_data_done_listener( | |
| 2448 "WebViewTest.CLEAR_DATA_DONE", false); | |
| 2449 EXPECT_TRUE(content::ExecuteScript( | |
| 2450 GetEmbedderWebContents(), base::StringPrintf("testClearDataCache()"))); | |
| 2451 EXPECT_TRUE(clear_data_done_listener.WaitUntilSatisfied()); | |
| 2452 | |
| 2453 // Reset delegate back to original once we're done mocking. | |
| 2454 mock_web_view_guest_delegate = | |
| 2455 guest->SetDelegateForTesting(orig_web_view_guest_delegate.Pass()); | |
| 2456 } | 2421 } |
| 2457 | 2422 |
| 2458 // This test is disabled on Win due to being flaky. http://crbug.com/294592 | 2423 // This test is disabled on Win due to being flaky. http://crbug.com/294592 |
| 2459 #if defined(OS_WIN) | 2424 #if defined(OS_WIN) |
| 2460 #define MAYBE_ConsoleMessage DISABLED_ConsoleMessage | 2425 #define MAYBE_ConsoleMessage DISABLED_ConsoleMessage |
| 2461 #else | 2426 #else |
| 2462 #define MAYBE_ConsoleMessage ConsoleMessage | 2427 #define MAYBE_ConsoleMessage ConsoleMessage |
| 2463 #endif | 2428 #endif |
| 2464 IN_PROC_BROWSER_TEST_F(WebViewTest, MAYBE_ConsoleMessage) { | 2429 IN_PROC_BROWSER_TEST_F(WebViewTest, MAYBE_ConsoleMessage) { |
| 2465 ASSERT_TRUE(RunPlatformAppTestWithArg( | 2430 ASSERT_TRUE(RunPlatformAppTestWithArg( |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2809 IN_PROC_BROWSER_TEST_F(WebViewTest, AllowTransparencyAndAllowScalingPropagate) { | 2774 IN_PROC_BROWSER_TEST_F(WebViewTest, AllowTransparencyAndAllowScalingPropagate) { |
| 2810 LoadAppWithGuest("web_view/simple"); | 2775 LoadAppWithGuest("web_view/simple"); |
| 2811 | 2776 |
| 2812 ASSERT_TRUE(!!GetGuestWebContents()); | 2777 ASSERT_TRUE(!!GetGuestWebContents()); |
| 2813 extensions::WebViewGuest* guest = | 2778 extensions::WebViewGuest* guest = |
| 2814 extensions::WebViewGuest::FromWebContents(GetGuestWebContents()); | 2779 extensions::WebViewGuest::FromWebContents(GetGuestWebContents()); |
| 2815 ASSERT_TRUE(guest->allow_transparency()); | 2780 ASSERT_TRUE(guest->allow_transparency()); |
| 2816 ASSERT_TRUE(guest->allow_scaling()); | 2781 ASSERT_TRUE(guest->allow_scaling()); |
| 2817 } | 2782 } |
| 2818 | 2783 |
| OLD | NEW |