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

Side by Side Diff: third_party/WebKit/Source/modules/notifications/NotificationImageLoaderTest.cpp

Issue 2540423003: Revert "Notifications: Split up image loading histograms by image type" (Closed)
Patch Set: Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 Chromium Authors. All rights reserved. 1 // Copyright 2016 Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/notifications/NotificationImageLoader.h" 5 #include "modules/notifications/NotificationImageLoader.h"
6 6
7 #include "core/dom/ExecutionContext.h" 7 #include "core/dom/ExecutionContext.h"
8 #include "core/fetch/MemoryCache.h" 8 #include "core/fetch/MemoryCache.h"
9 #include "core/testing/DummyPageHolder.h" 9 #include "core/testing/DummyPageHolder.h"
10 #include "platform/testing/HistogramTester.h"
11 #include "platform/testing/TestingPlatformSupport.h" 10 #include "platform/testing/TestingPlatformSupport.h"
12 #include "platform/testing/URLTestHelpers.h" 11 #include "platform/testing/URLTestHelpers.h"
13 #include "public/platform/Platform.h" 12 #include "public/platform/Platform.h"
14 #include "public/platform/WebURL.h" 13 #include "public/platform/WebURL.h"
15 #include "public/platform/WebURLLoaderMockFactory.h" 14 #include "public/platform/WebURLLoaderMockFactory.h"
16 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
17 #include "third_party/WebKit/Source/platform/weborigin/KURL.h" 16 #include "third_party/WebKit/Source/platform/weborigin/KURL.h"
18 #include "third_party/skia/include/core/SkBitmap.h" 17 #include "third_party/skia/include/core/SkBitmap.h"
19 #include "wtf/Functional.h" 18 #include "wtf/Functional.h"
20 19
21 namespace blink { 20 namespace blink {
22 namespace { 21 namespace {
23 22
24 enum class LoadState { kNotLoaded, kLoadFailed, kLoadSuccessful }; 23 enum class LoadState { kNotLoaded, kLoadFailed, kLoadSuccessful };
25 24
26 const char kBaseUrl[] = "http://test.com/"; 25 const char kBaseUrl[] = "http://test.com/";
27 const char kIcon500x500[] = "500x500.png"; 26 const char kIcon500x500[] = "500x500.png";
28 27
29 // This mirrors the definition in NotificationImageLoader.cpp. 28 // This mirrors the definition in NotificationImageLoader.cpp.
30 const unsigned long kImageFetchTimeoutInMs = 90000; 29 const unsigned long kImageFetchTimeoutInMs = 90000;
31 30
32 static_assert(kImageFetchTimeoutInMs > 1000.0, 31 static_assert(kImageFetchTimeoutInMs > 1000.0,
33 "kImageFetchTimeoutInMs must be greater than 1000ms."); 32 "kImageFetchTimeoutInMs must be greater than 1000ms.");
34 33
35 class NotificationImageLoaderTest : public ::testing::Test { 34 class NotificationImageLoaderTest : public ::testing::Test {
36 public: 35 public:
37 NotificationImageLoaderTest() 36 NotificationImageLoaderTest()
38 : m_page(DummyPageHolder::create()), 37 : m_page(DummyPageHolder::create()),
39 // Use an arbitrary type, since it only affects which UMA bucket we use. 38 m_loader(new NotificationImageLoader()) {}
40 m_loader(
41 new NotificationImageLoader(NotificationImageLoader::Type::Icon)) {}
42 39
43 ~NotificationImageLoaderTest() override { 40 ~NotificationImageLoaderTest() override {
44 m_loader->stop(); 41 m_loader->stop();
45 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); 42 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs();
46 memoryCache()->evictResources(); 43 memoryCache()->evictResources();
47 } 44 }
48 45
49 // Registers a mocked URL. When fetched it will be loaded form the test data 46 // Registers a mocked URL. When fetched it will be loaded form the test data
50 // directory. 47 // directory.
51 WebURL registerMockedURL(const String& fileName) { 48 WebURL registerMockedURL(const String& fileName) {
(...skipping 14 matching lines...) Expand all
66 63
67 void loadImage(const KURL& url) { 64 void loadImage(const KURL& url) {
68 m_loader->start( 65 m_loader->start(
69 context(), url, 66 context(), url,
70 bind(&NotificationImageLoaderTest::imageLoaded, WTF::unretained(this))); 67 bind(&NotificationImageLoaderTest::imageLoaded, WTF::unretained(this)));
71 } 68 }
72 69
73 ExecutionContext* context() const { return &m_page->document(); } 70 ExecutionContext* context() const { return &m_page->document(); }
74 LoadState loaded() const { return m_loaded; } 71 LoadState loaded() const { return m_loaded; }
75 72
76 protected:
77 HistogramTester m_histogramTester;
78
79 private: 73 private:
80 std::unique_ptr<DummyPageHolder> m_page; 74 std::unique_ptr<DummyPageHolder> m_page;
81 Persistent<NotificationImageLoader> m_loader; 75 Persistent<NotificationImageLoader> m_loader;
82 LoadState m_loaded = LoadState::kNotLoaded; 76 LoadState m_loaded = LoadState::kNotLoaded;
83 }; 77 };
84 78
85 TEST_F(NotificationImageLoaderTest, SuccessTest) { 79 TEST_F(NotificationImageLoaderTest, SuccessTest) {
86 KURL url = registerMockedURL(kIcon500x500); 80 KURL url = registerMockedURL(kIcon500x500);
87 loadImage(url); 81 loadImage(url);
88 m_histogramTester.expectTotalCount("Notifications.LoadFinishTime.Icon", 0);
89 m_histogramTester.expectTotalCount("Notifications.LoadFileSize.Icon", 0);
90 m_histogramTester.expectTotalCount("Notifications.LoadFailTime.Icon", 0);
91 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 82 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
92 EXPECT_EQ(LoadState::kLoadSuccessful, loaded()); 83 EXPECT_EQ(LoadState::kLoadSuccessful, loaded());
93 m_histogramTester.expectUniqueSample("Notifications.LoadFileSize.Icon", 7439,
94 1);
95 m_histogramTester.expectTotalCount("Notifications.LoadFailTime.Icon", 0);
96 // Should log a non-zero finish time.
97 m_histogramTester.expectTotalCount("Notifications.LoadFinishTime.Icon", 1);
98 m_histogramTester.expectBucketCount("Notifications.LoadFinishTime.Icon", 0,
99 0);
100 } 84 }
101 85
102 TEST_F(NotificationImageLoaderTest, TimeoutTest) { 86 TEST_F(NotificationImageLoaderTest, TimeoutTest) {
103 // To test for a timeout, this needs to override the clock in the platform. 87 // To test for a timeout, this needs to override the clock in the platform.
104 // Just creating the mock platform will do everything to set it up. 88 // Just creating the mock platform will do everything to set it up.
105 TestingPlatformSupportWithMockScheduler testingPlatform; 89 TestingPlatformSupportWithMockScheduler testingPlatform;
106 KURL url = registerMockedURL(kIcon500x500); 90 KURL url = registerMockedURL(kIcon500x500);
107 loadImage(url); 91 loadImage(url);
108 92
109 // Run the platform for kImageFetchTimeoutInMs-1 seconds. This should not 93 // Run the platform for kImageFetchTimeoutInMs-1 seconds. This should not
110 // result in a timeout. 94 // result in a timeout.
111 testingPlatform.runForPeriodSeconds(kImageFetchTimeoutInMs / 1000 - 1); 95 testingPlatform.runForPeriodSeconds(kImageFetchTimeoutInMs / 1000 - 1);
112 EXPECT_EQ(LoadState::kNotLoaded, loaded()); 96 EXPECT_EQ(LoadState::kNotLoaded, loaded());
113 m_histogramTester.expectTotalCount("Notifications.LoadFinishTime.Icon", 0);
114 m_histogramTester.expectTotalCount("Notifications.LoadFileSize.Icon", 0);
115 m_histogramTester.expectTotalCount("Notifications.LoadFailTime.Icon", 0);
116 97
117 // Now advance time until a timeout should be expected. 98 // Now advance time until a timeout should be expected.
118 testingPlatform.runForPeriodSeconds(2); 99 testingPlatform.runForPeriodSeconds(2);
119 100
120 // If the loader times out, it calls the callback and returns an empty bitmap. 101 // If the loader times out, it calls the callback and returns an empty bitmap.
121 EXPECT_EQ(LoadState::kLoadFailed, loaded()); 102 EXPECT_EQ(LoadState::kLoadFailed, loaded());
122 m_histogramTester.expectTotalCount("Notifications.LoadFinishTime.Icon", 0);
123 m_histogramTester.expectTotalCount("Notifications.LoadFileSize.Icon", 0);
124 // Should log a non-zero failure time.
125 m_histogramTester.expectTotalCount("Notifications.LoadFailTime.Icon", 1);
126 m_histogramTester.expectBucketCount("Notifications.LoadFailTime.Icon", 0, 0);
127 } 103 }
128 104
129 } // namspace 105 } // namspace
130 } // namespace blink 106 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698