diff options
Diffstat (limited to 'chrome/browser')
7 files changed, 44 insertions, 9 deletions
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 63544ad..6499aa0 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn @@ -131,6 +131,9 @@ static_library("browser") { "//sync", ] + sources += rebase_path(gypi_values.chrome_browser_undo_sources, + ".", "//chrome") + if (!is_ios) { sources += rebase_path(gypi_values.chrome_browser_non_ios_sources, ".", "//chrome") diff --git a/chrome/browser/android/bookmarks/bookmarks_bridge.cc b/chrome/browser/android/bookmarks/bookmarks_bridge.cc index fe7c99b..6dcb559 100644 --- a/chrome/browser/android/bookmarks/bookmarks_bridge.cc +++ b/chrome/browser/android/bookmarks/bookmarks_bridge.cc @@ -16,9 +16,13 @@ #include "chrome/browser/profiles/profile_android.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/signin/signin_manager_factory.h" +#include "chrome/browser/undo/bookmark_undo_service.h" +#include "chrome/browser/undo/bookmark_undo_service_factory.h" +#include "chrome/browser/undo/undo_manager.h" #include "chrome/common/pref_names.h" #include "components/bookmarks/browser/bookmark_model.h" #include "components/bookmarks/browser/bookmark_utils.h" +#include "components/bookmarks/browser/scoped_group_bookmark_actions.h" #include "components/bookmarks/common/android/bookmark_type.h" #include "components/signin/core/browser/signin_manager.h" #include "content/public/browser/browser_thread.h" @@ -669,6 +673,30 @@ ScopedJavaLocalRef<jobject> BookmarksBridge::AddBookmark( return new_java_obj; } +void BookmarksBridge::Undo(JNIEnv* env, jobject obj) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + DCHECK(IsLoaded()); + BookmarkUndoService* undo_service = + BookmarkUndoServiceFactory::GetForProfile(profile_); + UndoManager* undo_manager = undo_service->undo_manager(); + undo_manager->Undo(); +} + +void BookmarksBridge::StartGroupingUndos(JNIEnv* env, jobject obj) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + DCHECK(IsLoaded()); + DCHECK(!grouped_bookmark_actions_.get()); // shouldn't have started already + grouped_bookmark_actions_.reset( + new bookmarks::ScopedGroupBookmarkActions(bookmark_model_)); +} + +void BookmarksBridge::EndGroupingUndos(JNIEnv* env, jobject obj) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + DCHECK(IsLoaded()); + DCHECK(grouped_bookmark_actions_.get()); // should only call after start + grouped_bookmark_actions_.reset(); +} + ScopedJavaLocalRef<jobject> BookmarksBridge::CreateJavaBookmark( const BookmarkNode* node) { JNIEnv* env = AttachCurrentThread(); diff --git a/chrome/browser/android/bookmarks/bookmarks_bridge.h b/chrome/browser/android/bookmarks/bookmarks_bridge.h index 91fc2f0..8a14d63 100644 --- a/chrome/browser/android/bookmarks/bookmarks_bridge.h +++ b/chrome/browser/android/bookmarks/bookmarks_bridge.h @@ -16,6 +16,10 @@ #include "components/bookmarks/browser/base_bookmark_model_observer.h" #include "components/bookmarks/common/android/bookmark_id.h" +namespace bookmarks { +class ScopedGroupBookmarkActions; +} + class Profile; // The delegate to fetch bookmarks information for the Android native @@ -130,6 +134,12 @@ class BookmarksBridge : public BaseBookmarkModelObserver, jstring j_title, jstring j_url); + void Undo(JNIEnv* env, jobject obj); + + void StartGroupingUndos(JNIEnv* env, jobject obj); + + void EndGroupingUndos(JNIEnv* env, jobject obj); + private: virtual ~BookmarksBridge(); @@ -189,6 +199,7 @@ class BookmarksBridge : public BaseBookmarkModelObserver, JavaObjectWeakGlobalRef weak_java_ref_; BookmarkModel* bookmark_model_; // weak ChromeBookmarkClient* client_; // weak + scoped_ptr<bookmarks::ScopedGroupBookmarkActions> grouped_bookmark_actions_; // Information about the Partner bookmarks (must check for IsLoaded()). // This is owned by profile. diff --git a/chrome/browser/bookmarks/bookmark_model_factory.cc b/chrome/browser/bookmarks/bookmark_model_factory.cc index 3ad36d5..d20e52f 100644 --- a/chrome/browser/bookmarks/bookmark_model_factory.cc +++ b/chrome/browser/bookmarks/bookmark_model_factory.cc @@ -67,9 +67,8 @@ KeyedService* BookmarkModelFactory::BuildServiceInstanceFor( ->GetBookmarkTaskRunner(), content::BrowserThread::GetMessageLoopProxyForThread( content::BrowserThread::UI)); -#if !defined(OS_ANDROID) bool register_bookmark_undo_service_as_observer = true; -#if !defined(OS_IOS) +#if !defined(OS_IOS) && !defined(OS_ANDROID) register_bookmark_undo_service_as_observer = CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableBookmarkUndo); @@ -78,7 +77,6 @@ KeyedService* BookmarkModelFactory::BuildServiceInstanceFor( bookmark_model->AddObserver( BookmarkUndoServiceFactory::GetForProfile(profile)); } -#endif // !defined(OS_ANDROID) return bookmark_model; } diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc index d75ad43..d6f53e4 100644 --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc @@ -163,9 +163,7 @@ EnsureBrowserContextKeyedServiceFactoriesBuilt() { BackgroundContentsServiceFactory::GetInstance(); #endif BookmarkModelFactory::GetInstance(); -#if !defined(OS_ANDROID) BookmarkUndoServiceFactory::GetInstance(); -#endif #if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) CaptivePortalServiceFactory::GetInstance(); #endif diff --git a/chrome/browser/sync/glue/bookmark_change_processor.cc b/chrome/browser/sync/glue/bookmark_change_processor.cc index 4a4b701..ae0e854 100644 --- a/chrome/browser/sync/glue/bookmark_change_processor.cc +++ b/chrome/browser/sync/glue/bookmark_change_processor.cc @@ -530,9 +530,7 @@ void BookmarkChangeProcessor::ApplyChangesFromSyncModel( model->RemoveObserver(this); // Changes made to the bookmark model due to sync should not be undoable. -#if !defined(OS_ANDROID) ScopedSuspendBookmarkUndo suspend_undo(profile_); -#endif // Notify UI intensive observers of BookmarkModel that we are about to make // potentially significant changes to it, so the updates may be batched. For diff --git a/chrome/browser/sync/glue/bookmark_model_associator.cc b/chrome/browser/sync/glue/bookmark_model_associator.cc index c77bf96..69e4a7f0 100644 --- a/chrome/browser/sync/glue/bookmark_model_associator.cc +++ b/chrome/browser/sync/glue/bookmark_model_associator.cc @@ -402,9 +402,8 @@ syncer::SyncError BookmarkModelAssociator::AssociateModels( syncer::SyncMergeResult* syncer_merge_result) { // Since any changes to the bookmark model made here are not user initiated, // these change should not be undoable and so suspend the undo tracking. -#if !defined(OS_ANDROID) ScopedSuspendBookmarkUndo suspend_undo(profile_); -#endif + syncer::SyncError error = CheckModelSyncState(local_merge_result, syncer_merge_result); if (error.IsSet()) |