| 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 7005f45cdbcfa5d8864fddadd1572e5c673bb1e7..8e1d019b29c8d1f68497feb0949c3be59f33b10d 100644
|
| --- a/chrome/browser/android/webapk/webapk_installer.cc
|
| +++ b/chrome/browser/android/webapk/webapk_installer.cc
|
| @@ -10,8 +10,6 @@
|
| #include "base/android/path_utils.h"
|
| #include "base/bind.h"
|
| #include "base/command_line.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/files/file_util.h"
|
| #include "base/memory/ref_counted.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/string_util.h"
|
| @@ -54,15 +52,6 @@ const char kProtoMimeType[] = "application/x-protobuf";
|
| // the WebAPK server.
|
| const int kWebApkDownloadUrlTimeoutMs = 60000;
|
|
|
| -// The default number of milliseconds to wait for the WebAPK download to
|
| -// complete.
|
| -const int kDownloadTimeoutMs = 60000;
|
| -
|
| -const int kWorldReadableFilePermission = base::FILE_PERMISSION_READ_BY_USER |
|
| - base::FILE_PERMISSION_READ_BY_GROUP |
|
| - base::FILE_PERMISSION_READ_BY_OTHERS;
|
| -const int kDefaultWebApkVersion = 1;
|
| -
|
| // Returns the WebAPK server URL based on the command line.
|
| GURL GetServerUrl() {
|
| base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
| @@ -177,38 +166,6 @@ scoped_refptr<base::TaskRunner> GetBackgroundTaskRunner() {
|
| base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
|
| }
|
|
|
| -// Creates a directory depending on the type of the task, and set permissions.
|
| -// It also creates any parent directory along the path if doesn't exist,
|
| -// and sets permissions as well.
|
| -// The previously downloaded APKs are deleted in order to clean up unused cached
|
| -// data.
|
| -base::FilePath CreateSubDirAndSetPermissionsInBackground(
|
| - const base::StringPiece& output_dir_name,
|
| - const std::string& package_name) {
|
| - base::FilePath output_root_dir;
|
| - base::android::GetCacheDirectory(&output_root_dir);
|
| - base::FilePath webapk_dir = output_root_dir.AppendASCII("webapks");
|
| - // Creating different downloaded directory for install/update cases is
|
| - // to prevent deleting the APK which is still in use when an install and an
|
| - // update happen at the same time. However, it doesn't help the cases of when
|
| - // mutiple installs (or multiple updates) happen at the same time.
|
| - base::FilePath output_dir = webapk_dir.AppendASCII(output_dir_name);
|
| - int posix_permissions = kWorldReadableFilePermission |
|
| - base::FILE_PERMISSION_WRITE_BY_USER |
|
| - base::FILE_PERMISSION_EXECUTE_BY_USER |
|
| - base::FILE_PERMISSION_EXECUTE_BY_OTHERS;
|
| - if (base::PathExists(output_dir))
|
| - base::DeleteFile(output_dir, true);
|
| -
|
| - // Creates the directory to download and sets permissions.
|
| - if (!base::CreateDirectory(output_dir) ||
|
| - !base::SetPosixFilePermissions(webapk_dir, posix_permissions) ||
|
| - !base::SetPosixFilePermissions(output_dir, posix_permissions))
|
| - return base::FilePath();
|
| -
|
| - return output_dir;
|
| -}
|
| -
|
| } // anonymous namespace
|
|
|
| WebApkInstaller::~WebApkInstaller() {
|
| @@ -267,8 +224,7 @@ void WebApkInstaller::UpdateAsyncForTesting(
|
| }
|
|
|
| void WebApkInstaller::SetTimeoutMs(int timeout_ms) {
|
| - webapk_download_url_timeout_ms_ = timeout_ms;
|
| - download_timeout_ms_ = timeout_ms;
|
| + webapk_server_timeout_ms_ = timeout_ms;
|
| }
|
|
|
| void WebApkInstaller::OnInstallFinished(
|
| @@ -294,30 +250,14 @@ bool WebApkInstaller::Register(JNIEnv* env) {
|
| return RegisterNativesImpl(env);
|
| }
|
|
|
| -void WebApkInstaller::InstallDownloadedWebApk(
|
| - JNIEnv* env,
|
| - const base::android::ScopedJavaLocalRef<jstring>& java_file_path,
|
| - const base::android::ScopedJavaLocalRef<jstring>& java_package_name) {
|
| - Java_WebApkInstaller_installDownloadedWebApkAsync(
|
| - env, java_ref_, java_file_path, java_package_name);
|
| -}
|
| -
|
| -void WebApkInstaller::UpdateUsingDownloadedWebApk(
|
| - JNIEnv* env,
|
| - const base::android::ScopedJavaLocalRef<jstring>& java_file_path) {
|
| - Java_WebApkInstaller_updateUsingDownloadedWebApkAsync(env, java_ref_,
|
| - java_file_path);
|
| -}
|
| -
|
| -bool WebApkInstaller::CanUseGooglePlayInstallService() {
|
| +bool WebApkInstaller::CanInstallWebApks() {
|
| return ChromeWebApkHost::GetGooglePlayInstallState() ==
|
| GooglePlayInstallState::SUPPORTED;
|
| }
|
|
|
| -void WebApkInstaller::InstallOrUpdateWebApkFromGooglePlay(
|
| - const std::string& package_name,
|
| - int version,
|
| - const std::string& token) {
|
| +void WebApkInstaller::InstallOrUpdateWebApk(const std::string& package_name,
|
| + int version,
|
| + const std::string& token) {
|
| webapk_package_ = package_name;
|
|
|
| JNIEnv* env = base::android::AttachCurrentThread();
|
| @@ -331,13 +271,12 @@ void WebApkInstaller::InstallOrUpdateWebApkFromGooglePlay(
|
| base::android::ConvertUTF8ToJavaString(env, shortcut_info_.url.spec());
|
|
|
| if (task_type_ == WebApkInstaller::INSTALL) {
|
| - Java_WebApkInstaller_installWebApkFromGooglePlayAsync(
|
| - env, java_ref_, java_webapk_package, version, java_title, java_token,
|
| - java_url);
|
| + Java_WebApkInstaller_installWebApkAsync(env, java_ref_, java_webapk_package,
|
| + version, java_title, java_token,
|
| + java_url);
|
| } else {
|
| - Java_WebApkInstaller_updateAsyncFromGooglePlay(
|
| - env, java_ref_, java_webapk_package, version, java_title, java_token,
|
| - java_url);
|
| + Java_WebApkInstaller_updateAsync(env, java_ref_, java_webapk_package,
|
| + version, java_title, java_token, java_url);
|
| }
|
| }
|
|
|
| @@ -366,10 +305,8 @@ WebApkInstaller::WebApkInstaller(content::BrowserContext* browser_context,
|
| shortcut_info_(shortcut_info),
|
| shortcut_icon_(shortcut_icon),
|
| server_url_(GetServerUrl()),
|
| - webapk_download_url_timeout_ms_(kWebApkDownloadUrlTimeoutMs),
|
| - download_timeout_ms_(kDownloadTimeoutMs),
|
| + webapk_server_timeout_ms_(kWebApkDownloadUrlTimeoutMs),
|
| relax_updates_(false),
|
| - webapk_version_(kDefaultWebApkVersion),
|
| task_type_(UNDEFINED),
|
| weak_ptr_factory_(this) {
|
| CreateJavaRef();
|
| @@ -408,7 +345,6 @@ void WebApkInstaller::UpdateAsync(
|
| bool is_manifest_stale,
|
| const FinishCallback& finish_callback) {
|
| webapk_package_ = webapk_package;
|
| - webapk_version_ = webapk_version;
|
| finish_callback_ = finish_callback;
|
| task_type_ = UPDATE;
|
|
|
| @@ -417,7 +353,7 @@ void WebApkInstaller::UpdateAsync(
|
| base::Bind(&BuildWebApkProtoInBackground, shortcut_info_, shortcut_icon_,
|
| icon_url_to_murmur2_hash, is_manifest_stale),
|
| base::Bind(&WebApkInstaller::SendUpdateWebApkRequest,
|
| - weak_ptr_factory_.GetWeakPtr()));
|
| + weak_ptr_factory_.GetWeakPtr(), webapk_version));
|
| }
|
|
|
| void WebApkInstaller::OnURLFetchComplete(const net::URLFetcher* source) {
|
| @@ -456,15 +392,14 @@ void WebApkInstaller::OnURLFetchComplete(const net::URLFetcher* source) {
|
| return;
|
| }
|
|
|
| - if (CanUseGooglePlayInstallService()) {
|
| - int version = 1;
|
| - base::StringToInt(response->version(), &version);
|
| - InstallOrUpdateWebApkFromGooglePlay(response->package_name(), version,
|
| - response->token());
|
| + if (!CanInstallWebApks()) {
|
| + OnResult(WebApkInstallResult::FAILURE);
|
| return;
|
| }
|
|
|
| - OnGotWebApkDownloadUrl(signed_download_url, response->package_name());
|
| + int version = 1;
|
| + base::StringToInt(response->version(), &version);
|
| + InstallOrUpdateWebApk(response->package_name(), version, response->token());
|
| }
|
|
|
| void WebApkInstaller::OnGotIconMurmur2Hash(
|
| @@ -497,9 +432,10 @@ void WebApkInstaller::SendCreateWebApkRequest(
|
| }
|
|
|
| void WebApkInstaller::SendUpdateWebApkRequest(
|
| + int webapk_version,
|
| std::unique_ptr<webapk::WebApk> webapk) {
|
| webapk->set_package_name(webapk_package_);
|
| - webapk->set_version(std::to_string(webapk_version_));
|
| + webapk->set_version(std::to_string(webapk_version));
|
|
|
| SendRequest(std::move(webapk), server_url_);
|
| }
|
| @@ -507,8 +443,7 @@ void WebApkInstaller::SendUpdateWebApkRequest(
|
| void WebApkInstaller::SendRequest(std::unique_ptr<webapk::WebApk> request_proto,
|
| const GURL& server_url) {
|
| timer_.Start(
|
| - FROM_HERE,
|
| - base::TimeDelta::FromMilliseconds(webapk_download_url_timeout_ms_),
|
| + FROM_HERE, base::TimeDelta::FromMilliseconds(webapk_server_timeout_ms_),
|
| base::Bind(&WebApkInstaller::OnResult, weak_ptr_factory_.GetWeakPtr(),
|
| WebApkInstallResult::FAILURE));
|
|
|
| @@ -523,95 +458,3 @@ void WebApkInstaller::SendRequest(std::unique_ptr<webapk::WebApk> request_proto,
|
| net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DO_NOT_SEND_AUTH_DATA);
|
| url_fetcher_->Start();
|
| }
|
| -
|
| -void WebApkInstaller::OnGotWebApkDownloadUrl(const GURL& download_url,
|
| - const std::string& package_name) {
|
| - webapk_package_ = package_name;
|
| -
|
| - base::PostTaskAndReplyWithResult(
|
| - GetBackgroundTaskRunner().get(), FROM_HERE,
|
| - base::Bind(&CreateSubDirAndSetPermissionsInBackground,
|
| - task_type_ == WebApkInstaller::INSTALL ? "install" : "update",
|
| - package_name),
|
| - base::Bind(&WebApkInstaller::OnCreatedSubDirAndSetPermissions,
|
| - weak_ptr_factory_.GetWeakPtr(), download_url));
|
| -}
|
| -
|
| -void WebApkInstaller::OnCreatedSubDirAndSetPermissions(
|
| - const GURL& download_url,
|
| - const base::FilePath& output_dir) {
|
| - if (output_dir.empty()) {
|
| - OnResult(WebApkInstallResult::FAILURE);
|
| - return;
|
| - }
|
| -
|
| - DownloadWebApk(output_dir.AppendASCII(webapk_package_ + ".apk"), download_url,
|
| - true);
|
| -}
|
| -
|
| -void WebApkInstaller::DownloadWebApk(const base::FilePath& output_path,
|
| - const GURL& download_url,
|
| - bool retry_if_fails) {
|
| - timer_.Start(
|
| - FROM_HERE, base::TimeDelta::FromMilliseconds(download_timeout_ms_),
|
| - base::Bind(&WebApkInstaller::OnResult, weak_ptr_factory_.GetWeakPtr(),
|
| - WebApkInstallResult::FAILURE));
|
| -
|
| - downloader_.reset(new FileDownloader(
|
| - download_url, output_path, true, request_context_getter_,
|
| - base::Bind(&WebApkInstaller::OnWebApkDownloaded,
|
| - weak_ptr_factory_.GetWeakPtr(), output_path, download_url,
|
| - retry_if_fails),
|
| - NO_TRAFFIC_ANNOTATION_YET));
|
| -}
|
| -
|
| -void WebApkInstaller::OnWebApkDownloaded(const base::FilePath& file_path,
|
| - const GURL& download_url,
|
| - bool retry_if_fails,
|
| - FileDownloader::Result result) {
|
| - timer_.Stop();
|
| -
|
| - if (result != FileDownloader::DOWNLOADED) {
|
| - if (!retry_if_fails) {
|
| - OnResult(WebApkInstallResult::FAILURE);
|
| - return;
|
| - }
|
| -
|
| - content::BrowserThread::PostDelayedTask(
|
| - content::BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&WebApkInstaller::DownloadWebApk,
|
| - weak_ptr_factory_.GetWeakPtr(), file_path, download_url,
|
| - false),
|
| - base::TimeDelta::FromSeconds(2));
|
| - return;
|
| - }
|
| -
|
| - int posix_permissions = kWorldReadableFilePermission |
|
| - base::FILE_PERMISSION_WRITE_BY_USER |
|
| - base::FILE_PERMISSION_EXECUTE_BY_USER;
|
| - base::PostTaskAndReplyWithResult(
|
| - GetBackgroundTaskRunner().get(), FROM_HERE,
|
| - base::Bind(&base::SetPosixFilePermissions, file_path, posix_permissions),
|
| - base::Bind(&WebApkInstaller::OnWebApkMadeWorldReadable,
|
| - weak_ptr_factory_.GetWeakPtr(), file_path));
|
| -}
|
| -
|
| -void WebApkInstaller::OnWebApkMadeWorldReadable(
|
| - const base::FilePath& file_path,
|
| - bool change_permission_success) {
|
| - if (!change_permission_success) {
|
| - OnResult(WebApkInstallResult::FAILURE);
|
| - return;
|
| - }
|
| -
|
| - JNIEnv* env = base::android::AttachCurrentThread();
|
| - base::android::ScopedJavaLocalRef<jstring> java_file_path =
|
| - base::android::ConvertUTF8ToJavaString(env, file_path.value());
|
| - if (task_type_ == INSTALL) {
|
| - base::android::ScopedJavaLocalRef<jstring> java_package_name =
|
| - base::android::ConvertUTF8ToJavaString(env, webapk_package_);
|
| - InstallDownloadedWebApk(env, java_file_path, java_package_name);
|
| - } else if (task_type_ == UPDATE) {
|
| - UpdateUsingDownloadedWebApk(env, java_file_path);
|
| - }
|
| -}
|
|
|