Index: chrome/browser/android/provider/chrome_browser_provider.cc |
diff --git a/chrome/browser/android/provider/chrome_browser_provider.cc b/chrome/browser/android/provider/chrome_browser_provider.cc |
index e9a079e0b69848cbf42506872e5c22d0ae7fd8cf..32746fbcabe0d40d6a3e3d740c05da7db6651c09 100644 |
--- a/chrome/browser/android/provider/chrome_browser_provider.cc |
+++ b/chrome/browser/android/provider/chrome_browser_provider.cc |
@@ -87,9 +87,6 @@ using content::BrowserThread; |
// All derived classes MUST ALWAYS call RequestCompleted when receiving the |
// request response. These tasks cannot be invoked from the UI thread. |
// |
-// - FaviconServiceTask: base class for asynchronous requests that make use of |
-// Chromium's favicon service. See AsyncServiceRequest for more details. |
-// |
// - HistoryProviderTask: base class for asynchronous requests that make use of |
// AndroidHistoryProviderService. See AsyncServiceRequest for mode details. |
// |
@@ -104,29 +101,6 @@ const int64_t kInvalidBookmarkId = -1; |
// ------------- Java-related utility methods ------------- // |
-// Convert a BookmarkNode, |node|, to the java representation of a bookmark node |
-// stored in |*jnode|. Parent node information is optional. |
-void ConvertBookmarkNode( |
- const BookmarkNode* node, |
- const JavaRef<jobject>& parent_node, |
- ScopedJavaGlobalRef<jobject>* jnode) { |
- DCHECK(jnode); |
- if (!node) |
- return; |
- |
- JNIEnv* env = AttachCurrentThread(); |
- ScopedJavaLocalRef<jstring> url; |
- if (node->is_url()) |
- url.Reset(ConvertUTF8ToJavaString(env, node->url().spec())); |
- ScopedJavaLocalRef<jstring> title( |
- ConvertUTF16ToJavaString(env, node->GetTitle())); |
- |
- jnode->Reset( |
- Java_BookmarkNode_create( |
- env, node->id(), (jint) node->type(), title.obj(), url.obj(), |
- parent_node.obj())); |
-} |
- |
jlong ConvertJLongObjectToPrimitive(JNIEnv* env, jobject long_obj) { |
ScopedJavaLocalRef<jclass> jlong_clazz = GetClass(env, "java/lang/Long"); |
jmethodID long_value = MethodID::Get<MethodID::TYPE_INSTANCE>( |
@@ -184,17 +158,6 @@ GURL ParseAndMaybeAppendScheme(const base::string16& url, |
return gurl; |
} |
-const BookmarkNode* GetChildFolderByTitle(const BookmarkNode* parent, |
- const base::string16& title) { |
- for (int i = 0; i < parent->child_count(); ++i) { |
- if (parent->GetChild(i)->is_folder() && |
- parent->GetChild(i)->GetTitle() == title) { |
- return parent->GetChild(i); |
- } |
- } |
- return NULL; |
-} |
- |
// ------------- Synchronous task classes ------------- // |
// Utility task to add a bookmark. |
@@ -285,30 +248,6 @@ class RemoveBookmarkTask : public BookmarkModelObserverTask { |
DISALLOW_COPY_AND_ASSIGN(RemoveBookmarkTask); |
}; |
-// Utility method to remove all bookmarks that the user can edit. |
-class RemoveAllUserBookmarksTask : public BookmarkModelObserverTask { |
- public: |
- explicit RemoveAllUserBookmarksTask(BookmarkModel* model) |
- : BookmarkModelObserverTask(model) {} |
- |
- ~RemoveAllUserBookmarksTask() override {} |
- |
- void Run() { |
- RunOnUIThreadBlocking::Run( |
- base::Bind(&RemoveAllUserBookmarksTask::RunOnUIThread, model())); |
- } |
- |
- static void RunOnUIThread(BookmarkModel* model) { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- LOG(ERROR) << "begin model->RemoveAllUserBookmarks"; |
- model->RemoveAllUserBookmarks(); |
- LOG(ERROR) << "after model->RemoveAllUserBookmarks"; |
- } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(RemoveAllUserBookmarksTask); |
-}; |
- |
// Utility method to update a bookmark. |
class UpdateBookmarkTask : public BookmarkModelObserverTask { |
public: |
@@ -371,33 +310,6 @@ class UpdateBookmarkTask : public BookmarkModelObserverTask { |
DISALLOW_COPY_AND_ASSIGN(UpdateBookmarkTask); |
}; |
-// Checks if a node exists in the bookmark model. |
-class BookmarkNodeExistsTask : public BookmarkModelTask { |
- public: |
- explicit BookmarkNodeExistsTask(BookmarkModel* model) |
- : BookmarkModelTask(model) { |
- } |
- |
- bool Run(const int64_t id) { |
- bool result = false; |
- RunOnUIThreadBlocking::Run( |
- base::Bind(&BookmarkNodeExistsTask::RunOnUIThread, |
- model(), id, &result)); |
- return result; |
- } |
- |
- static void RunOnUIThread(BookmarkModel* model, |
- const int64_t id, |
- bool* result) { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- DCHECK(result); |
- *result = bookmarks::GetBookmarkNodeByID(model, id) != NULL; |
- } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(BookmarkNodeExistsTask); |
-}; |
- |
// Checks if a node belongs to the Mobile Bookmarks hierarchy branch. |
class IsInMobileBookmarksBranchTask : public BookmarkModelTask { |
public: |
@@ -429,206 +341,6 @@ class IsInMobileBookmarksBranchTask : public BookmarkModelTask { |
DISALLOW_COPY_AND_ASSIGN(IsInMobileBookmarksBranchTask); |
}; |
-// Creates folder or retrieves its id if already exists. |
-// An invalid parent id is assumed to represent the Mobile Bookmarks folder. |
-// Can only be used to create folders inside the Mobile Bookmarks branch. |
-class CreateBookmarksFolderOnceTask : public BookmarkModelTask { |
- public: |
- explicit CreateBookmarksFolderOnceTask(BookmarkModel* model) |
- : BookmarkModelTask(model) {} |
- |
- int64_t Run(const base::string16& title, const int64_t parent_id) { |
- int64_t result = kInvalidBookmarkId; |
- RunOnUIThreadBlocking::Run( |
- base::Bind(&CreateBookmarksFolderOnceTask::RunOnUIThread, |
- model(), title, parent_id, &result)); |
- return result; |
- } |
- |
- static void RunOnUIThread(BookmarkModel* model, |
- const base::string16& title, |
- const int64_t parent_id, |
- int64_t* result) { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- DCHECK(result); |
- |
- // Invalid ids are assumed to refer to the Mobile Bookmarks folder. |
- const BookmarkNode* parent = |
- parent_id >= 0 ? bookmarks::GetBookmarkNodeByID(model, parent_id) |
- : model->mobile_node(); |
- DCHECK(parent); |
- |
- bool in_mobile_bookmarks; |
- IsInMobileBookmarksBranchTask::RunOnUIThread(model, parent->id(), |
- &in_mobile_bookmarks); |
- if (!in_mobile_bookmarks) { |
- // The parent folder must be inside the Mobile Bookmarks folder. |
- *result = kInvalidBookmarkId; |
- return; |
- } |
- |
- const BookmarkNode* node = GetChildFolderByTitle(parent, title); |
- if (node) { |
- *result = node->id(); |
- return; |
- } |
- |
- AddBookmarkTask::RunOnUIThread(model, title, base::string16(), true, |
- parent->id(), result); |
- } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(CreateBookmarksFolderOnceTask); |
-}; |
- |
-// Creates a Java BookmarkNode object for a node given its id. |
-class GetEditableBookmarkFoldersTask : public BookmarkModelTask { |
- public: |
- GetEditableBookmarkFoldersTask( |
- ManagedBookmarkService* managed_bookmark_service, |
- BookmarkModel* model) |
- : BookmarkModelTask(model), |
- managed_bookmark_service_(managed_bookmark_service) {} |
- |
- void Run(ScopedJavaGlobalRef<jobject>* jroot) { |
- RunOnUIThreadBlocking::Run( |
- base::Bind(&GetEditableBookmarkFoldersTask::RunOnUIThread, |
- managed_bookmark_service_, model(), jroot)); |
- } |
- |
- static void RunOnUIThread(ManagedBookmarkService* managed, |
- BookmarkModel* model, |
- ScopedJavaGlobalRef<jobject>* jroot) { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- const BookmarkNode* root = model->root_node(); |
- if (!root || !root->is_folder()) |
- return; |
- |
- // The iterative approach is not possible because ScopedGlobalJavaRefs |
- // cannot be copy-constructed, and therefore not used in STL containers. |
- ConvertFolderSubtree(managed, AttachCurrentThread(), root, |
- ScopedJavaLocalRef<jobject>(), jroot); |
- } |
- |
- private: |
- static void ConvertFolderSubtree(ManagedBookmarkService* managed, |
- JNIEnv* env, |
- const BookmarkNode* node, |
- const JavaRef<jobject>& parent_folder, |
- ScopedJavaGlobalRef<jobject>* jfolder) { |
- DCHECK(node); |
- DCHECK(node->is_folder()); |
- DCHECK(jfolder); |
- |
- // Global refs should be used here for thread-safety reasons as this task |
- // might be invoked from a thread other than UI. All refs are scoped. |
- ConvertBookmarkNode(node, parent_folder, jfolder); |
- |
- for (int i = 0; i < node->child_count(); ++i) { |
- const BookmarkNode* child = node->GetChild(i); |
- if (child->is_folder() && managed->CanBeEditedByUser(child)) { |
- ScopedJavaGlobalRef<jobject> jchild; |
- ConvertFolderSubtree(managed, env, child, *jfolder, &jchild); |
- |
- Java_BookmarkNode_addChild(env, jfolder->obj(), jchild.obj()); |
- if (ClearException(env)) { |
- LOG(WARNING) << "Java exception while adding child node."; |
- return; |
- } |
- } |
- } |
- } |
- |
- ManagedBookmarkService* managed_bookmark_service_; |
- |
- DISALLOW_COPY_AND_ASSIGN(GetEditableBookmarkFoldersTask); |
-}; |
- |
-// Creates a Java BookmarkNode object for a node given its id. |
-class GetBookmarkNodeTask : public BookmarkModelTask { |
- public: |
- explicit GetBookmarkNodeTask(BookmarkModel* model) |
- : BookmarkModelTask(model) { |
- } |
- |
- void Run(const int64_t id, |
- bool get_parent, |
- bool get_children, |
- ScopedJavaGlobalRef<jobject>* jnode) { |
- return RunOnUIThreadBlocking::Run( |
- base::Bind(&GetBookmarkNodeTask::RunOnUIThread, |
- model(), id, get_parent, get_children, jnode)); |
- } |
- |
- static void RunOnUIThread(BookmarkModel* model, |
- const int64_t id, |
- bool get_parent, |
- bool get_children, |
- ScopedJavaGlobalRef<jobject>* jnode) { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- const BookmarkNode* node = bookmarks::GetBookmarkNodeByID(model, id); |
- if (!node || !jnode) |
- return; |
- |
- ScopedJavaGlobalRef<jobject> jparent; |
- if (get_parent) { |
- ConvertBookmarkNode(node->parent(), ScopedJavaLocalRef<jobject>(), |
- &jparent); |
- } |
- |
- ConvertBookmarkNode(node, jparent, jnode); |
- |
- JNIEnv* env = AttachCurrentThread(); |
- if (!jparent.is_null()) { |
- Java_BookmarkNode_addChild(env, jparent.obj(), jnode->obj()); |
- if (ClearException(env)) { |
- LOG(WARNING) << "Java exception while adding child node."; |
- return; |
- } |
- } |
- |
- if (get_children) { |
- for (int i = 0; i < node->child_count(); ++i) { |
- ScopedJavaGlobalRef<jobject> jchild; |
- ConvertBookmarkNode(node->GetChild(i), *jnode, &jchild); |
- Java_BookmarkNode_addChild(env, jnode->obj(), jchild.obj()); |
- if (ClearException(env)) { |
- LOG(WARNING) << "Java exception while adding child node."; |
- return; |
- } |
- } |
- } |
- } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(GetBookmarkNodeTask); |
-}; |
- |
-// Gets the Mobile Bookmarks node. Using this task ensures the correct |
-// initialization of the bookmark model. |
-class GetMobileBookmarksNodeTask : public BookmarkModelTask { |
- public: |
- explicit GetMobileBookmarksNodeTask(BookmarkModel* model) |
- : BookmarkModelTask(model) {} |
- |
- const BookmarkNode* Run() { |
- const BookmarkNode* result = NULL; |
- RunOnUIThreadBlocking::Run( |
- base::Bind(&GetMobileBookmarksNodeTask::RunOnUIThread, |
- model(), &result)); |
- return result; |
- } |
- |
- static void RunOnUIThread(BookmarkModel* model, const BookmarkNode** result) { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- DCHECK(result); |
- *result = model->mobile_node(); |
- } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(GetMobileBookmarksNodeTask); |
-}; |
- |
// ------------- Aynchronous requests classes ------------- // |
// Base class for asynchronous blocking requests to Chromium services. |
@@ -653,62 +365,6 @@ class AsyncServiceRequest : protected BlockingUIThreadAsyncRequest { |
DISALLOW_COPY_AND_ASSIGN(AsyncServiceRequest); |
}; |
-// Base class for all asynchronous blocking tasks that use the favicon service. |
-class FaviconServiceTask : public AsyncServiceRequest<favicon::FaviconService> { |
- public: |
- FaviconServiceTask(base::CancelableTaskTracker* cancelable_tracker, |
- Profile* profile, |
- favicon::FaviconService* favicon_service) |
- : AsyncServiceRequest<favicon::FaviconService>(favicon_service, |
- cancelable_tracker), |
- profile_(profile) {} |
- |
- Profile* profile() const { return profile_; } |
- |
- private: |
- Profile* profile_; |
- |
- DISALLOW_COPY_AND_ASSIGN(FaviconServiceTask); |
-}; |
- |
-// Retrieves the favicon or touch icon for a URL from the FaviconService. |
-class BookmarkIconFetchTask : public FaviconServiceTask { |
- public: |
- BookmarkIconFetchTask(base::CancelableTaskTracker* cancelable_tracker, |
- Profile* profile, |
- favicon::FaviconService* favicon_service) |
- : FaviconServiceTask(cancelable_tracker, profile, favicon_service) {} |
- |
- favicon_base::FaviconRawBitmapResult Run(const GURL& url) { |
- float max_scale = ui::GetScaleForScaleFactor( |
- ResourceBundle::GetSharedInstance().GetMaxScaleFactor()); |
- int desired_size_in_pixel = std::ceil(gfx::kFaviconSize * max_scale); |
- |
- if (service() == NULL) |
- return favicon_base::FaviconRawBitmapResult(); |
- |
- RunAsyncRequestOnUIThreadBlocking(base::Bind( |
- &favicon::FaviconService::GetRawFaviconForPageURL, |
- base::Unretained(service()), url, |
- favicon_base::FAVICON | favicon_base::TOUCH_ICON, desired_size_in_pixel, |
- base::Bind(&BookmarkIconFetchTask::OnFaviconRetrieved, |
- base::Unretained(this)), |
- cancelable_tracker())); |
- return result_; |
- } |
- |
- private: |
- void OnFaviconRetrieved( |
- const favicon_base::FaviconRawBitmapResult& bitmap_result) { |
- result_ = bitmap_result; |
- RequestCompleted(); |
- } |
- |
- favicon_base::FaviconRawBitmapResult result_; |
- |
- DISALLOW_COPY_AND_ASSIGN(BookmarkIconFetchTask); |
-}; |
- |
// Base class for all asynchronous blocking tasks that use the Android history |
// provider service. |
class HistoryProviderTask |
@@ -1497,119 +1153,6 @@ jint ChromeBrowserProvider::RemoveSearchTermFromAPI( |
return task.Run(where_clause, where_args); |
} |
-// ------------- Provider custom APIs ------------- // |
- |
-jboolean ChromeBrowserProvider::BookmarkNodeExists( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- jlong id) { |
- BookmarkNodeExistsTask task(bookmark_model_); |
- return task.Run(id); |
-} |
- |
-jlong ChromeBrowserProvider::CreateBookmarksFolderOnce( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- const JavaParamRef<jstring>& jtitle, |
- jlong parent_id) { |
- base::string16 title = ConvertJavaStringToUTF16(env, jtitle); |
- if (title.empty()) |
- return kInvalidBookmarkId; |
- |
- CreateBookmarksFolderOnceTask task(bookmark_model_); |
- return task.Run(title, parent_id); |
-} |
- |
-ScopedJavaLocalRef<jobject> ChromeBrowserProvider::GetEditableBookmarkFolders( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- ScopedJavaGlobalRef<jobject> jroot; |
- ManagedBookmarkService* managed = |
- ManagedBookmarkServiceFactory::GetForProfile(profile_); |
- BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_); |
- GetEditableBookmarkFoldersTask task(managed, model); |
- task.Run(&jroot); |
- return ScopedJavaLocalRef<jobject>(jroot); |
-} |
- |
-void ChromeBrowserProvider::RemoveAllUserBookmarks( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- LOG(ERROR) << "begin ChromeBrowserProvider::RemoveAllUserBookmarks"; |
- RemoveAllUserBookmarksTask task(bookmark_model_); |
- task.Run(); |
- LOG(ERROR) << "end ChromeBrowserProvider::RemoveAllUserBookmarks"; |
-} |
- |
-ScopedJavaLocalRef<jobject> ChromeBrowserProvider::GetBookmarkNode( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- jlong id, |
- jboolean get_parent, |
- jboolean get_children) { |
- ScopedJavaGlobalRef<jobject> jnode; |
- GetBookmarkNodeTask task(bookmark_model_); |
- task.Run(id, get_parent, get_children, &jnode); |
- return ScopedJavaLocalRef<jobject>(jnode); |
-} |
- |
-ScopedJavaLocalRef<jobject> ChromeBrowserProvider::GetMobileBookmarksFolder( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- ScopedJavaGlobalRef<jobject> jnode; |
- GetMobileBookmarksNodeTask task(bookmark_model_); |
- ConvertBookmarkNode(task.Run(), ScopedJavaLocalRef<jobject>(), &jnode); |
- return ScopedJavaLocalRef<jobject>(jnode); |
-} |
- |
-jboolean ChromeBrowserProvider::IsBookmarkInMobileBookmarksBranch( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- jlong id) { |
- IsInMobileBookmarksBranchTask task(bookmark_model_); |
- return task.Run(id); |
-} |
- |
-ScopedJavaLocalRef<jbyteArray> ChromeBrowserProvider::GetFaviconOrTouchIcon( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- const JavaParamRef<jstring>& jurl) { |
- if (!jurl) |
- return ScopedJavaLocalRef<jbyteArray>(); |
- |
- GURL url = GURL(ConvertJavaStringToUTF16(env, jurl)); |
- BookmarkIconFetchTask favicon_task(&cancelable_task_tracker_, profile_, |
- favicon_service_); |
- favicon_base::FaviconRawBitmapResult bitmap_result = favicon_task.Run(url); |
- |
- if (!bitmap_result.is_valid() || !bitmap_result.bitmap_data.get()) |
- return ScopedJavaLocalRef<jbyteArray>(); |
- |
- return base::android::ToJavaByteArray(env, bitmap_result.bitmap_data->front(), |
- bitmap_result.bitmap_data->size()); |
-} |
- |
-ScopedJavaLocalRef<jbyteArray> ChromeBrowserProvider::GetThumbnail( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- const JavaParamRef<jstring>& jurl) { |
- if (!jurl) |
- return ScopedJavaLocalRef<jbyteArray>(); |
- GURL url = GURL(ConvertJavaStringToUTF16(env, jurl)); |
- |
- // GetPageThumbnail is synchronous and can be called from any thread. |
- scoped_refptr<base::RefCountedMemory> thumbnail; |
- if (top_sites_) |
- top_sites_->GetPageThumbnail(url, false, &thumbnail); |
- |
- if (!thumbnail.get() || !thumbnail->front()) { |
- return ScopedJavaLocalRef<jbyteArray>(); |
- } |
- |
- return base::android::ToJavaByteArray(env, thumbnail->front(), |
- thumbnail->size()); |
-} |
- |
// ------------- Observer-related methods ------------- // |
void ChromeBrowserProvider::ExtensiveBookmarkChangesBeginning( |