Gang Wu | 1334996 | 2018-08-22 18:26:59 | [diff] [blame] | 1 | // Copyright 2018 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef CHROME_BROWSER_ANDROID_FEED_FEED_JOURNAL_BRIDGE_H_ |
| 6 | #define CHROME_BROWSER_ANDROID_FEED_FEED_JOURNAL_BRIDGE_H_ |
| 7 | |
Gang Wu | 6eca5f2 | 2018-09-10 23:07:44 | [diff] [blame] | 8 | #include <memory> |
Gang Wu | 0b16cb6 | 2018-08-29 22:21:00 | [diff] [blame] | 9 | #include <string> |
| 10 | #include <vector> |
| 11 | |
Gang Wu | 1334996 | 2018-08-22 18:26:59 | [diff] [blame] | 12 | #include "base/android/scoped_java_ref.h" |
| 13 | #include "base/memory/weak_ptr.h" |
| 14 | |
| 15 | namespace feed { |
| 16 | |
| 17 | class FeedJournalDatabase; |
Gang Wu | 6eca5f2 | 2018-09-10 23:07:44 | [diff] [blame] | 18 | class JournalMutation; |
Gang Wu | 1334996 | 2018-08-22 18:26:59 | [diff] [blame] | 19 | |
| 20 | // Native counterpart of FeedJournalBridge.java. Holds non-owning pointers |
| 21 | // to native implementation to which operations are delegated. Results are |
| 22 | // passed back by a single argument callback so |
| 23 | // base::android::RunBooleanCallbackAndroid() and |
| 24 | // base::android::RunObjectCallbackAndroid() can be used. This bridge is |
| 25 | // instantiated, owned, and destroyed from Java. |
| 26 | class FeedJournalBridge { |
| 27 | public: |
| 28 | explicit FeedJournalBridge(FeedJournalDatabase* feed_Storage_database); |
| 29 | ~FeedJournalBridge(); |
| 30 | |
| 31 | void Destroy(JNIEnv* j_env, const base::android::JavaRef<jobject>& j_this); |
| 32 | |
Gang Wu | 6eca5f2 | 2018-09-10 23:07:44 | [diff] [blame] | 33 | // Database related methods, they add/delete/update database. |
Gang Wu | 1334996 | 2018-08-22 18:26:59 | [diff] [blame] | 34 | void LoadJournal(JNIEnv* j_env, |
| 35 | const base::android::JavaRef<jobject>& j_this, |
| 36 | const base::android::JavaRef<jstring>& j_journal_name, |
Gang Wu | 9c9ccd4 | 2018-09-18 23:36:51 | [diff] [blame] | 37 | const base::android::JavaRef<jobject>& j_success_callback, |
| 38 | const base::android::JavaRef<jobject>& j_failure_callback); |
Gang Wu | 1334996 | 2018-08-22 18:26:59 | [diff] [blame] | 39 | void CommitJournalMutation(JNIEnv* j_env, |
| 40 | const base::android::JavaRef<jobject>& j_this, |
| 41 | const base::android::JavaRef<jobject>& j_callback); |
Gang Wu | 9c9ccd4 | 2018-09-18 23:36:51 | [diff] [blame] | 42 | void DoesJournalExist( |
| 43 | JNIEnv* j_env, |
| 44 | const base::android::JavaRef<jobject>& j_this, |
| 45 | const base::android::JavaRef<jstring>& j_journal_name, |
| 46 | const base::android::JavaRef<jobject>& j_success_callback, |
| 47 | const base::android::JavaRef<jobject>& j_failure_callback); |
| 48 | void LoadAllJournalKeys( |
| 49 | JNIEnv* j_env, |
| 50 | const base::android::JavaRef<jobject>& j_this, |
| 51 | const base::android::JavaRef<jobject>& j_success_callback, |
| 52 | const base::android::JavaRef<jobject>& j_failure_callback); |
Gang Wu | 1334996 | 2018-08-22 18:26:59 | [diff] [blame] | 53 | void DeleteAllJournals(JNIEnv* j_env, |
| 54 | const base::android::JavaRef<jobject>& j_this, |
| 55 | const base::android::JavaRef<jobject>& j_callback); |
| 56 | |
Gang Wu | 6eca5f2 | 2018-09-10 23:07:44 | [diff] [blame] | 57 | // The following methods create/delete mutation, and add operations into |
| 58 | // mutation. |
| 59 | void StartJournalMutation( |
Gang Wu | 1334996 | 2018-08-22 18:26:59 | [diff] [blame] | 60 | JNIEnv* j_env, |
| 61 | const base::android::JavaRef<jobject>& j_this, |
| 62 | const base::android::JavaRef<jstring>& j_journal_name); |
| 63 | void DeleteJournalMutation(JNIEnv* j_env, |
| 64 | const base::android::JavaRef<jobject>& j_this); |
| 65 | void AddAppendOperation(JNIEnv* j_env, |
| 66 | const base::android::JavaRef<jobject>& j_this, |
Gang Wu | dc10333 | 2018-10-03 02:41:26 | [diff] [blame] | 67 | const base::android::JavaRef<jbyteArray>& j_value); |
Gang Wu | 1334996 | 2018-08-22 18:26:59 | [diff] [blame] | 68 | void AddCopyOperation( |
| 69 | JNIEnv* j_env, |
| 70 | const base::android::JavaRef<jobject>& j_this, |
| 71 | const base::android::JavaRef<jstring>& j_to_journal_name); |
| 72 | void AddDeleteOperation(JNIEnv* j_env, |
| 73 | const base::android::JavaRef<jobject>& j_this); |
| 74 | |
| 75 | private: |
Sky Malice | 070b13aa | 2018-11-14 00:46:46 | [diff] [blame] | 76 | void OnLoadJournalDone( |
| 77 | base::android::ScopedJavaGlobalRef<jobject> success_callback, |
| 78 | base::android::ScopedJavaGlobalRef<jobject> failure_callback, |
| 79 | bool success, |
| 80 | std::vector<std::string> entries); |
| 81 | void OnLoadJournalKeyDone( |
| 82 | base::android::ScopedJavaGlobalRef<jobject> success_callback, |
| 83 | base::android::ScopedJavaGlobalRef<jobject> failure_callback, |
| 84 | bool success, |
| 85 | std::vector<std::string> entries); |
| 86 | void OnStorageCheckExistingCallbackDone( |
| 87 | base::android::ScopedJavaGlobalRef<jobject> success_callback, |
| 88 | base::android::ScopedJavaGlobalRef<jobject> failure_callback, |
| 89 | bool success, |
| 90 | bool exists); |
| 91 | void OnStorageBooleanCallbackDone( |
| 92 | base::android::ScopedJavaGlobalRef<jobject> callback, |
| 93 | bool exists); |
| 94 | |
Gang Wu | 6eca5f2 | 2018-09-10 23:07:44 | [diff] [blame] | 95 | // This unique_ptr will hold a list of JournalOperations which are not |
| 96 | // committed yet. After send |journal_mutation_| to database, this unique_ptr |
| 97 | // will be reset. |
| 98 | std::unique_ptr<JournalMutation> journal_mutation_; |
Gang Wu | 0b16cb6 | 2018-08-29 22:21:00 | [diff] [blame] | 99 | |
Gang Wu | 1334996 | 2018-08-22 18:26:59 | [diff] [blame] | 100 | FeedJournalDatabase* feed_journal_database_; |
| 101 | |
| 102 | base::WeakPtrFactory<FeedJournalBridge> weak_ptr_factory_; |
| 103 | |
| 104 | DISALLOW_COPY_AND_ASSIGN(FeedJournalBridge); |
| 105 | }; |
| 106 | |
| 107 | } // namespace feed |
| 108 | |
| 109 | #endif // CHROME_BROWSER_ANDROID_FEED_FEED_JOURNAL_BRIDGE_H_ |