Index: chrome/browser/android/webapk/webapk_installer.cc |
diff --git a/chrome/browser/android/webapk/webapk_installer.cc b/chrome/browser/android/webapk/webapk_installer.cc |
index e01f9822b29355ced06abc2bdbfecb0e2ed4287e..b38f494c94cba71ace674e2bcf12389fc7c9c6bf 100644 |
--- a/chrome/browser/android/webapk/webapk_installer.cc |
+++ b/chrome/browser/android/webapk/webapk_installer.cc |
@@ -143,9 +143,20 @@ WebApkInstaller::WebApkInstaller(const ShortcutInfo& shortcut_info, |
GURL(command_line->HasSwitch(switches::kWebApkServerUrl) |
? command_line->GetSwitchValueASCII(switches::kWebApkServerUrl) |
: kDefaultWebApkServerUrl); |
+ CreateJavaRef(); |
} |
-WebApkInstaller::~WebApkInstaller() {} |
+void WebApkInstaller::CreateJavaRef() { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ java_ref_.Reset(Java_WebApkInstaller_create( |
+ env, reinterpret_cast<intptr_t>(this))); |
+} |
+ |
+WebApkInstaller::~WebApkInstaller() { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_WebApkInstaller_destroy(env, java_ref_); |
+ java_ref_.Reset(); |
+} |
void WebApkInstaller::InstallAsync(content::BrowserContext* browser_context, |
const FinishCallback& finish_callback) { |
@@ -172,11 +183,6 @@ void WebApkInstaller::InstallAsyncWithURLRequestContextGetter( |
DownloadAppIconAndComputeMurmur2Hash(); |
} |
-void WebApkInstaller::SetTimeoutMs(int timeout_ms) { |
- webapk_download_url_timeout_ms_ = timeout_ms; |
- download_timeout_ms_ = timeout_ms; |
-} |
- |
void WebApkInstaller::UpdateAsync(content::BrowserContext* browser_context, |
const FinishCallback& finish_callback, |
const std::string& icon_murmur2_hash, |
@@ -208,20 +214,40 @@ void WebApkInstaller::UpdateAsyncWithURLRequestContextGetter( |
weak_ptr_factory_.GetWeakPtr())); |
} |
+void WebApkInstaller::SetTimeoutMs(int timeout_ms) { |
+ webapk_download_url_timeout_ms_ = timeout_ms; |
+ download_timeout_ms_ = timeout_ms; |
+} |
+ |
+void WebApkInstaller::OnInstallFinished( |
+ JNIEnv* env, |
+ const base::android::JavaParamRef<jobject>& obj, |
+ jboolean success) { |
+ if (success) |
+ OnSuccess(); |
+ else |
+ OnFailure(); |
+} |
+ |
+// static |
+bool WebApkInstaller::Register(JNIEnv* env) { |
+ return RegisterNativesImpl(env); |
+} |
+ |
bool WebApkInstaller::StartInstallingDownloadedWebApk( |
JNIEnv* env, |
const base::android::ScopedJavaLocalRef<jstring>& java_file_path, |
const base::android::ScopedJavaLocalRef<jstring>& java_package_name) { |
- return Java_WebApkInstaller_installAsyncFromNative(env, java_file_path, |
- java_package_name); |
+ return Java_WebApkInstaller_installAsyncFromNative( |
+ env, java_ref_, java_file_path, java_package_name); |
} |
bool WebApkInstaller::StartUpdateUsingDownloadedWebApk( |
JNIEnv* env, |
const base::android::ScopedJavaLocalRef<jstring>& java_file_path, |
const base::android::ScopedJavaLocalRef<jstring>& java_package_name) { |
- return Java_WebApkInstaller_updateAsyncFromNative(env, java_file_path, |
- java_package_name); |
+ return Java_WebApkInstaller_updateAsyncFromNative( |
+ env, java_ref_, java_file_path, java_package_name); |
} |
void WebApkInstaller::OnURLFetchComplete(const net::URLFetcher* source) { |
@@ -287,7 +313,7 @@ void WebApkInstaller::OnGotIconMurmur2Hash( |
base::Bind(&BuildWebApkProtoInBackground, shortcut_info_, |
shortcut_icon_, shortcut_icon_murmur2_hash_), |
base::Bind(&WebApkInstaller::SendCreateWebApkRequest, |
- weak_ptr_factory_.GetWeakPtr())); |
+ weak_ptr_factory_.GetWeakPtr())); |
} |
void WebApkInstaller::SendCreateWebApkRequest( |
@@ -325,6 +351,7 @@ void WebApkInstaller::OnGotWebApkDownloadUrl(const GURL& download_url, |
const std::string& package_name) { |
base::FilePath output_dir; |
base::android::GetCacheDirectory(&output_dir); |
+ webapk_package_ = package_name; |
// TODO(pkotwicz): Download WebAPKs into WebAPK-specific subdirectory |
// directory. |
// TODO(pkotwicz): Figure out when downloaded WebAPK should be deleted. |
@@ -333,15 +360,14 @@ void WebApkInstaller::OnGotWebApkDownloadUrl(const GURL& download_url, |
FROM_HERE, base::TimeDelta::FromMilliseconds(download_timeout_ms_), |
base::Bind(&WebApkInstaller::OnTimeout, weak_ptr_factory_.GetWeakPtr())); |
- base::FilePath output_path = output_dir.AppendASCII(package_name); |
+ base::FilePath output_path = output_dir.AppendASCII(webapk_package_); |
downloader_.reset(new FileDownloader( |
download_url, output_path, true, request_context_getter_, |
base::Bind(&WebApkInstaller::OnWebApkDownloaded, |
- weak_ptr_factory_.GetWeakPtr(), output_path, package_name))); |
+ weak_ptr_factory_.GetWeakPtr(), output_path))); |
} |
void WebApkInstaller::OnWebApkDownloaded(const base::FilePath& file_path, |
- const std::string& package_name, |
FileDownloader::Result result) { |
timer_.Stop(); |
@@ -358,12 +384,11 @@ void WebApkInstaller::OnWebApkDownloaded(const base::FilePath& file_path, |
GetBackgroundTaskRunner().get(), FROM_HERE, |
base::Bind(&base::SetPosixFilePermissions, file_path, posix_permissions), |
base::Bind(&WebApkInstaller::OnWebApkMadeWorldReadable, |
- weak_ptr_factory_.GetWeakPtr(), file_path, package_name)); |
+ weak_ptr_factory_.GetWeakPtr(), file_path)); |
} |
void WebApkInstaller::OnWebApkMadeWorldReadable( |
const base::FilePath& file_path, |
- const std::string& package_name, |
bool change_permission_success) { |
if (!change_permission_success) { |
OnFailure(); |
@@ -374,7 +399,7 @@ void WebApkInstaller::OnWebApkMadeWorldReadable( |
base::android::ScopedJavaLocalRef<jstring> java_file_path = |
base::android::ConvertUTF8ToJavaString(env, file_path.value()); |
base::android::ScopedJavaLocalRef<jstring> java_package_name = |
- base::android::ConvertUTF8ToJavaString(env, package_name); |
+ base::android::ConvertUTF8ToJavaString(env, webapk_package_); |
bool success = false; |
if (task_type_ == INSTALL) { |
success = StartInstallingDownloadedWebApk(env, java_file_path, |
@@ -383,9 +408,7 @@ void WebApkInstaller::OnWebApkMadeWorldReadable( |
success = StartUpdateUsingDownloadedWebApk(env, java_file_path, |
java_package_name); |
} |
- if (success) |
- OnSuccess(); |
- else |
+ if (!success) |
OnFailure(); |
} |
@@ -396,11 +419,11 @@ void WebApkInstaller::OnTimeout() { |
void WebApkInstaller::OnSuccess() { |
FinishCallback callback = finish_callback_; |
delete this; |
- callback.Run(true); |
+ callback.Run(true, webapk_package_); |
} |
void WebApkInstaller::OnFailure() { |
FinishCallback callback = finish_callback_; |
delete this; |
- callback.Run(false); |
+ callback.Run(false, ""); |
} |