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

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

Issue 2933783002: [Android WebAPK] Change WebAPK update into two phases (Closed)
Patch Set: Created 3 years, 6 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
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>
dominickn 2017/06/14 00:14:23 #include <memory> #include <vector>
8 8
9 #include "base/android/callback_android.h"
9 #include "base/android/jni_array.h" 10 #include "base/android/jni_array.h"
10 #include "base/android/jni_string.h" 11 #include "base/android/jni_string.h"
12 #include "base/android/scoped_java_ref.h"
11 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/memory/ptr_util.h"
15 #include "base/strings/string16.h"
12 #include "base/threading/thread_task_runner_handle.h" 16 #include "base/threading/thread_task_runner_handle.h"
13 #include "chrome/browser/android/shortcut_info.h" 17 #include "chrome/browser/android/shortcut_info.h"
14 #include "chrome/browser/android/webapk/webapk_install_service.h" 18 #include "chrome/browser/android/webapk/webapk_install_service.h"
19 #include "chrome/browser/android/webapk/webapk_installer.h"
15 #include "chrome/browser/profiles/profile.h" 20 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/profiles/profile_manager.h" 21 #include "chrome/browser/profiles/profile_manager.h"
17 #include "content/public/browser/browser_thread.h" 22 #include "content/public/browser/browser_thread.h"
18 #include "jni/WebApkUpdateManager_jni.h" 23 #include "jni/WebApkUpdateManager_jni.h"
19 #include "third_party/skia/include/core/SkBitmap.h" 24 #include "third_party/skia/include/core/SkBitmap.h"
20 #include "ui/gfx/android/java_bitmap.h" 25 #include "ui/gfx/android/java_bitmap.h"
21 #include "url/gurl.h" 26 #include "url/gurl.h"
22 27
28 using base::android::JavaRef;
23 using base::android::JavaParamRef; 29 using base::android::JavaParamRef;
30 using base::android::ScopedJavaGlobalRef;
31
32 namespace {
33
34 // Called with the serialized proto to send to the WebAPK server.
35 void OnBuiltProto(const JavaRef<jobject>& java_callback,
36 std::unique_ptr<std::vector<uint8_t>> proto) {
37 base::android::RunCallbackAndroid(java_callback, *proto);
38 }
39
40 // Called after the update either succeeds or fails.
41 void OnUpdated(const JavaRef<jobject>& java_callback,
42 WebApkInstallResult result,
43 bool relax_updates,
44 const std::string& webapk_package) {
45 JNIEnv* env = base::android::AttachCurrentThread();
46 Java_WebApkUpdateCallback_onResultFromNative(
47 env, java_callback, static_cast<int>(result), relax_updates);
48 }
49
50 } // anonymous namespace
24 51
25 // static 52 // static
26 bool WebApkUpdateManager::Register(JNIEnv* env) { 53 bool WebApkUpdateManager::Register(JNIEnv* env) {
27 return RegisterNativesImpl(env); 54 return RegisterNativesImpl(env);
28 } 55 }
29 56
30 // static
31 void WebApkUpdateManager::OnBuiltWebApk(const std::string& id,
32 WebApkInstallResult result,
33 bool relax_updates,
34 const std::string& webapk_package) {
35 JNIEnv* env = base::android::AttachCurrentThread();
36
37 base::android::ScopedJavaLocalRef<jstring> java_id =
38 base::android::ConvertUTF8ToJavaString(env, id);
39 Java_WebApkUpdateManager_onBuiltWebApk(
40 env, java_id.obj(), static_cast<int>(result), relax_updates);
41 }
42
43 // static JNI method. 57 // static JNI method.
44 static void UpdateAsync( 58 static void BuildUpdateWebApkProto(
45 JNIEnv* env, 59 JNIEnv* env,
46 const JavaParamRef<jclass>& clazz, 60 const JavaParamRef<jclass>& clazz,
47 const JavaParamRef<jstring>& java_id,
48 const JavaParamRef<jstring>& java_start_url, 61 const JavaParamRef<jstring>& java_start_url,
49 const JavaParamRef<jstring>& java_scope, 62 const JavaParamRef<jstring>& java_scope,
50 const JavaParamRef<jstring>& java_name, 63 const JavaParamRef<jstring>& java_name,
51 const JavaParamRef<jstring>& java_short_name, 64 const JavaParamRef<jstring>& java_short_name,
52 const JavaParamRef<jstring>& java_best_primary_icon_url, 65 const JavaParamRef<jstring>& java_best_primary_icon_url,
53 const JavaParamRef<jobject>& java_best_primary_icon_bitmap, 66 const JavaParamRef<jobject>& java_best_primary_icon_bitmap,
54 const JavaParamRef<jobjectArray>& java_icon_urls, 67 const JavaParamRef<jobjectArray>& java_icon_urls,
55 const JavaParamRef<jobjectArray>& java_icon_hashes, 68 const JavaParamRef<jobjectArray>& java_icon_hashes,
56 jint java_display_mode, 69 jint java_display_mode,
57 jint java_orientation, 70 jint java_orientation,
58 jlong java_theme_color, 71 jlong java_theme_color,
59 jlong java_background_color, 72 jlong java_background_color,
60 const JavaParamRef<jstring>& java_web_manifest_url, 73 const JavaParamRef<jstring>& java_web_manifest_url,
61 const JavaParamRef<jstring>& java_webapk_package, 74 const JavaParamRef<jstring>& java_webapk_package,
62 jint java_webapk_version, 75 jint java_webapk_version,
63 jboolean java_is_manifest_stale) { 76 jboolean java_is_manifest_stale,
77 const JavaParamRef<jobject>& java_callback) {
64 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 78 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
65 79
66 Profile* profile = ProfileManager::GetLastUsedProfile();
67 if (profile == nullptr) {
68 NOTREACHED() << "Profile not found.";
69 return;
70 }
71
72 std::string id(ConvertJavaStringToUTF8(env, java_id));
73 GURL start_url(ConvertJavaStringToUTF8(env, java_start_url)); 80 GURL start_url(ConvertJavaStringToUTF8(env, java_start_url));
74 GURL scope(ConvertJavaStringToUTF8(env, java_scope)); 81 GURL scope(ConvertJavaStringToUTF8(env, java_scope));
75 GURL web_manifest_url(ConvertJavaStringToUTF8(env, java_web_manifest_url)); 82 GURL web_manifest_url(ConvertJavaStringToUTF8(env, java_web_manifest_url));
76 GURL best_primary_icon_url( 83 GURL best_primary_icon_url(
77 ConvertJavaStringToUTF8(env, java_best_primary_icon_url)); 84 ConvertJavaStringToUTF8(env, java_best_primary_icon_url));
78 ShortcutInfo info(start_url); 85 ShortcutInfo info(start_url);
79 info.scope = scope; 86 info.scope = scope;
80 info.name = ConvertJavaStringToUTF16(env, java_name); 87 info.name = ConvertJavaStringToUTF16(env, java_name);
81 info.short_name = ConvertJavaStringToUTF16(env, java_short_name); 88 info.short_name = ConvertJavaStringToUTF16(env, java_short_name);
82 info.user_title = info.short_name; 89 info.user_title = info.short_name;
(...skipping 17 matching lines...) Expand all
100 icon_url_to_murmur2_hash[info.icon_urls[i]] = icon_hashes[i]; 107 icon_url_to_murmur2_hash[info.icon_urls[i]] = icon_hashes[i];
101 108
102 gfx::JavaBitmap java_bitmap_lock(java_best_primary_icon_bitmap); 109 gfx::JavaBitmap java_bitmap_lock(java_best_primary_icon_bitmap);
103 SkBitmap best_primary_icon_bitmap = 110 SkBitmap best_primary_icon_bitmap =
104 gfx::CreateSkBitmapFromJavaBitmap(java_bitmap_lock); 111 gfx::CreateSkBitmapFromJavaBitmap(java_bitmap_lock);
105 best_primary_icon_bitmap.setImmutable(); 112 best_primary_icon_bitmap.setImmutable();
106 113
107 std::string webapk_package; 114 std::string webapk_package;
108 ConvertJavaStringToUTF8(env, java_webapk_package, &webapk_package); 115 ConvertJavaStringToUTF8(env, java_webapk_package, &webapk_package);
109 116
110 WebApkInstallService* install_service = WebApkInstallService::Get(profile); 117 WebApkInstaller::BuildProto(
111 if (install_service->IsInstallInProgress(info.manifest_url)) { 118 info, best_primary_icon_bitmap, SkBitmap(), webapk_package,
119 std::to_string(java_webapk_version), icon_url_to_murmur2_hash,
120 java_is_manifest_stale,
121 base::Bind(&OnBuiltProto, ScopedJavaGlobalRef<jobject>(java_callback)));
122 }
123
124 // static JNI method.
125 static void UpdateWebApk(JNIEnv* env,
126 const JavaParamRef<jclass>& clazz,
127 const JavaParamRef<jstring>& java_webapk_package,
128 const JavaParamRef<jstring>& java_start_url,
129 const JavaParamRef<jstring>& java_short_name,
130 const JavaParamRef<jbyteArray>& java_serialized_proto,
131 const JavaParamRef<jobject>& java_callback) {
132 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
133
134 ScopedJavaGlobalRef<jobject> callback_ref(java_callback);
135
136 Profile* profile = ProfileManager::GetLastUsedProfile();
137 if (profile == nullptr) {
112 base::ThreadTaskRunnerHandle::Get()->PostTask( 138 base::ThreadTaskRunnerHandle::Get()->PostTask(
113 FROM_HERE, 139 FROM_HERE,
114 base::Bind(&WebApkUpdateManager::OnBuiltWebApk, id, 140 base::Bind(&OnUpdated, callback_ref, WebApkInstallResult::FAILURE,
115 WebApkInstallResult::FAILURE, false /* relax_updates */, 141 false /* relax_updates */, "" /* webapk_package */));
116 "" /* webapk_package */));
117 return; 142 return;
118 } 143 }
119 install_service->UpdateAsync( 144
120 info, best_primary_icon_bitmap, webapk_package, java_webapk_version, 145 std::string webapk_package =
121 icon_url_to_murmur2_hash, java_is_manifest_stale, 146 ConvertJavaStringToUTF8(env, java_webapk_package);
122 base::Bind(&WebApkUpdateManager::OnBuiltWebApk, id)); 147 GURL start_url = GURL(ConvertJavaStringToUTF8(env, java_start_url));
148 base::string16 short_name = ConvertJavaStringToUTF16(env, java_short_name);
149 std::unique_ptr<std::vector<uint8_t>> serialized_proto(
150 new std::vector<uint8_t>);
dominickn 2017/06/14 00:14:23 base::MakeUnique
151 JavaByteArrayToByteVector(env, java_serialized_proto, serialized_proto.get());
152
153 WebApkInstallService::Get(profile)->UpdateAsync(
154 webapk_package, start_url, short_name, std::move(serialized_proto),
155 base::Bind(&OnUpdated, callback_ref));
123 } 156 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698