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

Side by Side Diff: chrome/browser/sync/util/extensions_activity_monitor_unittest.cc

Issue 333041: Take 2 at browser_sync::ExtensionsActivityMonitor.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/sync/util/extensions_activity_monitor.cc ('k') | chrome/chrome.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The 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 entry. 3 // found in the LICENSE entry.
4 4
5 #include "chrome/browser/sync/util/extensions_activity_monitor.h" 5 #include "chrome/browser/sync/util/extensions_activity_monitor.h"
6 6
7 #include "base/file_path.h" 7 #include "base/file_path.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "base/waitable_event.h" 9 #include "base/waitable_event.h"
10 #include "chrome/browser/chrome_thread.h" 10 #include "chrome/browser/chrome_thread.h"
11 #include "chrome/browser/extensions/extension_bookmarks_module.h" 11 #include "chrome/browser/extensions/extension_bookmarks_module.h"
12 #include "chrome/common/extensions/extension.h" 12 #include "chrome/common/extensions/extension.h"
13 #include "chrome/common/extensions/extension_constants.h" 13 #include "chrome/common/extensions/extension_constants.h"
14 #include "chrome/common/notification_service.h" 14 #include "chrome/common/notification_service.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 using browser_sync::ExtensionsActivityMonitor; 17 using browser_sync::ExtensionsActivityMonitor;
18 namespace keys = extension_manifest_keys; 18 namespace keys = extension_manifest_keys;
19 19
20 namespace { 20 namespace {
21 21
22 static const char* kTestExtensionPath1 = "c:\\testextension1"; 22 const char* kTestExtensionPath1 = "c:\\testextension1";
23 static const char* kTestExtensionPath2 = "c:\\testextension2"; 23 const char* kTestExtensionPath2 = "c:\\testextension2";
24 static const char* kTestExtensionVersion = "1.0.0.0"; 24 const char* kTestExtensionVersion = "1.0.0.0";
25 static const char* kTestExtensionName = "foo extension"; 25 const char* kTestExtensionName = "foo extension";
26 26
27 template <class FunctionType> 27 template <class FunctionType>
28 class BookmarkAPIEventTask : public Task { 28 class BookmarkAPIEventTask : public Task {
29 public: 29 public:
30 BookmarkAPIEventTask(FunctionType* t, Extension* e, size_t repeats, 30 BookmarkAPIEventTask(FunctionType* t, Extension* e, size_t repeats,
31 base::WaitableEvent* done) : 31 base::WaitableEvent* done) :
32 function_(t), extension_(e), repeats_(repeats), done_(done) {} 32 extension_(e), function_(t), repeats_(repeats), done_(done) {}
33 virtual void Run() { 33 virtual void Run() {
34 for (size_t i = 0; i < repeats_; i++) { 34 for (size_t i = 0; i < repeats_; i++) {
35 NotificationService::current()->Notify( 35 NotificationService::current()->Notify(
36 NotificationType::EXTENSION_BOOKMARKS_API_INVOKED, 36 NotificationType::EXTENSION_BOOKMARKS_API_INVOKED,
37 Source<Extension>(extension_.get()), 37 Source<Extension>(extension_.get()),
38 Details<const BookmarksFunction>(function_.get())); 38 Details<const BookmarksFunction>(function_.get()));
39 } 39 }
40 done_->Signal(); 40 done_->Signal();
41 } 41 }
42 private: 42 private:
43 scoped_ptr<Extension> extension_; 43 scoped_ptr<Extension> extension_;
44 scoped_refptr<FunctionType> function_; 44 scoped_refptr<FunctionType> function_;
45 size_t repeats_; 45 size_t repeats_;
46 base::WaitableEvent* done_; 46 base::WaitableEvent* done_;
47 47
48 DISALLOW_COPY_AND_ASSIGN(BookmarkAPIEventTask); 48 DISALLOW_COPY_AND_ASSIGN(BookmarkAPIEventTask);
49 }; 49 };
50 50
51 class BookmarkAPIEventGenerator { 51 class BookmarkAPIEventGenerator {
52 public: 52 public:
53 BookmarkAPIEventGenerator(MessageLoop* ui_loop) : ui_loop_(ui_loop) {} 53 BookmarkAPIEventGenerator() {}
54 virtual ~BookmarkAPIEventGenerator() {} 54 virtual ~BookmarkAPIEventGenerator() {}
55 template <class T> 55 template <class T>
56 void NewEvent(const std::string& extension_path, 56 void NewEvent(const std::string& extension_path,
57 T* bookmarks_function, size_t repeats) { 57 T* bookmarks_function, size_t repeats) {
58 #if defined(OS_WIN)
58 FilePath path(UTF8ToWide(extension_path)); 59 FilePath path(UTF8ToWide(extension_path));
60 #elif defined(OS_POSIX)
61 FilePath path(extension_path);
62 #endif
59 Extension* extension = new Extension(path); 63 Extension* extension = new Extension(path);
60 std::string error; 64 std::string error;
61 DictionaryValue input; 65 DictionaryValue input;
62 input.SetString(keys::kVersion, kTestExtensionVersion); 66 input.SetString(keys::kVersion, kTestExtensionVersion);
63 input.SetString(keys::kName, kTestExtensionName); 67 input.SetString(keys::kName, kTestExtensionName);
64 extension->InitFromValue(input, false, &error); 68 extension->InitFromValue(input, false, &error);
65 bookmarks_function->set_name(T::function_name()); 69 bookmarks_function->set_name(T::function_name());
66 base::WaitableEvent done_event(false, false); 70 base::WaitableEvent done_event(false, false);
67 ui_loop_->PostTask(FROM_HERE, new BookmarkAPIEventTask<T>( 71 ChromeThread::PostTask(ChromeThread::UI, FROM_HERE,
68 bookmarks_function, extension, repeats, &done_event)); 72 new BookmarkAPIEventTask<T>(bookmarks_function, extension,
73 repeats, &done_event));
69 done_event.Wait(); 74 done_event.Wait();
70 } 75 }
71 76
72 private: 77 private:
73 MessageLoop* ui_loop_;
74 DISALLOW_COPY_AND_ASSIGN(BookmarkAPIEventGenerator); 78 DISALLOW_COPY_AND_ASSIGN(BookmarkAPIEventGenerator);
75 }; 79 };
76 } // namespace 80 } // namespace
77 81
78 class DoUIThreadSetupTask : public Task { 82 class DoUIThreadSetupTask : public Task {
79 public: 83 public:
80 DoUIThreadSetupTask(NotificationService** service, 84 DoUIThreadSetupTask(NotificationService** service,
81 base::WaitableEvent* done) 85 base::WaitableEvent* done)
82 : service_(service), signal_when_done_(done) {} 86 : service_(service), signal_when_done_(done) {}
83 virtual ~DoUIThreadSetupTask() {} 87 virtual ~DoUIThreadSetupTask() {}
(...skipping 23 matching lines...) Expand all
107 111
108 virtual void TearDown() { 112 virtual void TearDown() {
109 ui_thread_.message_loop()->DeleteSoon(FROM_HERE, service_); 113 ui_thread_.message_loop()->DeleteSoon(FROM_HERE, service_);
110 ui_thread_.Stop(); 114 ui_thread_.Stop();
111 } 115 }
112 116
113 MessageLoop* ui_loop() { return ui_thread_.message_loop(); } 117 MessageLoop* ui_loop() { return ui_thread_.message_loop(); }
114 118
115 static std::string GetExtensionIdForPath(const std::string& extension_path) { 119 static std::string GetExtensionIdForPath(const std::string& extension_path) {
116 std::string error; 120 std::string error;
121 #if defined(OS_WIN)
117 FilePath path(UTF8ToWide(extension_path)); 122 FilePath path(UTF8ToWide(extension_path));
123 #elif defined(OS_POSIX)
124 FilePath path(extension_path);
125 #endif
118 Extension e(path); 126 Extension e(path);
119 DictionaryValue input; 127 DictionaryValue input;
120 input.SetString(keys::kVersion, kTestExtensionVersion); 128 input.SetString(keys::kVersion, kTestExtensionVersion);
121 input.SetString(keys::kName, kTestExtensionName); 129 input.SetString(keys::kName, kTestExtensionName);
122 e.InitFromValue(input, false, &error); 130 e.InitFromValue(input, false, &error);
123 EXPECT_EQ("", error); 131 EXPECT_EQ("", error);
124 return e.id(); 132 return e.id();
125 } 133 }
126 private: 134 private:
127 NotificationService* service_; 135 NotificationService* service_;
128 ChromeThread ui_thread_; 136 ChromeThread ui_thread_;
129 }; 137 };
130 138
131 TEST_F(ExtensionsActivityMonitorTest, Basic) { 139 TEST_F(ExtensionsActivityMonitorTest, Basic) {
132 ExtensionsActivityMonitor* monitor = new ExtensionsActivityMonitor(ui_loop()); 140 ExtensionsActivityMonitor* monitor = new ExtensionsActivityMonitor();
133 BookmarkAPIEventGenerator generator(ui_loop()); 141 BookmarkAPIEventGenerator generator;
134 142
135 generator.NewEvent<RemoveBookmarkFunction>(kTestExtensionPath1, 143 generator.NewEvent<RemoveBookmarkFunction>(kTestExtensionPath1,
136 new RemoveBookmarkFunction(), 1); 144 new RemoveBookmarkFunction(), 1);
137 generator.NewEvent<MoveBookmarkFunction>(kTestExtensionPath1, 145 generator.NewEvent<MoveBookmarkFunction>(kTestExtensionPath1,
138 new MoveBookmarkFunction(), 1); 146 new MoveBookmarkFunction(), 1);
139 generator.NewEvent<UpdateBookmarkFunction>(kTestExtensionPath1, 147 generator.NewEvent<UpdateBookmarkFunction>(kTestExtensionPath1,
140 new UpdateBookmarkFunction(), 2); 148 new UpdateBookmarkFunction(), 2);
141 generator.NewEvent<CreateBookmarkFunction>(kTestExtensionPath1, 149 generator.NewEvent<CreateBookmarkFunction>(kTestExtensionPath1,
142 new CreateBookmarkFunction(), 3); 150 new CreateBookmarkFunction(), 3);
143 generator.NewEvent<SearchBookmarksFunction>(kTestExtensionPath1, 151 generator.NewEvent<SearchBookmarksFunction>(kTestExtensionPath1,
144 new SearchBookmarksFunction(), 5); 152 new SearchBookmarksFunction(), 5);
145 const int writes_by_extension1 = 1 + 1 + 2 + 3; 153 const uint32 writes_by_extension1 = 1 + 1 + 2 + 3;
146 154
147 generator.NewEvent<RemoveTreeBookmarkFunction>(kTestExtensionPath2, 155 generator.NewEvent<RemoveTreeBookmarkFunction>(kTestExtensionPath2,
148 new RemoveTreeBookmarkFunction(), 8); 156 new RemoveTreeBookmarkFunction(), 8);
149 generator.NewEvent<GetBookmarkTreeFunction>(kTestExtensionPath2, 157 generator.NewEvent<GetBookmarkTreeFunction>(kTestExtensionPath2,
150 new GetBookmarkTreeFunction(), 13); 158 new GetBookmarkTreeFunction(), 13);
151 generator.NewEvent<GetBookmarkChildrenFunction>(kTestExtensionPath2, 159 generator.NewEvent<GetBookmarkChildrenFunction>(kTestExtensionPath2,
152 new GetBookmarkChildrenFunction(), 21); 160 new GetBookmarkChildrenFunction(), 21);
153 generator.NewEvent<GetBookmarksFunction>(kTestExtensionPath2, 161 generator.NewEvent<GetBookmarksFunction>(kTestExtensionPath2,
154 new GetBookmarksFunction(), 33); 162 new GetBookmarksFunction(), 33);
155 const int writes_by_extension2 = 8; 163 const uint32 writes_by_extension2 = 8;
156 164
157 ExtensionsActivityMonitor::Records results; 165 ExtensionsActivityMonitor::Records results;
158 monitor->GetAndClearRecords(&results); 166 monitor->GetAndClearRecords(&results);
159 167
160 std::string id1 = GetExtensionIdForPath(kTestExtensionPath1); 168 std::string id1 = GetExtensionIdForPath(kTestExtensionPath1);
161 std::string id2 = GetExtensionIdForPath(kTestExtensionPath2); 169 std::string id2 = GetExtensionIdForPath(kTestExtensionPath2);
162 170
163 EXPECT_EQ(2, results.size()); 171 EXPECT_EQ(2U, results.size());
164 EXPECT_TRUE(results.end() != results.find(id1)); 172 EXPECT_TRUE(results.end() != results.find(id1));
165 EXPECT_TRUE(results.end() != results.find(id2)); 173 EXPECT_TRUE(results.end() != results.find(id2));
166 EXPECT_EQ(writes_by_extension1, results[id1].bookmark_write_count); 174 EXPECT_EQ(writes_by_extension1, results[id1].bookmark_write_count);
167 EXPECT_EQ(writes_by_extension2, results[id2].bookmark_write_count); 175 EXPECT_EQ(writes_by_extension2, results[id2].bookmark_write_count);
168 176
169 ui_loop()->DeleteSoon(FROM_HERE, monitor); 177 ui_loop()->DeleteSoon(FROM_HERE, monitor);
170 } 178 }
171 179
172 TEST_F(ExtensionsActivityMonitorTest, Put) { 180 TEST_F(ExtensionsActivityMonitorTest, Put) {
173 ExtensionsActivityMonitor* monitor = new ExtensionsActivityMonitor(ui_loop()); 181 ExtensionsActivityMonitor* monitor = new ExtensionsActivityMonitor();
174 BookmarkAPIEventGenerator generator(ui_loop()); 182 BookmarkAPIEventGenerator generator;
175 std::string id1 = GetExtensionIdForPath(kTestExtensionPath1); 183 std::string id1 = GetExtensionIdForPath(kTestExtensionPath1);
176 std::string id2 = GetExtensionIdForPath(kTestExtensionPath2); 184 std::string id2 = GetExtensionIdForPath(kTestExtensionPath2);
177 185
178 generator.NewEvent<CreateBookmarkFunction>(kTestExtensionPath1, 186 generator.NewEvent<CreateBookmarkFunction>(kTestExtensionPath1,
179 new CreateBookmarkFunction(), 5); 187 new CreateBookmarkFunction(), 5);
180 generator.NewEvent<MoveBookmarkFunction>(kTestExtensionPath2, 188 generator.NewEvent<MoveBookmarkFunction>(kTestExtensionPath2,
181 new MoveBookmarkFunction(), 8); 189 new MoveBookmarkFunction(), 8);
182 190
183 ExtensionsActivityMonitor::Records results; 191 ExtensionsActivityMonitor::Records results;
184 monitor->GetAndClearRecords(&results); 192 monitor->GetAndClearRecords(&results);
185 193
186 EXPECT_EQ(2, results.size()); 194 EXPECT_EQ(2U, results.size());
187 EXPECT_EQ(5, results[id1].bookmark_write_count); 195 EXPECT_EQ(5U, results[id1].bookmark_write_count);
188 EXPECT_EQ(8, results[id2].bookmark_write_count); 196 EXPECT_EQ(8U, results[id2].bookmark_write_count);
189 197
190 generator.NewEvent<GetBookmarksFunction>(kTestExtensionPath2, 198 generator.NewEvent<GetBookmarksFunction>(kTestExtensionPath2,
191 new GetBookmarksFunction(), 3); 199 new GetBookmarksFunction(), 3);
192 generator.NewEvent<UpdateBookmarkFunction>(kTestExtensionPath2, 200 generator.NewEvent<UpdateBookmarkFunction>(kTestExtensionPath2,
193 new UpdateBookmarkFunction(), 2); 201 new UpdateBookmarkFunction(), 2);
194 202
195 // Simulate a commit failure, which augments the active record set with the 203 // Simulate a commit failure, which augments the active record set with the
196 // refugee records. 204 // refugee records.
197 monitor->PutRecords(results); 205 monitor->PutRecords(results);
198 ExtensionsActivityMonitor::Records new_records; 206 ExtensionsActivityMonitor::Records new_records;
199 monitor->GetAndClearRecords(&new_records); 207 monitor->GetAndClearRecords(&new_records);
200 208
201 EXPECT_EQ(2, results.size()); 209 EXPECT_EQ(2U, results.size());
202 EXPECT_EQ(id1, new_records[id1].extension_id); 210 EXPECT_EQ(id1, new_records[id1].extension_id);
203 EXPECT_EQ(id2, new_records[id2].extension_id); 211 EXPECT_EQ(id2, new_records[id2].extension_id);
204 EXPECT_EQ(5, new_records[id1].bookmark_write_count); 212 EXPECT_EQ(5U, new_records[id1].bookmark_write_count);
205 EXPECT_EQ(8 + 2, new_records[id2].bookmark_write_count); 213 EXPECT_EQ(8U + 2U, new_records[id2].bookmark_write_count);
206 ui_loop()->DeleteSoon(FROM_HERE, monitor); 214 ui_loop()->DeleteSoon(FROM_HERE, monitor);
207 } 215 }
208 216
209 TEST_F(ExtensionsActivityMonitorTest, MultiGet) { 217 TEST_F(ExtensionsActivityMonitorTest, MultiGet) {
210 ExtensionsActivityMonitor* monitor = new ExtensionsActivityMonitor(ui_loop()); 218 ExtensionsActivityMonitor* monitor = new ExtensionsActivityMonitor();
211 BookmarkAPIEventGenerator generator(ui_loop()); 219 BookmarkAPIEventGenerator generator;
212 std::string id1 = GetExtensionIdForPath(kTestExtensionPath1); 220 std::string id1 = GetExtensionIdForPath(kTestExtensionPath1);
213 221
214 generator.NewEvent<CreateBookmarkFunction>(kTestExtensionPath1, 222 generator.NewEvent<CreateBookmarkFunction>(kTestExtensionPath1,
215 new CreateBookmarkFunction(), 5); 223 new CreateBookmarkFunction(), 5);
216 224
217 ExtensionsActivityMonitor::Records results; 225 ExtensionsActivityMonitor::Records results;
218 monitor->GetAndClearRecords(&results); 226 monitor->GetAndClearRecords(&results);
219 227
220 EXPECT_EQ(1, results.size()); 228 EXPECT_EQ(1U, results.size());
221 EXPECT_EQ(5, results[id1].bookmark_write_count); 229 EXPECT_EQ(5U, results[id1].bookmark_write_count);
222 230
223 monitor->GetAndClearRecords(&results); 231 monitor->GetAndClearRecords(&results);
224 EXPECT_TRUE(results.empty()); 232 EXPECT_TRUE(results.empty());
225 233
226 generator.NewEvent<CreateBookmarkFunction>(kTestExtensionPath1, 234 generator.NewEvent<CreateBookmarkFunction>(kTestExtensionPath1,
227 new CreateBookmarkFunction(), 3); 235 new CreateBookmarkFunction(), 3);
228 monitor->GetAndClearRecords(&results); 236 monitor->GetAndClearRecords(&results);
229 237
230 EXPECT_EQ(1, results.size()); 238 EXPECT_EQ(1U, results.size());
231 EXPECT_EQ(3, results[id1].bookmark_write_count); 239 EXPECT_EQ(3U, results[id1].bookmark_write_count);
232 240
233 ui_loop()->DeleteSoon(FROM_HERE, monitor); 241 ui_loop()->DeleteSoon(FROM_HERE, monitor);
234 } 242 }
OLDNEW
« no previous file with comments | « chrome/browser/sync/util/extensions_activity_monitor.cc ('k') | chrome/chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698