OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 <deque> | 5 #include <deque> |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 #include "chrome/common/chrome_paths.h" | 39 #include "chrome/common/chrome_paths.h" |
40 #include "chrome/common/chrome_switches.h" | 40 #include "chrome/common/chrome_switches.h" |
41 #include "chrome/common/pref_names.h" | 41 #include "chrome/common/pref_names.h" |
42 #include "chrome/test/base/in_process_browser_test.h" | 42 #include "chrome/test/base/in_process_browser_test.h" |
43 #include "chrome/test/base/ui_test_utils.h" | 43 #include "chrome/test/base/ui_test_utils.h" |
44 #include "content/public/browser/devtools_agent_host_registry.h" | 44 #include "content/public/browser/devtools_agent_host_registry.h" |
45 #include "content/public/browser/devtools_client_host.h" | 45 #include "content/public/browser/devtools_client_host.h" |
46 #include "content/public/browser/devtools_manager.h" | 46 #include "content/public/browser/devtools_manager.h" |
47 #include "content/public/browser/notification_service.h" | 47 #include "content/public/browser/notification_service.h" |
48 #include "content/public/browser/render_view_host.h" | 48 #include "content/public/browser/render_view_host.h" |
| 49 #include "content/public/browser/session_storage_namespace.h" |
49 #include "content/public/browser/web_contents.h" | 50 #include "content/public/browser/web_contents.h" |
50 #include "content/public/common/url_constants.h" | 51 #include "content/public/common/url_constants.h" |
51 #include "content/public/test/browser_test_utils.h" | 52 #include "content/public/test/browser_test_utils.h" |
52 #include "content/public/test/test_navigation_observer.h" | 53 #include "content/public/test/test_navigation_observer.h" |
53 #include "content/public/test/test_utils.h" | 54 #include "content/public/test/test_utils.h" |
54 #include "grit/generated_resources.h" | 55 #include "grit/generated_resources.h" |
55 #include "net/base/mock_host_resolver.h" | 56 #include "net/base/mock_host_resolver.h" |
56 #include "net/url_request/url_request_context.h" | 57 #include "net/url_request/url_request_context.h" |
57 #include "net/url_request/url_request_context_getter.h" | 58 #include "net/url_request/url_request_context_getter.h" |
58 #include "ui/base/l10n/l10n_util.h" | 59 #include "ui/base/l10n/l10n_util.h" |
59 | 60 |
60 using content::BrowserThread; | 61 using content::BrowserThread; |
| 62 using content::SessionStorageNamespaceMap; |
61 using content::DevToolsAgentHost; | 63 using content::DevToolsAgentHost; |
62 using content::DevToolsAgentHostRegistry; | 64 using content::DevToolsAgentHostRegistry; |
63 using content::DevToolsClientHost; | 65 using content::DevToolsClientHost; |
64 using content::DevToolsManager; | 66 using content::DevToolsManager; |
65 using content::NavigationController; | 67 using content::NavigationController; |
66 using content::OpenURLParams; | 68 using content::OpenURLParams; |
67 using content::Referrer; | 69 using content::Referrer; |
68 using content::RenderViewHost; | 70 using content::RenderViewHost; |
69 using content::RenderWidgetHost; | 71 using content::RenderWidgetHost; |
70 using content::WebContents; | 72 using content::WebContents; |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 const gfx::Size& size) OVERRIDE { | 241 const gfx::Size& size) OVERRIDE { |
240 PrerenderContents::AddPendingPrerender( | 242 PrerenderContents::AddPendingPrerender( |
241 weak_prerender_handle, url, referrer, size); | 243 weak_prerender_handle, url, referrer, size); |
242 if (expected_pending_prerenders_ > 0 && | 244 if (expected_pending_prerenders_ > 0 && |
243 pending_prerenders().size() == expected_pending_prerenders_) { | 245 pending_prerenders().size() == expected_pending_prerenders_) { |
244 MessageLoop::current()->Quit(); | 246 MessageLoop::current()->Quit(); |
245 } | 247 } |
246 } | 248 } |
247 | 249 |
248 virtual WebContents* CreateWebContents( | 250 virtual WebContents* CreateWebContents( |
249 content::SessionStorageNamespace* session_storage_namespace) OVERRIDE { | 251 const SessionStorageNamespaceMap& session_storage_namespace_map) |
| 252 OVERRIDE { |
250 WebContents* web_contents = PrerenderContents::CreateWebContents( | 253 WebContents* web_contents = PrerenderContents::CreateWebContents( |
251 session_storage_namespace); | 254 session_storage_namespace_map); |
252 string16 ready_title = ASCIIToUTF16(kReadyTitle); | 255 string16 ready_title = ASCIIToUTF16(kReadyTitle); |
253 if (prerender_should_wait_for_ready_title_) | 256 if (prerender_should_wait_for_ready_title_) |
254 ready_title_watcher_.reset(new content::TitleWatcher( | 257 ready_title_watcher_.reset(new content::TitleWatcher( |
255 web_contents, ready_title)); | 258 web_contents, ready_title)); |
256 return web_contents; | 259 return web_contents; |
257 } | 260 } |
258 | 261 |
259 void WaitForPrerenderToHaveReadyTitleIfRequired() { | 262 void WaitForPrerenderToHaveReadyTitleIfRequired() { |
260 if (ready_title_watcher_.get()) { | 263 if (ready_title_watcher_.get()) { |
261 string16 ready_title = ASCIIToUTF16(kReadyTitle); | 264 string16 ready_title = ASCIIToUTF16(kReadyTitle); |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 #if defined(ENABLE_SAFE_BROWSING) | 513 #if defined(ENABLE_SAFE_BROWSING) |
511 safe_browsing_factory_(new TestSafeBrowsingServiceFactory()), | 514 safe_browsing_factory_(new TestSafeBrowsingServiceFactory()), |
512 #endif | 515 #endif |
513 use_https_src_server_(false), | 516 use_https_src_server_(false), |
514 call_javascript_(true), | 517 call_javascript_(true), |
515 loader_path_("files/prerender/prerender_loader.html"), | 518 loader_path_("files/prerender/prerender_loader.html"), |
516 explicitly_set_browser_(NULL) {} | 519 explicitly_set_browser_(NULL) {} |
517 | 520 |
518 virtual ~PrerenderBrowserTest() {} | 521 virtual ~PrerenderBrowserTest() {} |
519 | 522 |
520 content::SessionStorageNamespace* GetSessionStorageNamespace() const { | 523 const SessionStorageNamespaceMap& GetSessionStorageNamespaceMap() const { |
521 TabContents* tab_contents = | 524 TabContents* tab_contents = |
522 current_browser()->tab_strip_model()->GetActiveTabContents(); | 525 current_browser()->tab_strip_model()->GetActiveTabContents(); |
523 if (!tab_contents) | 526 if (!tab_contents) |
524 return NULL; | 527 return kEmptyMap; |
525 return tab_contents->web_contents()->GetController() | 528 return tab_contents->web_contents()->GetController() |
526 .GetSessionStorageNamespaceMap().find("")->second; | 529 .GetSessionStorageNamespaceMap(); |
527 } | 530 } |
528 | 531 |
529 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { | 532 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
530 #if defined(ENABLE_SAFE_BROWSING) | 533 #if defined(ENABLE_SAFE_BROWSING) |
531 SafeBrowsingService::RegisterFactory(safe_browsing_factory_.get()); | 534 SafeBrowsingService::RegisterFactory(safe_browsing_factory_.get()); |
532 #endif | 535 #endif |
533 } | 536 } |
534 | 537 |
535 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { | 538 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
536 command_line->AppendSwitchASCII(switches::kPrerenderMode, | 539 command_line->AppendSwitchASCII(switches::kPrerenderMode, |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
737 GURL dest_url = test_server()->GetURL(dest_html_file); | 740 GURL dest_url = test_server()->GetURL(dest_html_file); |
738 NavigateToURLImpl(dest_url, CURRENT_TAB); | 741 NavigateToURLImpl(dest_url, CURRENT_TAB); |
739 } | 742 } |
740 | 743 |
741 bool UrlIsInPrerenderManager(const std::string& html_file) const { | 744 bool UrlIsInPrerenderManager(const std::string& html_file) const { |
742 return UrlIsInPrerenderManager(test_server()->GetURL(html_file)); | 745 return UrlIsInPrerenderManager(test_server()->GetURL(html_file)); |
743 } | 746 } |
744 | 747 |
745 bool UrlIsInPrerenderManager(const GURL& url) const { | 748 bool UrlIsInPrerenderManager(const GURL& url) const { |
746 return GetPrerenderManager()->FindPrerenderData( | 749 return GetPrerenderManager()->FindPrerenderData( |
747 url, GetSessionStorageNamespace()) != NULL; | 750 url, GetSessionStorageNamespaceMap()) != NULL; |
748 } | 751 } |
749 | 752 |
750 // This only checks to see if the URL is pending in our TestPrerenderContents. | 753 // This only checks to see if the URL is pending in our TestPrerenderContents. |
751 bool UrlIsPending(const std::string& html_file) const { | 754 bool UrlIsPending(const std::string& html_file) const { |
752 TestPrerenderContents* test_prerender_contents = GetPrerenderContents(); | 755 TestPrerenderContents* test_prerender_contents = GetPrerenderContents(); |
753 if (!test_prerender_contents) | 756 if (!test_prerender_contents) |
754 return false; | 757 return false; |
755 GURL dest_url = test_server()->GetURL(html_file); | 758 GURL dest_url = test_server()->GetURL(html_file); |
756 return test_prerender_contents->UrlIsPending(dest_url); | 759 return test_prerender_contents->UrlIsPending(dest_url); |
757 } | 760 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
799 | 802 |
800 #if defined(ENABLE_SAFE_BROWSING) | 803 #if defined(ENABLE_SAFE_BROWSING) |
801 FakeSafeBrowsingService* GetSafeBrowsingService() { | 804 FakeSafeBrowsingService* GetSafeBrowsingService() { |
802 return safe_browsing_factory_->most_recent_service(); | 805 return safe_browsing_factory_->most_recent_service(); |
803 } | 806 } |
804 #endif | 807 #endif |
805 | 808 |
806 TestPrerenderContents* GetPrerenderContents() const { | 809 TestPrerenderContents* GetPrerenderContents() const { |
807 PrerenderManager::PrerenderData* prerender_data = | 810 PrerenderManager::PrerenderData* prerender_data = |
808 GetPrerenderManager()->FindPrerenderData( | 811 GetPrerenderManager()->FindPrerenderData( |
809 dest_url_, GetSessionStorageNamespace()); | 812 dest_url_, GetSessionStorageNamespaceMap()); |
810 return static_cast<TestPrerenderContents*>( | 813 return static_cast<TestPrerenderContents*>( |
811 prerender_data ? prerender_data->contents() : NULL); | 814 prerender_data ? prerender_data->contents() : NULL); |
812 } | 815 } |
813 | 816 |
814 void set_loader_path(const std::string& path) { | 817 void set_loader_path(const std::string& path) { |
815 loader_path_ = path; | 818 loader_path_ = path; |
816 } | 819 } |
817 | 820 |
818 void set_loader_query_and_fragment(const std::string& query_and_fragment) { | 821 void set_loader_query_and_fragment(const std::string& query_and_fragment) { |
819 loader_query_and_fragment_ = query_and_fragment; | 822 loader_query_and_fragment_ = query_and_fragment; |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1028 WaitForLoadPrerenderContentsFactory* prerender_contents_factory_; | 1031 WaitForLoadPrerenderContentsFactory* prerender_contents_factory_; |
1029 #if defined(ENABLE_SAFE_BROWSING) | 1032 #if defined(ENABLE_SAFE_BROWSING) |
1030 scoped_ptr<TestSafeBrowsingServiceFactory> safe_browsing_factory_; | 1033 scoped_ptr<TestSafeBrowsingServiceFactory> safe_browsing_factory_; |
1031 #endif | 1034 #endif |
1032 GURL dest_url_; | 1035 GURL dest_url_; |
1033 bool use_https_src_server_; | 1036 bool use_https_src_server_; |
1034 bool call_javascript_; | 1037 bool call_javascript_; |
1035 std::string loader_path_; | 1038 std::string loader_path_; |
1036 std::string loader_query_and_fragment_; | 1039 std::string loader_query_and_fragment_; |
1037 Browser* explicitly_set_browser_; | 1040 Browser* explicitly_set_browser_; |
| 1041 const SessionStorageNamespaceMap kEmptyMap; // Used for an error return. |
1038 }; | 1042 }; |
1039 | 1043 |
1040 // Checks that a page is correctly prerendered in the case of a | 1044 // Checks that a page is correctly prerendered in the case of a |
1041 // <link rel=prerender> tag and then loaded into a tab in response to a | 1045 // <link rel=prerender> tag and then loaded into a tab in response to a |
1042 // navigation. | 1046 // navigation. |
1043 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { | 1047 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { |
1044 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 1048 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
1045 NavigateToDestURL(); | 1049 NavigateToDestURL(); |
1046 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 1050 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
1047 } | 1051 } |
(...skipping 1335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2383 ResultCatcher catcher; | 2387 ResultCatcher catcher; |
2384 | 2388 |
2385 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 2389 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
2386 NavigateToDestURL(); | 2390 NavigateToDestURL(); |
2387 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 2391 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
2388 | 2392 |
2389 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); | 2393 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); |
2390 } | 2394 } |
2391 | 2395 |
2392 } // namespace prerender | 2396 } // namespace prerender |
OLD | NEW |