summaryrefslogtreecommitdiffstats
path: root/chrome/browser/bookmark_storage.h
diff options
context:
space:
mode:
authorsky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-21 15:20:33 +0000
committersky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-21 15:20:33 +0000
commitf25387b62a3cccde48622d0b7fca57cd6fb16ab7 (patch)
tree06ac2c1972d6608fb65979c3a279a6d214fecc6c /chrome/browser/bookmark_storage.h
parentbcc682fc4f5050ac911635ab649fbd30002fc2b4 (diff)
downloadchromium_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.h63
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_