Chromium Code Reviews| Index: chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc |
| diff --git a/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc b/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc |
| index 78ffc3226fe4942b391eb4eca82d348e638988c2..e5a7b708ad1596bc329380c54f7810612c0916d8 100644 |
| --- a/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc |
| +++ b/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc |
| @@ -3,10 +3,13 @@ |
| // found in the LICENSE file. |
| #include "base/macros.h" |
| +#include "chrome/browser/ui/browser.h" |
| +#include "chrome/browser/ui/tabs/tab_strip_model.h" |
| #include "chrome/common/url_constants.h" |
| #include "chrome/test/base/in_process_browser_test.h" |
| #include "chrome/test/base/ui_test_utils.h" |
| #include "content/public/browser/navigation_details.h" |
| +#include "content/public/browser/navigation_handle.h" |
| #include "content/public/browser/notification_registrar.h" |
| #include "content/public/browser/notification_service.h" |
| #include "content/public/browser/notification_source.h" |
| @@ -44,6 +47,34 @@ class NavigationNotificationObserver : public content::NotificationObserver { |
| DISALLOW_COPY_AND_ASSIGN(NavigationNotificationObserver); |
| }; |
| +class NavigationObserver : public content::WebContentsObserver { |
| +public: |
| + enum NavigationResult { |
| + NOT_FINISHED, |
| + ERROR_PAGE, |
| + NON_ERROR_PAGE, |
|
Dan Beam
2016/08/30 21:35:17
nit: NON_ERROR -> SUCCESS or something?
Peter Kasting
2016/08/30 21:55:55
Eschew unnecessary obfuscation?
SUCCESS is a perf
|
| + }; |
| + |
| + explicit NavigationObserver(content::WebContents* web_contents) |
| + : WebContentsObserver(web_contents), navigation_result_(NOT_FINISHED) {} |
| + ~NavigationObserver() override = default; |
| + |
| + void DidFinishNavigation( |
| + content::NavigationHandle* navigation_handle) override { |
| + navigation_result_ = |
| + navigation_handle->IsErrorPage() ? ERROR_PAGE : NON_ERROR_PAGE; |
| + } |
| + |
| + NavigationResult navigation_result() const { return navigation_result_; } |
| + |
| + void Reset() { navigation_result_ = NOT_FINISHED; } |
| + |
| + private: |
| + NavigationResult navigation_result_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(NavigationObserver); |
| +}; |
| + |
| } // namespace |
| typedef InProcessBrowserTest ChromeURLDataManagerTest; |
| @@ -57,11 +88,34 @@ IN_PROC_BROWSER_TEST_F(ChromeURLDataManagerTest, 200) { |
| EXPECT_EQ(200, observer.http_status_code()); |
| } |
| +// Makes sure browser does not crash when navigating to an unknown resource. |
| +IN_PROC_BROWSER_TEST_F(ChromeURLDataManagerTest, UnknownResource) { |
| + // Known resource |
| + NavigationObserver observer( |
| + browser()->tab_strip_model()->GetActiveWebContents()); |
| + ui_test_utils::NavigateToURL( |
| + browser(), GURL("chrome://theme/IDR_SETTINGS_FAVICON")); |
| + EXPECT_EQ(NavigationObserver::NON_ERROR_PAGE, observer.navigation_result()); |
| + |
| + // Unknown resource |
| + observer.Reset(); |
| + ui_test_utils::NavigateToURL( |
| + browser(), GURL("chrome://theme/IDR_ASDFGHJKL")); |
| + EXPECT_EQ(NavigationObserver::ERROR_PAGE, observer.navigation_result()); |
| +} |
| + |
| // Makes sure browser does not crash when the resource scale is very large. |
| -IN_PROC_BROWSER_TEST_F(ChromeURLDataManagerTest, ResourceScaleTest) { |
| +IN_PROC_BROWSER_TEST_F(ChromeURLDataManagerTest, LargeResourceScale) { |
| + // Valid scale |
| + NavigationObserver observer( |
| + browser()->tab_strip_model()->GetActiveWebContents()); |
| ui_test_utils::NavigateToURL( |
| browser(), GURL("chrome://theme/IDR_SETTINGS_FAVICON@2x")); |
| + EXPECT_EQ(NavigationObserver::NON_ERROR_PAGE, observer.navigation_result()); |
| + // Unreasonably large scale |
| + observer.Reset(); |
| ui_test_utils::NavigateToURL( |
| browser(), GURL("chrome://theme/IDR_SETTINGS_FAVICON@99999x")); |
| + EXPECT_EQ(NavigationObserver::NON_ERROR_PAGE, observer.navigation_result()); |
| } |