Commit 789341a3 authored by Side Yilmaz's avatar Side Yilmaz Committed by Commit Bot

Use correct profile_key in DownloadController.

DownloadController defaults profile key to regular profile key in case
of the profile is not reachable over download item. This CL changes the
logic as below to prevent using regular profile key in incognito mode:
- If download item provides a profile, use its key.
- If not, get key from ProfileKeyStartupAccessor, as this means the code
block runs in reduced mode.
- If there is no key from ProfileKeyStartupAccessor, this means the
incognito tab is closed and download will be destroyed when incognito
goes away. In this case, just return.

Bug: 1041781, 1075562
Change-Id: Id53485735891d9089cbf1e7a1c8c6e43cabc84a5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2413947
Commit-Queue: Side YILMAZ <sideyilmaz@chromium.org>
Reviewed-by: default avatarMin Qin <qinmin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#809273}
parent 8ebfa3e7
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "base/notreached.h" #include "base/notreached.h"
#include "base/synchronization/lock.h" #include "base/synchronization/lock.h"
#include "chrome/android/chrome_jni_headers/DownloadController_jni.h" #include "chrome/android/chrome_jni_headers/DownloadController_jni.h"
#include "chrome/browser/android/profile_key_startup_accessor.h"
#include "chrome/browser/android/profile_key_util.h" #include "chrome/browser/android/profile_key_util.h"
#include "chrome/browser/android/tab_android.h" #include "chrome/browser/android/tab_android.h"
#include "chrome/browser/download/android/dangerous_download_infobar_delegate.h" #include "chrome/browser/download/android/dangerous_download_infobar_delegate.h"
...@@ -31,8 +32,6 @@ ...@@ -31,8 +32,6 @@
#include "chrome/browser/infobars/infobar_service.h" #include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/offline_pages/android/offline_page_bridge.h" #include "chrome/browser/offline_pages/android/offline_page_bridge.h"
#include "chrome/browser/permissions/permission_update_infobar_delegate_android.h" #include "chrome/browser/permissions/permission_update_infobar_delegate_android.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_key.h"
#include "chrome/browser/vr/vr_tab_helper.h" #include "chrome/browser/vr/vr_tab_helper.h"
#include "chrome/grit/chromium_strings.h" #include "chrome/grit/chromium_strings.h"
#include "components/download/public/common/auto_resumption_handler.h" #include "components/download/public/common/auto_resumption_handler.h"
...@@ -378,10 +377,9 @@ void DownloadController::OnDownloadStarted(DownloadItem* download_item) { ...@@ -378,10 +377,9 @@ void DownloadController::OnDownloadStarted(DownloadItem* download_item) {
if (download::AutoResumptionHandler::Get()) if (download::AutoResumptionHandler::Get())
download::AutoResumptionHandler::Get()->OnDownloadStarted(download_item); download::AutoResumptionHandler::Get()->OnDownloadStarted(download_item);
Profile* profile = Profile::FromBrowserContext( ProfileKey* profile_key = GetProfileKey(download_item);
content::DownloadItemUtils::GetBrowserContext(download_item)); if (!profile_key)
ProfileKey* profile_key = return;
profile ? profile->GetProfileKey() : ::android::GetLastUsedProfileKey();
DownloadOfflineContentProviderFactory::GetForKey(profile_key) DownloadOfflineContentProviderFactory::GetForKey(profile_key)
->OnDownloadStarted(download_item); ->OnDownloadStarted(download_item);
...@@ -506,3 +504,16 @@ bool DownloadController::IsInterruptedDownloadAutoResumable( ...@@ -506,3 +504,16 @@ bool DownloadController::IsInterruptedDownloadAutoResumable(
interrupt_reason == interrupt_reason ==
download::DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED; download::DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED;
} }
ProfileKey* DownloadController::GetProfileKey(DownloadItem* download_item) {
Profile* profile = Profile::FromBrowserContext(
content::DownloadItemUtils::GetBrowserContext(download_item));
ProfileKey* profile_key;
if (profile)
profile_key = profile->GetProfileKey();
else
profile_key = ProfileKeyStartupAccessor::GetInstance()->profile_key();
return profile_key;
}
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
#include "base/android/scoped_java_ref.h" #include "base/android/scoped_java_ref.h"
#include "base/memory/singleton.h" #include "base/memory/singleton.h"
#include "chrome/browser/download/android/download_controller_base.h" #include "chrome/browser/download/android/download_controller_base.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_key.h"
class DownloadController : public DownloadControllerBase { class DownloadController : public DownloadControllerBase {
public: public:
...@@ -92,6 +94,9 @@ class DownloadController : public DownloadControllerBase { ...@@ -92,6 +94,9 @@ class DownloadController : public DownloadControllerBase {
bool IsInterruptedDownloadAutoResumable( bool IsInterruptedDownloadAutoResumable(
download::DownloadItem* download_item); download::DownloadItem* download_item);
// Get profile key from download item.
ProfileKey* GetProfileKey(download::DownloadItem* download_item);
std::string default_file_name_; std::string default_file_name_;
using StrongValidatorsMap = using StrongValidatorsMap =
......
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