15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_HISTORY_ANDROID_BOOKMARK_MODEL_SQL_HANDLER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_HISTORY_ANDROID_BOOKMARK_MODEL_SQL_HANDLER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/android/sql_handler.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkModel;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace history {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HistoryDatabase;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The SQL handler for bookmarking_mapping table.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkModelSQLHandler : public SQLHandler {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit BookmarkModelSQLHandler(URLDatabase* url_database);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~BookmarkModelSQLHandler();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SQLHandler overrides:
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Update(const HistoryAndBookmarkRow& row,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const TableIDRows& ids_set) OVERRIDE;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Delete(const TableIDRows& ids_set) OVERRIDE;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Insert(HistoryAndBookmarkRow* row) OVERRIDE;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This class helps to modify the bookmark model in UI thread.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The instance of this class is created in history thread and posted to
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // UI thread to access the bookmark. All method must be run in UI thread.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class Task : public base::RefCountedThreadSafe<Task> {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // |profile| is the profile whose BookmarkModel will be modified.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // As this class is instantiated in history thread, the |profile| will be
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // checked to see if it is still valid in ProfileManger before it used to
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // get bookmark model in UI thread; So we can make sure the bookmark model
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // we working on is still valid at the time it is used.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Task();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Add the a bookmark with the given |url| to mobile folder.
45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    void AddBookmarkToMobileFolder(const GURL& url,
46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                   const base::string16& title);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Adds a bookmark with the given |url|, |title| and |parent_id|.
49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    void AddBookmark(const GURL& url,
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                     const base::string16& title,
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                     int64 parent_id);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Removes the bookmark with the given |url|.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void RemoveBookmark(const GURL& url);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Updates the given bookmark's title.
57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    void UpdateBookmarkTitle(const GURL& url,
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                             const base::string16& title);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   private:
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    friend class base::RefCountedThreadSafe<Task>;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~Task();
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Returns profile_'s BookmarkModel if the profile_ is valid.
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BookmarkModel* GetBookmarkModel();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DISALLOW_COPY_AND_ASSIGN(Task);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLDatabase* url_database_;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BookmarkModelSQLHandler);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace history.
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_HISTORY_ANDROID_BOOKMARK_MODEL_SQL_HANDLER_H_
78