diff options
| author | sky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-21 15:20:33 +0000 |
|---|---|---|
| committer | sky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-21 15:20:33 +0000 |
| commit | f25387b62a3cccde48622d0b7fca57cd6fb16ab7 (patch) | |
| tree | 06ac2c1972d6608fb65979c3a279a6d214fecc6c /chrome/browser/bookmark_storage.h | |
| parent | bcc682fc4f5050ac911635ab649fbd30002fc2b4 (diff) | |
| download | chromium_src-f25387b62a3cccde48622d0b7fca57cd6fb16ab7.zip chromium_src-f25387b62a3cccde48622d0b7fca57cd6fb16ab7.tar.gz chromium_src-f25387b62a3cccde48622d0b7fca57cd6fb16ab7.tar.bz2 | |
Moves bookmarks out of history into its own file (JSON).
Interesting points:
. Migration was a bit atypical. Here is the approach I took:
. If the URL db contains bookmarks it writes the bookmarks to a
temporary file.
. When the bookmark bar model is loaded it assumes bookmarks are
stored in a file. If the bookmarks file doesn't exist it then
attempts to load from history, after waiting for history to finish
processing tasks.
. I've broken having the omnibox query for starred only. This patch
was already too ginormous for me to contemplate this too. I'll return
to it after I land this.
. Similarly the history page isn't searching for starred titles
now. As we discussed with Glen, that is probably fine for now.
. I've converted NOTIFY_STARRED_FAVICON_CHANGED to
NOTIFY_FAVICON_CHANGED and it is notified ANY time a favicon
changes. I'm mildly concerned about the extra notifications, but
without having history know about starred it's the best I can do for
now.
. Autocomplete (specifically URLDatabase::AutocompleteForPrefix)
previously sorted by starred. It can no longer do this. I don't
think I can get this functionality back:( Luckily it only mattered
if you had a starred and non-starred URL with the same type count
that matched a query. Probably pretty rare.
What's left:
. Fix up HistoryContentsProvider to query for starred entries titles.
. Clean up the delete all case. I basically just made it compile; it
can be greatly simplified.
. Rename BookmarkBarModel to BookmarksModel.
BUG=1256202
TEST=this is a huge change to bookmarks. Thanfully it's pretty well
covered by tests, none-the-less make sure you exercise bookmarks
pretty heavily to make sure nothing is busted.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1153 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/bookmark_storage.h')
| -rw-r--r-- | chrome/browser/bookmark_storage.h | 63 |
1 files changed, 45 insertions, 18 deletions
diff --git a/chrome/browser/bookmark_storage.h b/chrome/browser/bookmark_storage.h index 8ba00d0..5792c00 100644 --- a/chrome/browser/bookmark_storage.h +++ b/chrome/browser/bookmark_storage.h @@ -27,17 +27,6 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// BookmarkService handles reading/write the bookmark bar model. The -// BookmarkBarModel uses the BookmarkService to load bookmarks from -// disk, as well as notifying the BookmarkService every time the model -// changes. -// -// Internally BookmarkService uses BookmarkCoded to do the actual read/write. - -// NOTE: This class is currently unsed. The plan is to move bookmarks -// out of the history db using this class and BookmarksCodec instead -// (bug 1256202). - #ifndef CHROME_BROWSER_BOOKMARK_STORAGE_H_ #define CHROME_BROWSER_BOOKMARK_STORAGE_H_ @@ -49,9 +38,12 @@ class BookmarkBarModel; class Profile; class Value; -namespace { -class BookmarkStorageBackend; -} +// BookmarkStorage handles reading/write the bookmark bar model. The +// BookmarkBarModel uses the BookmarkStorage to load bookmarks from +// disk, as well as notifying the BookmarkStorage every time the model +// changes. +// +// Internally BookmarkStorage uses BookmarkCodec to do the actual read/write. class BookmarkStorage : public base::RefCountedThreadSafe<BookmarkStorage> { friend class BookmarkStorageBackend; @@ -60,8 +52,10 @@ class BookmarkStorage : public base::RefCountedThreadSafe<BookmarkStorage> { // Creates a BookmarkStorage for the specified model BookmarkStorage(Profile* profile, BookmarkBarModel* model); - // Loads the bookmarks into the model, notifying the model when done. - void LoadBookmarks(); + // Loads the bookmarks into the model, notifying the model when done. If + // load_from_history is true, the bookmarks are loaded from the file written + // by history (StarredURLDatabase). + void LoadBookmarks(bool load_from_history); // Schedules saving the bookmark bar model to disk. void ScheduleSave(); @@ -72,13 +66,15 @@ class BookmarkStorage : public base::RefCountedThreadSafe<BookmarkStorage> { private: // Callback from backend with the results of the bookmark file. - void LoadedBookmarks(Value* root_value); + void LoadedBookmarks(Value* root_value, + bool bookmark_file_exists, + bool loaded_from_history); // Schedules a save on the backend thread. void SaveNow(); // Returns the thread the backend is run on. - Thread* backend_thread() { return g_browser_process->file_thread(); } + Thread* backend_thread() const { return backend_thread_; } // The model. The model is NULL once BookmarkModelDeleted has been invoked. BookmarkBarModel* model_; @@ -89,7 +85,38 @@ class BookmarkStorage : public base::RefCountedThreadSafe<BookmarkStorage> { // The backend handles actual reading/writing to disk. scoped_refptr<BookmarkStorageBackend> backend_; + // Thread read/writing is run on. This comes from the profile, and is null + // during testing. + Thread* backend_thread_; + DISALLOW_COPY_AND_ASSIGN(BookmarkStorage); }; +// Used to save the bookmarks on the file thread. +class BookmarkStorageBackend : + public base::RefCountedThreadSafe<BookmarkStorageBackend> { + public: + explicit BookmarkStorageBackend(const std::wstring& path, + const std::wstring& tmp_histor_path); + + // Writes the specified value to disk. This takes ownership of |value| and + // deletes it when done. + void Write(Value* value); + + // Reads the bookmarks from kBookmarksFileName. Notifies |service| with + // the results on the specified MessageLoop. + void Read(scoped_refptr<BookmarkStorage> service, + MessageLoop* message_loop, + bool load_from_history); + + private: + // Path we read/write to. + const std::wstring path_; + + // Path bookmarks are read from if asked to load from history file. + const std::wstring tmp_history_path_; + + DISALLOW_EVIL_CONSTRUCTORS(BookmarkStorageBackend); +}; + #endif // CHROME_BROWSER_BOOKMARK_STORAGE_H_ |
