OLD | NEW |
| (Empty) |
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef CHROME_RENDERER_PAGE_LOAD_METRICS_FAKE_PAGE_TIMING_METRICS_IPC_SENDER_H_ | |
6 #define CHROME_RENDERER_PAGE_LOAD_METRICS_FAKE_PAGE_TIMING_METRICS_IPC_SENDER_H_ | |
7 | |
8 #include <vector> | |
9 | |
10 #include "chrome/common/page_load_metrics/page_load_timing.h" | |
11 #include "ipc/ipc_sender.h" | |
12 | |
13 namespace IPC { | |
14 class Message; | |
15 } | |
16 | |
17 namespace page_load_metrics { | |
18 | |
19 // IPC::Sender implementation for use in tests. Allows for setting and verifying | |
20 // basic expectations when sending PageLoadTiming IPCs. By default, | |
21 // FakePageTimingMetricsIPCSender will verify that expected and actual | |
22 // PageLoadTimings match on each invocation to ExpectPageLoadTiming() and | |
23 // Send(), as well as in the destructor. Tests can force additional validations | |
24 // by calling VerifyExpectedTimings. | |
25 // | |
26 // Expected PageLoadTimings are specified via ExpectPageLoadTiming, and actual | |
27 // PageLoadTimings are dispatched through Send(). When Send() is called, we | |
28 // verify that the actual PageLoadTimings dipatched through Send() match the | |
29 // expected PageLoadTimings provided via ExpectPageLoadTiming. | |
30 // | |
31 // Normally, gmock would be used in place of this class, but gmock is not | |
32 // compatible with structures that use aligned memory, and PageLoadTiming will | |
33 // soon use base::Optional which uses aligned memory, so we're forced to roll | |
34 // our own implementation here. See | |
35 // https://groups.google.com/forum/#!topic/googletestframework/W-Hud3j_c6I for | |
36 // more details. | |
37 class FakePageTimingMetricsIPCSender : public IPC::Sender { | |
38 public: | |
39 FakePageTimingMetricsIPCSender(); | |
40 ~FakePageTimingMetricsIPCSender() override; | |
41 | |
42 // Implementation of IPC::Sender. PageLoadMetricsMsg_TimingUpdated IPCs that | |
43 // send updated PageLoadTimings should be dispatched through this method. This | |
44 // method will verify that all PageLoadTiming update IPCs dispatched so far | |
45 // match with the expected PageLoadTimings passed to ExpectPageLoadTiming. | |
46 bool Send(IPC::Message* message) override; | |
47 | |
48 // PageLoadTimings that are expected to be sent through Send() should be | |
49 // passed to ExpectPageLoadTiming. | |
50 void ExpectPageLoadTiming(const mojom::PageLoadTiming& timing); | |
51 | |
52 // Forces verification that actual timings sent through Send match | |
53 // expected timings provided via ExpectPageLoadTiming. | |
54 void VerifyExpectedTimings() const; | |
55 | |
56 const std::vector<mojom::PageLoadTimingPtr>& expected_timings() const { | |
57 return expected_timings_; | |
58 } | |
59 const std::vector<mojom::PageLoadTimingPtr>& actual_timings() const { | |
60 return actual_timings_; | |
61 } | |
62 | |
63 private: | |
64 void OnTimingUpdated(const mojom::PageLoadTiming& timing, | |
65 mojom::PageLoadMetadata metadata); | |
66 | |
67 std::vector<mojom::PageLoadTimingPtr> expected_timings_; | |
68 std::vector<mojom::PageLoadTimingPtr> actual_timings_; | |
69 }; | |
70 | |
71 } // namespace page_load_metrics | |
72 | |
73 #endif // CHROME_RENDERER_PAGE_LOAD_METRICS_FAKE_PAGE_TIMING_METRICS_IPC_SENDER
_H_ | |
OLD | NEW |