Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: chrome/browser/android/webapk/webapk_update_manager.cc

Issue 2943913002: [Android WebAPK] Make webapk_installer.cc return proto as base64 string
Patch Set: Merge branch 'master' into background_updates00 Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/android/webapk/webapk_installer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/webapk/webapk_update_manager.h" 5 #include "chrome/browser/android/webapk/webapk_update_manager.h"
6 6
7 #include <jni.h> 7 #include <jni.h>
8 #include <memory> 8 #include <memory>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/android/callback_android.h" 11 #include "base/android/callback_android.h"
12 #include "base/android/jni_array.h" 12 #include "base/android/jni_array.h"
13 #include "base/android/jni_string.h" 13 #include "base/android/jni_string.h"
14 #include "base/android/scoped_java_ref.h" 14 #include "base/android/scoped_java_ref.h"
15 #include "base/bind.h" 15 #include "base/bind.h"
16 #include "base/files/file_path.h"
16 #include "base/memory/ptr_util.h" 17 #include "base/memory/ptr_util.h"
17 #include "base/strings/string16.h" 18 #include "base/strings/string16.h"
18 #include "base/threading/thread_task_runner_handle.h" 19 #include "base/threading/thread_task_runner_handle.h"
19 #include "chrome/browser/android/shortcut_info.h" 20 #include "chrome/browser/android/shortcut_info.h"
20 #include "chrome/browser/android/webapk/webapk_install_service.h" 21 #include "chrome/browser/android/webapk/webapk_install_service.h"
21 #include "chrome/browser/android/webapk/webapk_installer.h" 22 #include "chrome/browser/android/webapk/webapk_installer.h"
22 #include "chrome/browser/profiles/profile.h" 23 #include "chrome/browser/profiles/profile.h"
23 #include "chrome/browser/profiles/profile_manager.h" 24 #include "chrome/browser/profiles/profile_manager.h"
24 #include "content/public/browser/browser_thread.h" 25 #include "content/public/browser/browser_thread.h"
25 #include "jni/WebApkUpdateManager_jni.h" 26 #include "jni/WebApkUpdateManager_jni.h"
26 #include "third_party/skia/include/core/SkBitmap.h" 27 #include "third_party/skia/include/core/SkBitmap.h"
27 #include "ui/gfx/android/java_bitmap.h" 28 #include "ui/gfx/android/java_bitmap.h"
28 #include "url/gurl.h" 29 #include "url/gurl.h"
29 30
30 using base::android::JavaRef; 31 using base::android::JavaRef;
31 using base::android::JavaParamRef; 32 using base::android::JavaParamRef;
32 using base::android::ScopedJavaGlobalRef; 33 using base::android::ScopedJavaGlobalRef;
33 34
34 namespace { 35 namespace {
35 36
36 // Called with the serialized proto to send to the WebAPK server. 37 // Called after saving the update request proto either succeeds or fails.
37 void OnBuiltProto(const JavaRef<jobject>& java_callback, 38 void OnStoredUpdateRequest(const JavaRef<jobject>& java_callback,
38 std::unique_ptr<std::vector<uint8_t>> proto) { 39 bool success) {
39 base::android::RunCallbackAndroid(java_callback, *proto); 40 base::android::RunCallbackAndroid(java_callback, success);
40 } 41 }
41 42
42 // Called after the update either succeeds or fails. 43 // Called after the update either succeeds or fails.
43 void OnUpdated(const JavaRef<jobject>& java_callback, 44 void OnUpdated(const JavaRef<jobject>& java_callback,
44 WebApkInstallResult result, 45 WebApkInstallResult result,
45 bool relax_updates, 46 bool relax_updates,
46 const std::string& webapk_package) { 47 const std::string& webapk_package) {
47 JNIEnv* env = base::android::AttachCurrentThread(); 48 JNIEnv* env = base::android::AttachCurrentThread();
48 Java_WebApkUpdateCallback_onResultFromNative( 49 Java_WebApkUpdateCallback_onResultFromNative(
49 env, java_callback, static_cast<int>(result), relax_updates); 50 env, java_callback, static_cast<int>(result), relax_updates);
50 } 51 }
51 52
52 } // anonymous namespace 53 } // anonymous namespace
53 54
54 // static JNI method. 55 // static JNI method.
55 static void BuildUpdateWebApkProto( 56 static void StoreWebApkUpdateRequestToDisk(
56 JNIEnv* env, 57 JNIEnv* env,
57 const JavaParamRef<jclass>& clazz, 58 const JavaParamRef<jclass>& clazz,
59 const JavaParamRef<jstring>& java_file_path,
58 const JavaParamRef<jstring>& java_start_url, 60 const JavaParamRef<jstring>& java_start_url,
59 const JavaParamRef<jstring>& java_scope, 61 const JavaParamRef<jstring>& java_scope,
60 const JavaParamRef<jstring>& java_name, 62 const JavaParamRef<jstring>& java_name,
61 const JavaParamRef<jstring>& java_short_name, 63 const JavaParamRef<jstring>& java_short_name,
62 const JavaParamRef<jstring>& java_primary_icon_url, 64 const JavaParamRef<jstring>& java_primary_icon_url,
63 const JavaParamRef<jobject>& java_primary_icon_bitmap, 65 const JavaParamRef<jobject>& java_primary_icon_bitmap,
64 const JavaParamRef<jstring>& java_badge_icon_url, 66 const JavaParamRef<jstring>& java_badge_icon_url,
65 const JavaParamRef<jobject>& java_badge_icon_bitmap, 67 const JavaParamRef<jobject>& java_badge_icon_bitmap,
66 const JavaParamRef<jobjectArray>& java_icon_urls, 68 const JavaParamRef<jobjectArray>& java_icon_urls,
67 const JavaParamRef<jobjectArray>& java_icon_hashes, 69 const JavaParamRef<jobjectArray>& java_icon_hashes,
68 jint java_display_mode, 70 jint java_display_mode,
69 jint java_orientation, 71 jint java_orientation,
70 jlong java_theme_color, 72 jlong java_theme_color,
71 jlong java_background_color, 73 jlong java_background_color,
72 const JavaParamRef<jstring>& java_web_manifest_url, 74 const JavaParamRef<jstring>& java_web_manifest_url,
73 const JavaParamRef<jstring>& java_webapk_package, 75 const JavaParamRef<jstring>& java_webapk_package,
74 jint java_webapk_version, 76 jint java_webapk_version,
75 jboolean java_is_manifest_stale, 77 jboolean java_is_manifest_stale,
76 const JavaParamRef<jobject>& java_callback) { 78 const JavaParamRef<jobject>& java_callback) {
77 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 79 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
78 80
81 std::string file_path = ConvertJavaStringToUTF8(env, java_file_path);
82
79 ShortcutInfo info(GURL(ConvertJavaStringToUTF8(env, java_start_url))); 83 ShortcutInfo info(GURL(ConvertJavaStringToUTF8(env, java_start_url)));
80 info.scope = GURL(ConvertJavaStringToUTF8(env, java_scope)); 84 info.scope = GURL(ConvertJavaStringToUTF8(env, java_scope));
81 info.name = ConvertJavaStringToUTF16(env, java_name); 85 info.name = ConvertJavaStringToUTF16(env, java_name);
82 info.short_name = ConvertJavaStringToUTF16(env, java_short_name); 86 info.short_name = ConvertJavaStringToUTF16(env, java_short_name);
83 info.user_title = info.short_name; 87 info.user_title = info.short_name;
84 info.display = static_cast<blink::WebDisplayMode>(java_display_mode); 88 info.display = static_cast<blink::WebDisplayMode>(java_display_mode);
85 info.orientation = 89 info.orientation =
86 static_cast<blink::WebScreenOrientationLockType>(java_orientation); 90 static_cast<blink::WebScreenOrientationLockType>(java_orientation);
87 info.theme_color = (int64_t)java_theme_color; 91 info.theme_color = (int64_t)java_theme_color;
88 info.background_color = (int64_t)java_background_color; 92 info.background_color = (int64_t)java_background_color;
(...skipping 22 matching lines...) Expand all
111 SkBitmap badge_icon; 115 SkBitmap badge_icon;
112 if (!java_badge_icon_bitmap.is_null()) { 116 if (!java_badge_icon_bitmap.is_null()) {
113 gfx::JavaBitmap java_badge_icon_bitmap_lock(java_badge_icon_bitmap); 117 gfx::JavaBitmap java_badge_icon_bitmap_lock(java_badge_icon_bitmap);
114 gfx::CreateSkBitmapFromJavaBitmap(java_badge_icon_bitmap_lock); 118 gfx::CreateSkBitmapFromJavaBitmap(java_badge_icon_bitmap_lock);
115 badge_icon.setImmutable(); 119 badge_icon.setImmutable();
116 } 120 }
117 121
118 std::string webapk_package; 122 std::string webapk_package;
119 ConvertJavaStringToUTF8(env, java_webapk_package, &webapk_package); 123 ConvertJavaStringToUTF8(env, java_webapk_package, &webapk_package);
120 124
121 WebApkInstaller::BuildProto( 125 WebApkInstaller::StoreUpdateRequestToDisk(
122 info, primary_icon, badge_icon, webapk_package, 126 base::FilePath(file_path), info, primary_icon, badge_icon, webapk_package,
123 std::to_string(java_webapk_version), icon_url_to_murmur2_hash, 127 std::to_string(java_webapk_version), icon_url_to_murmur2_hash,
124 java_is_manifest_stale, 128 java_is_manifest_stale,
125 base::Bind(&OnBuiltProto, ScopedJavaGlobalRef<jobject>(java_callback))); 129 base::Bind(&OnStoredUpdateRequest,
130 ScopedJavaGlobalRef<jobject>(java_callback)));
126 } 131 }
127 132
128 // static JNI method. 133 // static JNI method.
129 static void UpdateWebApk(JNIEnv* env, 134 static void UpdateWebApkFromStoredRequest(
130 const JavaParamRef<jclass>& clazz, 135 JNIEnv* env,
131 const JavaParamRef<jstring>& java_webapk_package, 136 const JavaParamRef<jclass>& clazz,
132 const JavaParamRef<jstring>& java_start_url, 137 const JavaParamRef<jstring>& java_request_file_path,
133 const JavaParamRef<jstring>& java_short_name, 138 const JavaParamRef<jobject>& java_callback) {
134 const JavaParamRef<jbyteArray>& java_serialized_proto,
135 const JavaParamRef<jobject>& java_callback) {
136 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 139 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
137 140
138 ScopedJavaGlobalRef<jobject> callback_ref(java_callback); 141 ScopedJavaGlobalRef<jobject> callback_ref(java_callback);
139 142
140 Profile* profile = ProfileManager::GetLastUsedProfile(); 143 Profile* profile = ProfileManager::GetLastUsedProfile();
141 if (profile == nullptr) { 144 if (profile == nullptr) {
142 base::ThreadTaskRunnerHandle::Get()->PostTask( 145 base::ThreadTaskRunnerHandle::Get()->PostTask(
143 FROM_HERE, 146 FROM_HERE,
144 base::Bind(&OnUpdated, callback_ref, WebApkInstallResult::FAILURE, 147 base::Bind(&OnUpdated, callback_ref, WebApkInstallResult::FAILURE,
145 false /* relax_updates */, "" /* webapk_package */)); 148 false /* relax_updates */, "" /* webapk_package */));
146 return; 149 return;
147 } 150 }
148 151
149 std::string webapk_package = 152 std::string request_file_path =
150 ConvertJavaStringToUTF8(env, java_webapk_package); 153 ConvertJavaStringToUTF8(env, java_request_file_path);
151 GURL start_url = GURL(ConvertJavaStringToUTF8(env, java_start_url));
152 base::string16 short_name = ConvertJavaStringToUTF16(env, java_short_name);
153 std::unique_ptr<std::vector<uint8_t>> serialized_proto =
154 base::MakeUnique<std::vector<uint8_t>>();
155 JavaByteArrayToByteVector(env, java_serialized_proto, serialized_proto.get());
156
157 WebApkInstallService::Get(profile)->UpdateAsync( 154 WebApkInstallService::Get(profile)->UpdateAsync(
158 webapk_package, start_url, short_name, std::move(serialized_proto), 155 base::FilePath(request_file_path), base::Bind(&OnUpdated, callback_ref));
159 base::Bind(&OnUpdated, callback_ref));
160 } 156 }
OLDNEW
« no previous file with comments | « chrome/browser/android/webapk/webapk_installer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698