Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4994)

Unified Diff: chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer_unittest.cc

Issue 2362033002: Showing previews UI for Offline Previews (Closed)
Patch Set: megjablon comments rebase Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer_unittest.cc
diff --git a/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer_unittest.cc
index a7bac516781f53f20103a36191e67f4e84e5e51b..7d595c2350c0fbcf78857ea338716df81f352f12 100644
--- a/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer_unittest.cc
@@ -1,49 +1,83 @@
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer.h"
+#include <memory>
#include <string>
#include "base/macros.h"
#include "base/optional.h"
#include "base/time/time.h"
+#include "chrome/browser/loader/chrome_navigation_data.h"
#include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h"
+#include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
#include "chrome/common/page_load_metrics/page_load_timing.h"
+#include "components/offline_pages/loaded_offline_page_info.h"
+#include "components/offline_pages/offline_page_item.h"
+#include "components/offline_pages/request_header/offline_page_header.h"
#include "content/public/browser/web_contents.h"
-
-namespace previews {
+#include "content/public/test/web_contents_tester.h"
+#include "net/base/request_priority.h"
+#include "net/url_request/url_request.h"
+#include "net/url_request/url_request_test_util.h"
namespace {
const char kDefaultTestUrl1[] = "https://google.com";
const char kDefaultTestUrl2[] = "https://example.com";
-class TestPreviewsPageLoadMetricsObserver
- : public PreviewsPageLoadMetricsObserver {
+class TestPreviewsObserver : public page_load_metrics::PageLoadMetricsObserver {
public:
- explicit TestPreviewsPageLoadMetricsObserver(bool offline_preview)
- : offline_preview_(offline_preview) {}
- ~TestPreviewsPageLoadMetricsObserver() override {}
+ TestPreviewsObserver(bool is_offline_preview,
+ content::WebContents* web_contents)
+ : is_offline_preview_(is_offline_preview), web_contents_(web_contents) {}
+ ~TestPreviewsObserver() override {}
- bool IsOfflinePreview(content::WebContents* web_contents) const override {
- return offline_preview_;
+ void set_is_offline_preview(bool is_offline_preview) {
+ is_offline_preview_ = is_offline_preview;
}
private:
- bool offline_preview_;
+ // Overridden from content::WebContentsObserver:
+ ObservePolicy OnCommit(
+ content::NavigationHandle* navigation_handle) override {
+ // Modify the navigation handle to contain LoadedOfflinePageInfo that claims
+ // to be an offline preview iff |is_offline_preview_| is true..
+ std::unique_ptr<net::URLRequest> request =
+ context_.CreateRequest(GURL("http://www.a.com"), net::IDLE, nullptr);
+ offline_pages::LoadedOfflinePageInfo::CreateInfoForRequest(
+ request.get(), base::MakeUnique<offline_pages::OfflinePageItem>(),
+ base::MakeUnique<offline_pages::OfflinePageHeader>(),
+ is_offline_preview_);
+ std::unique_ptr<offline_pages::LoadedOfflinePageInfo> info =
+ offline_pages::LoadedOfflinePageInfo::GetInfo(*request)->DeepCopy();
+ std::unique_ptr<ChromeNavigationData> chrome_navigation_data(
+ new ChromeNavigationData());
+ chrome_navigation_data->SetLoadedOfflinePageInfo(std::move(info));
+ content::WebContentsTester::For(web_contents_)
+ ->SetNavigationData(navigation_handle,
+ std::move(chrome_navigation_data));
+ return STOP_OBSERVING;
+ }
+
+ bool is_offline_preview_;
+ content::WebContents* web_contents_;
+ net::TestURLRequestContext context_;
};
} // namespace
+namespace previews {
+
class PreviewsPageLoadMetricsObserverTest
: public page_load_metrics::PageLoadMetricsObserverTestHarness {
public:
PreviewsPageLoadMetricsObserverTest() : is_offline_preview_(false) {}
void ResetTest() {
// Reset to the default testing state. Does not reset histogram state.
timing_.navigation_start = base::Time::FromDoubleT(1);
timing_.response_start = base::TimeDelta::FromSeconds(2);
timing_.parse_start = base::TimeDelta::FromSeconds(3);
@@ -51,21 +85,20 @@ class PreviewsPageLoadMetricsObserverTest
timing_.first_image_paint = base::TimeDelta::FromSeconds(5);
timing_.first_text_paint = base::TimeDelta::FromSeconds(6);
timing_.load_event_start = base::TimeDelta::FromSeconds(7);
PopulateRequiredTimingFields(&timing_);
}
void RunTest(bool is_offline_preview) {
is_offline_preview_ = is_offline_preview;
NavigateAndCommit(GURL(kDefaultTestUrl1));
SimulateTimingUpdate(timing_);
-
// Navigate again to force OnComplete, which happens when a new navigation
// occurs.
NavigateAndCommit(GURL(kDefaultTestUrl2));
}
void ValidateHistograms() {
ValidateHistogramsFor(
internal::kHistogramOfflinePreviewsDOMContentLoadedEventFired,
timing_.dom_content_loaded_event_start);
ValidateHistogramsFor(internal::kHistogramOfflinePreviewsFirstLayout,
@@ -87,21 +120,23 @@ class PreviewsPageLoadMetricsObserverTest
return;
histogram_tester().ExpectUniqueSample(
histogram_, static_cast<base::HistogramBase::Sample>(
event.value().InMilliseconds()),
1);
}
protected:
void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override {
tracker->AddObserver(base::WrapUnique(
- new TestPreviewsPageLoadMetricsObserver(is_offline_preview_)));
+ new TestPreviewsObserver(is_offline_preview_, web_contents())));
+ tracker->AddObserver(
+ base::WrapUnique(new PreviewsPageLoadMetricsObserver()));
}
private:
page_load_metrics::PageLoadTiming timing_;
bool is_offline_preview_;
DISALLOW_COPY_AND_ASSIGN(PreviewsPageLoadMetricsObserverTest);
};
TEST_F(PreviewsPageLoadMetricsObserverTest, NoPreview) {

Powered by Google App Engine
This is Rietveld 408576698