| Index: chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc
|
| diff --git a/chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc b/chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc
|
| index ae6e19e7aa3ea47381fea5ed5fa3a5c7b26a61de..37f4093ab9c17385f7505511e1cdb8e9257b69f8 100644
|
| --- a/chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc
|
| +++ b/chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc
|
| @@ -72,57 +72,6 @@ ArticleEntry CreateEntry(std::string entry_id, std::string page_url) {
|
|
|
| } // namespace
|
|
|
| -// WebContents observer that stores reference to the current |RenderViewHost|.
|
| -class LoadSuccessObserver : public content::WebContentsObserver {
|
| - public:
|
| - explicit LoadSuccessObserver(content::WebContents* contents)
|
| - : content::WebContentsObserver(contents),
|
| - validated_url_(GURL()),
|
| - finished_load_(false),
|
| - load_failed_(false),
|
| - web_contents_(contents),
|
| - render_view_host_(NULL) {}
|
| -
|
| - virtual void DidFinishLoad(int64 frame_id,
|
| - const GURL& validated_url,
|
| - bool is_main_frame,
|
| - content::RenderViewHost* render_view_host)
|
| - OVERRIDE {
|
| - validated_url_ = validated_url;
|
| - finished_load_ = true;
|
| - render_view_host_ = render_view_host;
|
| - }
|
| -
|
| - virtual void DidFailProvisionalLoad(int64 frame_id,
|
| - const base::string16& frame_unique_name,
|
| - bool is_main_frame,
|
| - const GURL& validated_url,
|
| - int error_code,
|
| - const base::string16& error_description,
|
| - content::RenderViewHost* render_view_host)
|
| - OVERRIDE {
|
| - load_failed_ = true;
|
| - }
|
| -
|
| - const GURL& validated_url() const { return validated_url_; }
|
| - bool finished_load() const { return finished_load_; }
|
| - bool load_failed() const { return load_failed_; }
|
| - content::WebContents* web_contents() const { return web_contents_; }
|
| -
|
| - const content::RenderViewHost* render_view_host() const {
|
| - return render_view_host_;
|
| - }
|
| -
|
| - private:
|
| - GURL validated_url_;
|
| - bool finished_load_;
|
| - bool load_failed_;
|
| - content::WebContents* web_contents_;
|
| - content::RenderViewHost* render_view_host_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(LoadSuccessObserver);
|
| -};
|
| -
|
| class DomDistillerViewerSourceBrowserTest : public InProcessBrowserTest {
|
| public:
|
| DomDistillerViewerSourceBrowserTest() {}
|
| @@ -149,9 +98,6 @@ class DomDistillerViewerSourceBrowserTest : public InProcessBrowserTest {
|
| CreateStoreWithFakeDB(fake_db, FakeDB::EntryMap())),
|
| scoped_ptr<DistillerFactory>(distiller_factory_),
|
| scoped_ptr<DistillerPageFactory>(distiller_page_factory_));
|
| - MockDistillerPage* distiller_page = new MockDistillerPage();
|
| - EXPECT_CALL(*distiller_page_factory_, CreateDistillerPageImpl())
|
| - .WillOnce(testing::Return(distiller_page));
|
| fake_db->InitCallback(true);
|
| fake_db->LoadCallback(true);
|
| if (expect_distillation_) {
|
| @@ -161,83 +107,87 @@ class DomDistillerViewerSourceBrowserTest : public InProcessBrowserTest {
|
| EXPECT_CALL(*distiller_factory_, CreateDistillerImpl())
|
| .WillOnce(testing::Return(distiller));
|
| }
|
| + if (expect_distiller_page_) {
|
| + MockDistillerPage* distiller_page = new MockDistillerPage();
|
| + EXPECT_CALL(*distiller_page_factory_, CreateDistillerPageImpl())
|
| + .WillOnce(testing::Return(distiller_page));
|
| + }
|
| return service;
|
| }
|
|
|
| - void ViewSingleDistilledPage(const GURL& url);
|
| + void ViewSingleDistilledPage(const GURL& url,
|
| + const std::string& expected_mime_type);
|
| // Database entries.
|
| static FakeDB::EntryMap* database_model_;
|
| static bool expect_distillation_;
|
| + static bool expect_distiller_page_;
|
| static MockDistillerFactory* distiller_factory_;
|
| };
|
|
|
| FakeDB::EntryMap* DomDistillerViewerSourceBrowserTest::database_model_;
|
| bool DomDistillerViewerSourceBrowserTest::expect_distillation_ = false;
|
| +bool DomDistillerViewerSourceBrowserTest::expect_distiller_page_ = false;
|
| MockDistillerFactory* DomDistillerViewerSourceBrowserTest::distiller_factory_ =
|
| NULL;
|
|
|
| // The DomDistillerViewerSource renders untrusted content, so ensure no bindings
|
| // are enabled when the article exists in the database.
|
| -// Flakiness: crbug.com/356866
|
| IN_PROC_BROWSER_TEST_F(DomDistillerViewerSourceBrowserTest,
|
| - DISABLED_NoWebUIBindingsArticleExists) {
|
| + NoWebUIBindingsArticleExists) {
|
| // Ensure there is one item in the database, which will trigger distillation.
|
| const ArticleEntry entry = CreateEntry("DISTILLED", "http://example.com/1");
|
| AddEntry(entry, database_model_);
|
| expect_distillation_ = true;
|
| + expect_distiller_page_ = true;
|
| const GURL url = url_utils::GetDistillerViewUrlFromEntryId(
|
| chrome::kDomDistillerScheme, entry.entry_id());
|
| - ViewSingleDistilledPage(url);
|
| + ViewSingleDistilledPage(url, "text/html");
|
| }
|
|
|
| // The DomDistillerViewerSource renders untrusted content, so ensure no bindings
|
| // are enabled when the article is not found.
|
| -// Flakiness: crbug.com/356866
|
| IN_PROC_BROWSER_TEST_F(DomDistillerViewerSourceBrowserTest,
|
| - DISABLED_NoWebUIBindingsArticleNotFound) {
|
| + NoWebUIBindingsArticleNotFound) {
|
| // The article does not exist, so assume no distillation will happen.
|
| expect_distillation_ = false;
|
| - const GURL url(std::string(chrome::kDomDistillerScheme) + "://" +
|
| - base::GenerateGUID() + "/");
|
| - ViewSingleDistilledPage(url);
|
| + expect_distiller_page_ = false;
|
| + const GURL url = url_utils::GetDistillerViewUrlFromEntryId(
|
| + chrome::kDomDistillerScheme, "DOES_NOT_EXIST");
|
| + ViewSingleDistilledPage(url, "text/html");
|
| }
|
|
|
| // The DomDistillerViewerSource renders untrusted content, so ensure no bindings
|
| // are enabled when requesting to view an arbitrary URL.
|
| -// Flakiness: crbug.com/356866
|
| IN_PROC_BROWSER_TEST_F(DomDistillerViewerSourceBrowserTest,
|
| - DISABLED_NoWebUIBindingsViewUrl) {
|
| + NoWebUIBindingsViewUrl) {
|
| // We should expect distillation for any valid URL.
|
| expect_distillation_ = true;
|
| + expect_distiller_page_ = true;
|
| GURL view_url("http://www.example.com/1");
|
| const GURL url = url_utils::GetDistillerViewUrlFromUrl(
|
| chrome::kDomDistillerScheme, view_url);
|
| - ViewSingleDistilledPage(url);
|
| + ViewSingleDistilledPage(url, "text/html");
|
| }
|
|
|
| void DomDistillerViewerSourceBrowserTest::ViewSingleDistilledPage(
|
| - const GURL& url) {
|
| + const GURL& url,
|
| + const std::string& expected_mime_type) {
|
| // Ensure the correct factory is used for the DomDistillerService.
|
| dom_distiller::DomDistillerServiceFactory::GetInstance()
|
| ->SetTestingFactoryAndUse(browser()->profile(), &Build);
|
|
|
| - // Setup observer to inspect the RenderViewHost after committed navigation.
|
| - content::WebContents* contents =
|
| - browser()->tab_strip_model()->GetActiveWebContents();
|
| - LoadSuccessObserver observer(contents);
|
| -
|
| // Navigate to a URL which the source should respond to.
|
| ui_test_utils::NavigateToURL(browser(), url);
|
|
|
| - // A navigation should have succeeded to the correct URL.
|
| - ASSERT_FALSE(observer.load_failed());
|
| - ASSERT_TRUE(observer.finished_load());
|
| - ASSERT_EQ(url, observer.validated_url());
|
| - // Ensure no bindings.
|
| - const content::RenderViewHost* render_view_host = observer.render_view_host();
|
| - ASSERT_EQ(0, render_view_host->GetEnabledBindings());
|
| - // The MIME-type should always be text/html for the distilled articles.
|
| - EXPECT_EQ("text/html", observer.web_contents()->GetContentsMimeType());
|
| + // Ensure no bindings for the loaded |url|.
|
| + content::WebContents* contents_after_nav =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + ASSERT_TRUE(contents_after_nav != NULL);
|
| + EXPECT_EQ(url, contents_after_nav->GetLastCommittedURL());
|
| + const content::RenderViewHost* render_view_host =
|
| + contents_after_nav->GetRenderViewHost();
|
| + EXPECT_EQ(0, render_view_host->GetEnabledBindings());
|
| + EXPECT_EQ(expected_mime_type, contents_after_nav->GetContentsMimeType());
|
| }
|
|
|
| // The DomDistillerViewerSource renders untrusted content, so ensure no bindings
|
| @@ -245,31 +195,36 @@ void DomDistillerViewerSourceBrowserTest::ViewSingleDistilledPage(
|
| // Chrome or provided by an extension.
|
| IN_PROC_BROWSER_TEST_F(DomDistillerViewerSourceBrowserTest,
|
| NoWebUIBindingsDisplayCSS) {
|
| - // Setup observer to inspect the RenderViewHost after committed navigation.
|
| - content::WebContents* contents =
|
| - browser()->tab_strip_model()->GetActiveWebContents();
|
| - LoadSuccessObserver observer(contents);
|
| -
|
| + expect_distillation_ = false;
|
| + expect_distiller_page_ = false;
|
| // Navigate to a URL which the source should respond to with CSS.
|
| std::string url_without_scheme = std::string("://foobar/") + kViewerCssPath;
|
| GURL url(chrome::kDomDistillerScheme + url_without_scheme);
|
| - ui_test_utils::NavigateToURL(browser(), url);
|
| + ViewSingleDistilledPage(url, "text/css");
|
| +}
|
|
|
| - // A navigation should have succeeded to the correct URL.
|
| - ASSERT_FALSE(observer.load_failed());
|
| - ASSERT_TRUE(observer.finished_load());
|
| - ASSERT_EQ(url, observer.validated_url());
|
| - // Ensure no bindings.
|
| - const content::RenderViewHost* render_view_host = observer.render_view_host();
|
| - ASSERT_EQ(0, render_view_host->GetEnabledBindings());
|
| - // The MIME-type should always be text/css for the CSS resources.
|
| - EXPECT_EQ("text/css", observer.web_contents()->GetContentsMimeType());
|
| +IN_PROC_BROWSER_TEST_F(DomDistillerViewerSourceBrowserTest,
|
| + EmptyURLShouldNotCrash) {
|
| + // This is a bogus URL, so no distillation will happen.
|
| + expect_distillation_ = false;
|
| + expect_distiller_page_ = false;
|
| + const GURL url(std::string(chrome::kDomDistillerScheme) + "://bogus/");
|
| + ViewSingleDistilledPage(url, "text/html");
|
| }
|
|
|
| +IN_PROC_BROWSER_TEST_F(DomDistillerViewerSourceBrowserTest,
|
| + InvalidURLShouldNotCrash) {
|
| + // This is a bogus URL, so no distillation will happen.
|
| + expect_distillation_ = false;
|
| + expect_distiller_page_ = false;
|
| + const GURL url(std::string(chrome::kDomDistillerScheme) + "://bogus/foobar");
|
| + ViewSingleDistilledPage(url, "text/html");
|
| +}
|
|
|
| IN_PROC_BROWSER_TEST_F(DomDistillerViewerSourceBrowserTest,
|
| MultiPageArticle) {
|
| expect_distillation_ = false;
|
| + expect_distiller_page_ = true;
|
| dom_distiller::DomDistillerServiceFactory::GetInstance()
|
| ->SetTestingFactoryAndUse(browser()->profile(), &Build);
|
|
|
| @@ -285,7 +240,6 @@ IN_PROC_BROWSER_TEST_F(DomDistillerViewerSourceBrowserTest,
|
| // Setup observer to inspect the RenderViewHost after committed navigation.
|
| content::WebContents* contents =
|
| browser()->tab_strip_model()->GetActiveWebContents();
|
| - LoadSuccessObserver observer(contents);
|
|
|
| // Navigate to a URL and wait for the distiller to flush contents to the page.
|
| GURL url(dom_distiller::url_utils::GetDistillerViewUrlFromUrl(
|
|
|