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

Side by Side Diff: chrome/browser/visitedlink_master.h

Issue 342068: Third patch in getting rid of caching MessageLoop pointers and always using C... (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/views/bookmark_manager_view.cc ('k') | chrome/browser/visitedlink_master.cc » ('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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_VISITEDLINK_MASTER_H__ 5 #ifndef CHROME_BROWSER_VISITEDLINK_MASTER_H__
6 #define CHROME_BROWSER_VISITEDLINK_MASTER_H__ 6 #define CHROME_BROWSER_VISITEDLINK_MASTER_H__
7 7
8 #if defined(OS_WIN) 8 #if defined(OS_WIN)
9 #include <windows.h> 9 #include <windows.h>
10 #endif 10 #endif
11 #include <set> 11 #include <set>
12 #include <string> 12 #include <string>
13 #include <vector> 13 #include <vector>
14 14
15 #include "base/file_path.h" 15 #include "base/file_path.h"
16 #include "base/ref_counted.h" 16 #include "base/ref_counted.h"
17 #include "base/shared_memory.h" 17 #include "base/shared_memory.h"
18 #include "chrome/browser/history/history.h" 18 #include "chrome/browser/history/history.h"
19 #include "chrome/common/visitedlink_common.h" 19 #include "chrome/common/visitedlink_common.h"
20 #include "testing/gtest/include/gtest/gtest_prod.h" 20 #include "testing/gtest/include/gtest/gtest_prod.h"
21 21
22 class GURL; 22 class GURL;
23 class MessageLoop; 23 class MessageLoop;
24 class Profile; 24 class Profile;
25 25
26 namespace base {
27 class Thread;
28 } // namespace base
29
30 // Controls the link coloring database. The master controls all writing to the 26 // Controls the link coloring database. The master controls all writing to the
31 // database as well as disk I/O. There should be only one master. 27 // database as well as disk I/O. There should be only one master.
32 // 28 //
33 // This class will optionally defer writing operations to another thread. This 29 // This class will defer writing operations to the file thread. This means that
34 // means that after class destruction, the file may still be open since 30 // class destruction, the file may still be open since operations are pending on
35 // operations are pending on another thread. 31 // another thread.
36 class VisitedLinkMaster : public VisitedLinkCommon { 32 class VisitedLinkMaster : public VisitedLinkCommon {
37 public: 33 public:
38 // Listens to the link coloring database events. The master is given this 34 // Listens to the link coloring database events. The master is given this
39 // event as a constructor argument and dispatches events using it. 35 // event as a constructor argument and dispatches events using it.
40 class Listener { 36 class Listener {
41 public: 37 public:
42 virtual ~Listener() {} 38 virtual ~Listener() {}
43 39
44 // Called when link coloring database has been created or replaced. The 40 // Called when link coloring database has been created or replaced. The
45 // argument is the new table handle. 41 // argument is the new table handle.
46 virtual void NewTable(base::SharedMemory*) = 0; 42 virtual void NewTable(base::SharedMemory*) = 0;
47 43
48 // Called when new link has been added. The argument is the fingerprint 44 // Called when new link has been added. The argument is the fingerprint
49 // (hash) of the link. 45 // (hash) of the link.
50 virtual void Add(Fingerprint fingerprint) = 0; 46 virtual void Add(Fingerprint fingerprint) = 0;
51 47
52 // Called when link coloring state has been reset. This may occur when 48 // Called when link coloring state has been reset. This may occur when
53 // entire or parts of history were deleted. 49 // entire or parts of history were deleted.
54 virtual void Reset() = 0; 50 virtual void Reset() = 0;
55 }; 51 };
56 52
57 // The |file_thread| may be NULL, in which case write operations will be
58 // synchronous.
59 // The |listener| may not be NULL. 53 // The |listener| may not be NULL.
60 VisitedLinkMaster(base::Thread* file_thread, 54 VisitedLinkMaster(Listener* listener, Profile* profile);
61 Listener* listener,
62 Profile* profile);
63 55
64 // In unit test mode, we allow the caller to optionally specify the database 56 // In unit test mode, we allow the caller to optionally specify the database
65 // filename so that it can be run from a unit test. The directory where this 57 // filename so that it can be run from a unit test. The directory where this
66 // file resides must exist in this mode. You can also specify the default 58 // file resides must exist in this mode. You can also specify the default
67 // table size to test table resizing. If this parameter is 0, we will use the 59 // table size to test table resizing. If this parameter is 0, we will use the
68 // defaults. 60 // defaults.
69 // 61 //
70 // In the unit test mode, we also allow the caller to provide a history 62 // In the unit test mode, we also allow the caller to provide a history
71 // service pointer (the history service can't be fetched from the browser 63 // service pointer (the history service can't be fetched from the browser
72 // process when we're in unit test mode). This can be NULL to try to access 64 // process when we're in unit test mode). This can be NULL to try to access
73 // the main version, which will probably fail (which can be good for testing 65 // the main version, which will probably fail (which can be good for testing
74 // this failure mode). 66 // this failure mode).
75 // 67 //
76 // When |suppress_rebuild| is set, we'll not attempt to load data from 68 // When |suppress_rebuild| is set, we'll not attempt to load data from
77 // history if the file can't be loaded. This should generally be set for 69 // history if the file can't be loaded. This should generally be set for
78 // testing except when you want to test the rebuild process explicitly. 70 // testing except when you want to test the rebuild process explicitly.
79 VisitedLinkMaster(base::Thread* file_thread, 71 VisitedLinkMaster(Listener* listener,
80 Listener* listener,
81 HistoryService* history_service, 72 HistoryService* history_service,
82 bool suppress_rebuild, 73 bool suppress_rebuild,
83 const FilePath& filename, 74 const FilePath& filename,
84 int32 default_table_size); 75 int32 default_table_size);
85 virtual ~VisitedLinkMaster(); 76 virtual ~VisitedLinkMaster();
86 77
87 // Must be called immediately after object creation. Nothing else will work 78 // Must be called immediately after object creation. Nothing else will work
88 // until this is called. Returns true on success, false means that this 79 // until this is called. Returns true on success, false means that this
89 // object won't work. 80 // object won't work.
90 bool Init(); 81 bool Init();
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 152
162 // When creating a fresh new table, we use this many entries. 153 // When creating a fresh new table, we use this many entries.
163 static const unsigned kDefaultTableSize; 154 static const unsigned kDefaultTableSize;
164 155
165 // When the user is deleting a boatload of URLs, we don't really want to do 156 // When the user is deleting a boatload of URLs, we don't really want to do
166 // individual writes for each of them. When the count exceeds this threshold, 157 // individual writes for each of them. When the count exceeds this threshold,
167 // we will write the whole table to disk at once instead of individual items. 158 // we will write the whole table to disk at once instead of individual items.
168 static const size_t kBigDeleteThreshold; 159 static const size_t kBigDeleteThreshold;
169 160
170 // Backend for the constructors initializing the members. 161 // Backend for the constructors initializing the members.
171 void InitMembers(base::Thread* file_thread, 162 void InitMembers(Listener* listener, Profile* profile);
172 Listener* listener,
173 Profile* profile);
174 163
175 // If a rebuild is in progress, we save the URL in the temporary list. 164 // If a rebuild is in progress, we save the URL in the temporary list.
176 // Otherwise, we add this to the table. Returns the index of the 165 // Otherwise, we add this to the table. Returns the index of the
177 // inserted fingerprint or null_hash_ on failure. 166 // inserted fingerprint or null_hash_ on failure.
178 Hash TryToAddURL(const GURL& url); 167 Hash TryToAddURL(const GURL& url);
179 168
180 // File I/O functions 169 // File I/O functions
181 // ------------------ 170 // ------------------
182 171
183 // Writes the entire table to disk, returning true on success. It will leave 172 // Writes the entire table to disk, returning true on success. It will leave
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 307
319 #ifndef NDEBUG 308 #ifndef NDEBUG
320 // Indicates whether any asynchronous operation has ever been completed. 309 // Indicates whether any asynchronous operation has ever been completed.
321 // We do some synchronous reads that require that no asynchronous operations 310 // We do some synchronous reads that require that no asynchronous operations
322 // are pending, yet we don't track whether they have been completed. This 311 // are pending, yet we don't track whether they have been completed. This
323 // flag is a sanity check that these reads only happen before any 312 // flag is a sanity check that these reads only happen before any
324 // asynchronous writes have been fired. 313 // asynchronous writes have been fired.
325 bool posted_asynchronous_operation_; 314 bool posted_asynchronous_operation_;
326 #endif 315 #endif
327 316
328 // The thread where we do write operations from to avoid synchronous I/O on
329 // the main thread. This may be NULL, which indicates synchronous I/O.
330 MessageLoop* file_thread_;
331
332 // Reference to the user profile that this object belongs to 317 // Reference to the user profile that this object belongs to
333 // (it knows the path to where the data is stored) 318 // (it knows the path to where the data is stored)
334 Profile* profile_; 319 Profile* profile_;
335 320
336 // When non-NULL, indicates we are in database rebuild mode and points to 321 // When non-NULL, indicates we are in database rebuild mode and points to
337 // the class collecting fingerprint information from the history system. 322 // the class collecting fingerprint information from the history system.
338 // The pointer is owned by this class, but it must remain valid while the 323 // The pointer is owned by this class, but it must remain valid while the
339 // history query is running. We must only delete it when the query is done. 324 // history query is running. We must only delete it when the query is done.
340 scoped_refptr<TableBuilder> table_builder_; 325 scoped_refptr<TableBuilder> table_builder_;
341 326
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 int32 used_count = 0; 386 int32 used_count = 0;
402 for (int32 i = 0; i < table_length_; i++) { 387 for (int32 i = 0; i < table_length_; i++) {
403 if (hash_table_[i]) 388 if (hash_table_[i])
404 used_count++; 389 used_count++;
405 } 390 }
406 DCHECK_EQ(used_count, used_items_); 391 DCHECK_EQ(used_count, used_items_);
407 } 392 }
408 #endif 393 #endif
409 394
410 #endif // CHROME_BROWSER_VISITEDLINK_MASTER_H__ 395 #endif // CHROME_BROWSER_VISITEDLINK_MASTER_H__
OLDNEW
« no previous file with comments | « chrome/browser/views/bookmark_manager_view.cc ('k') | chrome/browser/visitedlink_master.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698