blob: ccff21753fb3b00f26ba8f8242145864e7765b17 [file] [log] [blame]
Gang Wu13349962018-08-22 18:26:591// 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 Wu6eca5f22018-09-10 23:07:448#include <memory>
Gang Wu0b16cb62018-08-29 22:21:009#include <string>
10#include <vector>
11
Gang Wu13349962018-08-22 18:26:5912#include "base/android/scoped_java_ref.h"
13#include "base/memory/weak_ptr.h"
14
15namespace feed {
16
17class FeedJournalDatabase;
Gang Wu6eca5f22018-09-10 23:07:4418class JournalMutation;
Gang Wu13349962018-08-22 18:26:5919
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.
26class 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 Wu6eca5f22018-09-10 23:07:4433 // Database related methods, they add/delete/update database.
Gang Wu13349962018-08-22 18:26:5934 void LoadJournal(JNIEnv* j_env,
35 const base::android::JavaRef<jobject>& j_this,
36 const base::android::JavaRef<jstring>& j_journal_name,
Gang Wu9c9ccd42018-09-18 23:36:5137 const base::android::JavaRef<jobject>& j_success_callback,
38 const base::android::JavaRef<jobject>& j_failure_callback);
Gang Wu13349962018-08-22 18:26:5939 void CommitJournalMutation(JNIEnv* j_env,
40 const base::android::JavaRef<jobject>& j_this,
41 const base::android::JavaRef<jobject>& j_callback);
Gang Wu9c9ccd42018-09-18 23:36:5142 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 Wu13349962018-08-22 18:26:5953 void DeleteAllJournals(JNIEnv* j_env,
54 const base::android::JavaRef<jobject>& j_this,
55 const base::android::JavaRef<jobject>& j_callback);
56
Gang Wu6eca5f22018-09-10 23:07:4457 // The following methods create/delete mutation, and add operations into
58 // mutation.
59 void StartJournalMutation(
Gang Wu13349962018-08-22 18:26:5960 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 Wudc103332018-10-03 02:41:2667 const base::android::JavaRef<jbyteArray>& j_value);
Gang Wu13349962018-08-22 18:26:5968 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 Malice070b13aa2018-11-14 00:46:4676 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 Wu6eca5f22018-09-10 23:07:4495 // 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 Wu0b16cb62018-08-29 22:21:0099
Gang Wu13349962018-08-22 18:26:59100 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_