Commit e009d5fc authored by qinmin's avatar qinmin Committed by Commit bot

Remove DownloadController java weak reference

All DownloadController java method can be static.
So there is no point to hold a java reference.

Review-Url: https://codereview.chromium.org/2902453003
Cr-Commit-Position: refs/heads/master@{#473722}
parent ab5c383a
...@@ -30,7 +30,6 @@ import org.chromium.ui.base.WindowAndroid.PermissionCallback; ...@@ -30,7 +30,6 @@ import org.chromium.ui.base.WindowAndroid.PermissionCallback;
*/ */
public class DownloadController { public class DownloadController {
private static final String LOGTAG = "DownloadController"; private static final String LOGTAG = "DownloadController";
private static final DownloadController sInstance = new DownloadController();
/** /**
* Class for notifying the application that download has completed. * Class for notifying the application that download has completed.
...@@ -64,15 +63,6 @@ public class DownloadController { ...@@ -64,15 +63,6 @@ public class DownloadController {
private static DownloadNotificationService sDownloadNotificationService; private static DownloadNotificationService sDownloadNotificationService;
@CalledByNative
public static DownloadController getInstance() {
return sInstance;
}
private DownloadController() {
nativeInit();
}
public static void setDownloadNotificationService(DownloadNotificationService service) { public static void setDownloadNotificationService(DownloadNotificationService service) {
sDownloadNotificationService = service; sDownloadNotificationService = service;
} }
...@@ -82,7 +72,7 @@ public class DownloadController { ...@@ -82,7 +72,7 @@ public class DownloadController {
* download. This can be either a POST download or a GET download with authentication. * download. This can be either a POST download or a GET download with authentication.
*/ */
@CalledByNative @CalledByNative
private void onDownloadCompleted(DownloadInfo downloadInfo) { private static void onDownloadCompleted(DownloadInfo downloadInfo) {
if (sDownloadNotificationService == null) return; if (sDownloadNotificationService == null) return;
sDownloadNotificationService.onDownloadCompleted(downloadInfo); sDownloadNotificationService.onDownloadCompleted(downloadInfo);
} }
...@@ -92,7 +82,7 @@ public class DownloadController { ...@@ -92,7 +82,7 @@ public class DownloadController {
* download. This can be either a POST download or a GET download with authentication. * download. This can be either a POST download or a GET download with authentication.
*/ */
@CalledByNative @CalledByNative
private void onDownloadInterrupted(DownloadInfo downloadInfo, boolean isAutoResumable) { private static void onDownloadInterrupted(DownloadInfo downloadInfo, boolean isAutoResumable) {
if (sDownloadNotificationService == null) return; if (sDownloadNotificationService == null) return;
sDownloadNotificationService.onDownloadInterrupted(downloadInfo, isAutoResumable); sDownloadNotificationService.onDownloadInterrupted(downloadInfo, isAutoResumable);
} }
...@@ -101,7 +91,7 @@ public class DownloadController { ...@@ -101,7 +91,7 @@ public class DownloadController {
* Called when a download was cancelled. * Called when a download was cancelled.
*/ */
@CalledByNative @CalledByNative
private void onDownloadCancelled(DownloadInfo downloadInfo) { private static void onDownloadCancelled(DownloadInfo downloadInfo) {
if (sDownloadNotificationService == null) return; if (sDownloadNotificationService == null) return;
sDownloadNotificationService.onDownloadCancelled(downloadInfo); sDownloadNotificationService.onDownloadCancelled(downloadInfo);
} }
...@@ -111,7 +101,7 @@ public class DownloadController { ...@@ -111,7 +101,7 @@ public class DownloadController {
* network stack use custom notification to display the progress of downloads. * network stack use custom notification to display the progress of downloads.
*/ */
@CalledByNative @CalledByNative
private void onDownloadUpdated(DownloadInfo downloadInfo) { private static void onDownloadUpdated(DownloadInfo downloadInfo) {
if (sDownloadNotificationService == null) return; if (sDownloadNotificationService == null) return;
sDownloadNotificationService.onDownloadUpdated(downloadInfo); sDownloadNotificationService.onDownloadUpdated(downloadInfo);
} }
...@@ -123,7 +113,7 @@ public class DownloadController { ...@@ -123,7 +113,7 @@ public class DownloadController {
* @return true if allowed, or false otherwise. * @return true if allowed, or false otherwise.
*/ */
@CalledByNative @CalledByNative
private boolean hasFileAccess() { private static boolean hasFileAccess() {
Activity activity = ApplicationStatus.getLastTrackedFocusedActivity(); Activity activity = ApplicationStatus.getLastTrackedFocusedActivity();
if (activity instanceof ChromeActivity) { if (activity instanceof ChromeActivity) {
return ((ChromeActivity) activity) return ((ChromeActivity) activity)
...@@ -134,7 +124,7 @@ public class DownloadController { ...@@ -134,7 +124,7 @@ public class DownloadController {
} }
@CalledByNative @CalledByNative
private void requestFileAccess(final long callbackId) { private static void requestFileAccess(final long callbackId) {
Activity activity = ApplicationStatus.getLastTrackedFocusedActivity(); Activity activity = ApplicationStatus.getLastTrackedFocusedActivity();
if (!(activity instanceof ChromeActivity)) { if (!(activity instanceof ChromeActivity)) {
nativeOnAcquirePermissionResult(callbackId, false, null); nativeOnAcquirePermissionResult(callbackId, false, null);
...@@ -228,7 +218,7 @@ public class DownloadController { ...@@ -228,7 +218,7 @@ public class DownloadController {
* Called when a download is started. * Called when a download is started.
*/ */
@CalledByNative @CalledByNative
private void onDownloadStarted() { private static void onDownloadStarted() {
DownloadUtils.showDownloadStartToast(ContextUtils.getApplicationContext()); DownloadUtils.showDownloadStartToast(ContextUtils.getApplicationContext());
} }
...@@ -256,7 +246,6 @@ public class DownloadController { ...@@ -256,7 +246,6 @@ public class DownloadController {
} }
// native methods // native methods
private native void nativeInit(); private static native void nativeOnAcquirePermissionResult(
private native void nativeOnAcquirePermissionResult(
long callbackId, boolean granted, String permissionToUpdate); long callbackId, boolean granted, String permissionToUpdate);
} }
...@@ -107,14 +107,9 @@ bool IsInterruptedDownloadAutoResumable(content::DownloadItem* download_item) { ...@@ -107,14 +107,9 @@ bool IsInterruptedDownloadAutoResumable(content::DownloadItem* download_item) {
} // namespace } // namespace
// JNI methods
static void Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
DownloadController::GetInstance()->Init(env, obj);
}
static void OnAcquirePermissionResult( static void OnAcquirePermissionResult(
JNIEnv* env, JNIEnv* env,
const JavaParamRef<jobject>& obj, const JavaParamRef<jclass>& clazz,
jlong callback_id, jlong callback_id,
jboolean granted, jboolean granted,
const JavaParamRef<jstring>& jpermission_to_update) { const JavaParamRef<jstring>& jpermission_to_update) {
...@@ -155,13 +150,6 @@ static void OnRequestFileAccessResult( ...@@ -155,13 +150,6 @@ static void OnRequestFileAccessResult(
cb.Run(granted); cb.Run(granted);
} }
struct DownloadController::JavaObject {
ScopedJavaLocalRef<jobject> Controller(JNIEnv* env) {
return GetRealObject(env, obj_);
}
jweak obj_;
};
// static // static
bool DownloadController::RegisterDownloadController(JNIEnv* env) { bool DownloadController::RegisterDownloadController(JNIEnv* env) {
return RegisterNativesImpl(env); return RegisterNativesImpl(env);
...@@ -194,24 +182,9 @@ DownloadController* DownloadController::GetInstance() { ...@@ -194,24 +182,9 @@ DownloadController* DownloadController::GetInstance() {
return base::Singleton<DownloadController>::get(); return base::Singleton<DownloadController>::get();
} }
DownloadController::DownloadController() DownloadController::DownloadController() = default;
: java_object_(NULL) {
}
DownloadController::~DownloadController() {
if (java_object_) {
JNIEnv* env = base::android::AttachCurrentThread();
env->DeleteWeakGlobalRef(java_object_->obj_);
delete java_object_;
base::android::CheckException(env);
}
}
// Initialize references to Java object. DownloadController::~DownloadController() = default;
void DownloadController::Init(JNIEnv* env, jobject obj) {
java_object_ = new JavaObject;
java_object_->obj_ = env->NewWeakGlobalRef(obj);
}
void DownloadController::AcquireFileAccessPermission( void DownloadController::AcquireFileAccessPermission(
const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter, const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter,
...@@ -230,8 +203,7 @@ void DownloadController::AcquireFileAccessPermission( ...@@ -230,8 +203,7 @@ void DownloadController::AcquireFileAccessPermission(
intptr_t callback_id = intptr_t callback_id =
reinterpret_cast<intptr_t>(new AcquirePermissionCallback(callback)); reinterpret_cast<intptr_t>(new AcquirePermissionCallback(callback));
JNIEnv* env = base::android::AttachCurrentThread(); JNIEnv* env = base::android::AttachCurrentThread();
Java_DownloadController_requestFileAccess( Java_DownloadController_requestFileAccess(env, callback_id);
env, GetJavaObject()->Controller(env), callback_id);
} }
void DownloadController::CreateAndroidDownload( void DownloadController::CreateAndroidDownload(
...@@ -287,9 +259,8 @@ void DownloadController::StartAndroidDownloadInternal( ...@@ -287,9 +259,8 @@ void DownloadController::StartAndroidDownloadInternal(
WebContents* web_contents = wc_getter.Run(); WebContents* web_contents = wc_getter.Run();
if (web_contents) { if (web_contents) {
TabAndroid* tab = TabAndroid::FromWebContents(web_contents); TabAndroid* tab = TabAndroid::FromWebContents(web_contents);
if (tab && !tab->GetJavaObject().is_null()) { if (tab && !tab->GetJavaObject().is_null())
Java_DownloadController_closeTabIfBlank(env, tab->GetJavaObject()); Java_DownloadController_closeTabIfBlank(env, tab->GetJavaObject());
}
} }
} }
...@@ -297,8 +268,7 @@ bool DownloadController::HasFileAccessPermission() { ...@@ -297,8 +268,7 @@ bool DownloadController::HasFileAccessPermission() {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
JNIEnv* env = base::android::AttachCurrentThread(); JNIEnv* env = base::android::AttachCurrentThread();
return Java_DownloadController_hasFileAccess( return Java_DownloadController_hasFileAccess(env);
env, GetJavaObject()->Controller(env));
} }
void DownloadController::OnDownloadStarted( void DownloadController::OnDownloadStarted(
...@@ -308,10 +278,8 @@ void DownloadController::OnDownloadStarted( ...@@ -308,10 +278,8 @@ void DownloadController::OnDownloadStarted(
// For dangerous item, we need to show the dangerous infobar before the // For dangerous item, we need to show the dangerous infobar before the
// download can start. // download can start.
JNIEnv* env = base::android::AttachCurrentThread(); JNIEnv* env = base::android::AttachCurrentThread();
if (!download_item->IsDangerous()) { if (!download_item->IsDangerous())
Java_DownloadController_onDownloadStarted( Java_DownloadController_onDownloadStarted(env);
env, GetJavaObject()->Controller(env));
}
WebContents* web_contents = download_item->GetWebContents(); WebContents* web_contents = download_item->GetWebContents();
if (web_contents) { if (web_contents) {
...@@ -341,8 +309,7 @@ void DownloadController::OnDownloadUpdated(DownloadItem* item) { ...@@ -341,8 +309,7 @@ void DownloadController::OnDownloadUpdated(DownloadItem* item) {
DownloadManagerService::CreateJavaDownloadInfo(env, item); DownloadManagerService::CreateJavaDownloadInfo(env, item);
switch (item->GetState()) { switch (item->GetState()) {
case DownloadItem::IN_PROGRESS: { case DownloadItem::IN_PROGRESS: {
Java_DownloadController_onDownloadUpdated( Java_DownloadController_onDownloadUpdated(env, j_item);
env, GetJavaObject()->Controller(env), j_item);
break; break;
} }
case DownloadItem::COMPLETE: case DownloadItem::COMPLETE:
...@@ -351,14 +318,12 @@ void DownloadController::OnDownloadUpdated(DownloadItem* item) { ...@@ -351,14 +318,12 @@ void DownloadController::OnDownloadUpdated(DownloadItem* item) {
item->RemoveObserver(this); item->RemoveObserver(this);
// Call onDownloadCompleted // Call onDownloadCompleted
Java_DownloadController_onDownloadCompleted( Java_DownloadController_onDownloadCompleted(env, j_item);
env, GetJavaObject()->Controller(env), j_item);
DownloadController::RecordDownloadCancelReason( DownloadController::RecordDownloadCancelReason(
DownloadController::CANCEL_REASON_NOT_CANCELED); DownloadController::CANCEL_REASON_NOT_CANCELED);
break; break;
case DownloadItem::CANCELLED: case DownloadItem::CANCELLED:
Java_DownloadController_onDownloadCancelled( Java_DownloadController_onDownloadCancelled(env, j_item);
env, GetJavaObject()->Controller(env), j_item);
DownloadController::RecordDownloadCancelReason( DownloadController::RecordDownloadCancelReason(
DownloadController::CANCEL_REASON_OTHER_NATIVE_RESONS); DownloadController::CANCEL_REASON_OTHER_NATIVE_RESONS);
break; break;
...@@ -366,8 +331,7 @@ void DownloadController::OnDownloadUpdated(DownloadItem* item) { ...@@ -366,8 +331,7 @@ void DownloadController::OnDownloadUpdated(DownloadItem* item) {
// When device loses/changes network, we get a NETWORK_TIMEOUT, // When device loses/changes network, we get a NETWORK_TIMEOUT,
// NETWORK_FAILED or NETWORK_DISCONNECTED error. Download should auto // NETWORK_FAILED or NETWORK_DISCONNECTED error. Download should auto
// resume in this case. // resume in this case.
Java_DownloadController_onDownloadInterrupted( Java_DownloadController_onDownloadInterrupted(env, j_item,
env, GetJavaObject()->Controller(env), j_item,
IsInterruptedDownloadAutoResumable(item)); IsInterruptedDownloadAutoResumable(item));
item->RemoveObserver(this); item->RemoveObserver(this);
break; break;
...@@ -387,20 +351,6 @@ void DownloadController::OnDangerousDownload(DownloadItem* item) { ...@@ -387,20 +351,6 @@ void DownloadController::OnDangerousDownload(DownloadItem* item) {
InfoBarService::FromWebContents(web_contents), item); InfoBarService::FromWebContents(web_contents), item);
} }
DownloadController::JavaObject*
DownloadController::GetJavaObject() {
if (!java_object_) {
// Initialize Java DownloadController by calling
// DownloadController.getInstance(), which will call Init()
// if Java DownloadController is not instantiated already.
JNIEnv* env = base::android::AttachCurrentThread();
Java_DownloadController_getInstance(env);
}
DCHECK(java_object_);
return java_object_;
}
void DownloadController::StartContextMenuDownload( void DownloadController::StartContextMenuDownload(
const ContextMenuParams& params, WebContents* web_contents, bool is_link, const ContextMenuParams& params, WebContents* web_contents, bool is_link,
const std::string& extra_headers) { const std::string& extra_headers) {
......
...@@ -33,9 +33,6 @@ class DownloadController : public DownloadControllerBase { ...@@ -33,9 +33,6 @@ class DownloadController : public DownloadControllerBase {
static bool RegisterDownloadController(JNIEnv* env); static bool RegisterDownloadController(JNIEnv* env);
// Called when DownloadController Java object is instantiated.
void Init(JNIEnv* env, jobject obj);
// DownloadControllerBase implementation. // DownloadControllerBase implementation.
void AcquireFileAccessPermission( void AcquireFileAccessPermission(
const content::ResourceRequestInfo::WebContentsGetter& wc_getter, const content::ResourceRequestInfo::WebContentsGetter& wc_getter,
...@@ -67,7 +64,6 @@ class DownloadController : public DownloadControllerBase { ...@@ -67,7 +64,6 @@ class DownloadController : public DownloadControllerBase {
AcquirePermissionCallback; AcquirePermissionCallback;
private: private:
struct JavaObject;
friend struct base::DefaultSingletonTraits<DownloadController>; friend struct base::DefaultSingletonTraits<DownloadController>;
DownloadController(); DownloadController();
~DownloadController() override; ~DownloadController() override;
...@@ -99,11 +95,6 @@ class DownloadController : public DownloadControllerBase { ...@@ -99,11 +95,6 @@ class DownloadController : public DownloadControllerBase {
const content::ResourceRequestInfo::WebContentsGetter& wc_getter, const content::ResourceRequestInfo::WebContentsGetter& wc_getter,
const DownloadInfo& info, bool allowed); const DownloadInfo& info, bool allowed);
// Creates Java object if it is not created already and returns it.
JavaObject* GetJavaObject();
JavaObject* java_object_;
std::string default_file_name_; std::string default_file_name_;
DISALLOW_COPY_AND_ASSIGN(DownloadController); DISALLOW_COPY_AND_ASSIGN(DownloadController);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment