Chromium Code Reviews| Index: chrome/renderer/page_load_metrics/fake_page_timing_sender.h |
| diff --git a/chrome/renderer/page_load_metrics/fake_page_timing_sender.h b/chrome/renderer/page_load_metrics/fake_page_timing_sender.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..da7ba95b6edd913b4c4f06d5d95bd3e4f73adb4f |
| --- /dev/null |
| +++ b/chrome/renderer/page_load_metrics/fake_page_timing_sender.h |
| @@ -0,0 +1,75 @@ |
| +// Copyright (c) 2017 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. |
| + |
| +#ifndef CHROME_RENDERER_PAGE_LOAD_METRICS_FAKE_PAGE_TIMING_SENDER_H_ |
| +#define CHROME_RENDERER_PAGE_LOAD_METRICS_FAKE_PAGE_TIMING_SENDER_H_ |
| + |
| +#include "chrome/common/page_load_metrics/page_load_metrics.mojom.h" |
| +#include "chrome/common/page_load_metrics/page_load_timing.h" |
| +#include "chrome/renderer/page_load_metrics/page_timing_sender.h" |
| + |
| +namespace page_load_metrics { |
| + |
| +// PageTimingSender implementation for use in tests. Allows for setting and |
| +// verifying basic expectations when sending PageLoadTiming. By default, |
| +// FakePageTimingSender will verify that expected and actual |
| +// PageLoadTimings match on each invocation to ExpectPageLoadTiming() and |
| +// SendTiming(), as well as in the destructor. Tests can force additional |
| +// validations by calling VerifyExpectedTimings. |
| +// |
| +// Expected PageLoadTimings are specified via ExpectPageLoadTiming, and actual |
| +// PageLoadTimings are dispatched through SendTiming(). When SendTiming() is |
| +// called, we verify that the actual PageLoadTimings dipatched through |
| +// SendTiming() match the expected PageLoadTimings provided via |
| +// ExpectPageLoadTiming. |
| +// |
| +// Normally, gmock would be used in place of this class, but gmock is not |
| +// compatible with structures that use aligned memory, and PageLoadTiming will |
| +// soon use base::Optional which uses aligned memory, so we're forced to roll |
|
Bryan McQuade
2017/05/19 14:06:18
this comment can be updated - it's out of date - t
lpy
2017/05/19 23:52:38
Done.
|
| +// our own implementation here. See |
| +// https://groups.google.com/forum/#!topic/googletestframework/W-Hud3j_c6I for |
| +// more details. |
| +class FakePageTimingSender : public PageTimingSender { |
| + public: |
| + class PageTimingValidator { |
|
Bryan McQuade
2017/05/19 14:06:18
thanks for factoring this out into its own class -
|
| + public: |
| + PageTimingValidator(); |
| + ~PageTimingValidator(); |
| + // PageLoadTimings that are expected to be sent through SendTiming() should |
| + // be passed to ExpectPageLoadTiming. |
| + void ExpectPageLoadTiming(const mojom::PageLoadTiming& timing); |
| + |
| + // Forces verification that actual timings sent through SendTiming() match |
| + // expected timings provided via ExpectPageLoadTiming. |
| + void VerifyExpectedTimings() const; |
| + |
| + const std::vector<mojom::PageLoadTimingPtr>& expected_timings() const { |
| + return expected_timings_; |
| + } |
| + const std::vector<mojom::PageLoadTimingPtr>& actual_timings() const { |
| + return actual_timings_; |
| + } |
| + |
| + void UpdateTiming(const mojom::PageLoadTimingPtr& timing, |
| + const mojom::PageLoadMetadataPtr& metadata); |
| + |
| + private: |
| + std::vector<mojom::PageLoadTimingPtr> expected_timings_; |
| + std::vector<mojom::PageLoadTimingPtr> actual_timings_; |
| + DISALLOW_COPY_AND_ASSIGN(PageTimingValidator); |
| + }; |
| + |
| + explicit FakePageTimingSender(PageTimingValidator* validator); |
| + ~FakePageTimingSender() override; |
| + void SendTiming(const mojom::PageLoadTimingPtr& timing, |
| + const mojom::PageLoadMetadataPtr& metadata) override; |
| + |
| + private: |
| + PageTimingValidator* validator_; |
|
Bryan McQuade
2017/05/19 14:06:18
nit: since this is a constructor arg, can use
cons
lpy
2017/05/19 23:52:38
Done.
|
| + DISALLOW_COPY_AND_ASSIGN(FakePageTimingSender); |
| +}; |
| + |
| +} // namespace page_load_metrics |
| + |
| +#endif // CHROME_RENDERER_PAGE_LOAD_METRICS_FAKE_PAGE_TIMING_SENDER_H_ |