| Index: chrome/browser/chromeos/drive/drive_protocol_handler.cc | 
| diff --git a/chrome/browser/chromeos/drive/drive_protocol_handler.cc b/chrome/browser/chromeos/drive/drive_protocol_handler.cc | 
| index be7a67ff950f6f38022692f42f3a6b3154a2a363..936bdff6e6b58e34a88958a815784ef729233d96 100644 | 
| --- a/chrome/browser/chromeos/drive/drive_protocol_handler.cc | 
| +++ b/chrome/browser/chromeos/drive/drive_protocol_handler.cc | 
| @@ -17,6 +17,7 @@ | 
| #include "base/string_util.h" | 
| #include "base/threading/sequenced_worker_pool.h" | 
| #include "base/utf_string_conversions.h" | 
| +#include "chrome/browser/browser_process.h" | 
| #include "chrome/browser/chromeos/drive/drive.pb.h" | 
| #include "chrome/browser/chromeos/drive/drive_file_system_interface.h" | 
| #include "chrome/browser/chromeos/drive/drive_system_service.h" | 
| @@ -92,20 +93,24 @@ bool ParseDriveUrl(const std::string& path, std::string* resource_id) { | 
| } | 
|  | 
| // Helper function to get DriveSystemService from Profile. | 
| -DriveSystemService* GetSystemService() { | 
| -  return DriveSystemServiceFactory::GetForProfile( | 
| -      ProfileManager::GetDefaultProfile()); | 
| +DriveSystemService* GetSystemService(void* profile_id) { | 
| +  Profile* profile = reinterpret_cast<Profile*>(profile_id); | 
| +  if (!g_browser_process->profile_manager()->IsValidProfile(profile)) | 
| +    return NULL; | 
| + | 
| +  return DriveSystemServiceFactory::GetForProfile(profile); | 
| } | 
|  | 
| // Helper function to get DriveFileSystem from Profile on UI thread. | 
| -DriveFileSystemInterface* GetFileSystemOnUIThread() { | 
| -  DriveSystemService* system_service = GetSystemService(); | 
| +DriveFileSystemInterface* GetFileSystemOnUIThread(void* profile_id) { | 
| +  DriveSystemService* system_service = GetSystemService(profile_id); | 
| return system_service ? system_service->file_system() : NULL; | 
| } | 
|  | 
| // Helper function to cancel Drive download operation on UI thread. | 
| -void CancelDriveDownloadOnUIThread(const FilePath& drive_file_path) { | 
| -  DriveSystemService* system_service = GetSystemService(); | 
| +void CancelDriveDownloadOnUIThread( | 
| +    void* profile_id, const FilePath& drive_file_path) { | 
| +  DriveSystemService* system_service = GetSystemService(profile_id); | 
| if (system_service) | 
| system_service->drive_service()->CancelForFilePath(drive_file_path); | 
| } | 
| @@ -115,7 +120,8 @@ void CancelDriveDownloadOnUIThread(const FilePath& drive_file_path) { | 
| // formatted as drive://<resource-id>. | 
| class DriveURLRequestJob : public net::URLRequestJob { | 
| public: | 
| -  DriveURLRequestJob(net::URLRequest* request, | 
| +  DriveURLRequestJob(void* profile_id, | 
| +                     net::URLRequest* request, | 
| net::NetworkDelegate* network_delegate); | 
|  | 
| // net::URLRequestJob overrides: | 
| @@ -188,6 +194,9 @@ class DriveURLRequestJob : public net::URLRequestJob { | 
| // Helper method to close |stream_|. | 
| void CloseFileStream(); | 
|  | 
| +  // The profile for processing Drive accesses. Should not be NULL and needs to | 
| +  // be checked with ProfileManager::IsValidProfile before using it. | 
| +  void* profile_id_; | 
| DriveFileSystemInterface* file_system_; | 
|  | 
| bool error_;  // True if we've encountered an error. | 
| @@ -211,9 +220,11 @@ class DriveURLRequestJob : public net::URLRequestJob { | 
| DISALLOW_COPY_AND_ASSIGN(DriveURLRequestJob); | 
| }; | 
|  | 
| -DriveURLRequestJob::DriveURLRequestJob(net::URLRequest* request, | 
| +DriveURLRequestJob::DriveURLRequestJob(void* profile_id, | 
| +                                       net::URLRequest* request, | 
| net::NetworkDelegate* network_delegate) | 
| : net::URLRequestJob(request, network_delegate), | 
| +      profile_id_(profile_id), | 
| file_system_(NULL), | 
| error_(false), | 
| headers_set_(false), | 
| @@ -292,7 +303,7 @@ void DriveURLRequestJob::Start() { | 
| BrowserThread::PostTaskAndReplyWithResult( | 
| BrowserThread::UI, | 
| FROM_HERE, | 
| -      base::Bind(&GetFileSystemOnUIThread), | 
| +      base::Bind(&GetFileSystemOnUIThread, profile_id_), | 
| base::Bind(&DriveURLRequestJob::StartAsync, | 
| weak_ptr_factory_.GetWeakPtr())); | 
| } | 
| @@ -321,6 +332,7 @@ void DriveURLRequestJob::Kill() { | 
| BrowserThread::UI, | 
| FROM_HERE, | 
| base::Bind(&CancelDriveDownloadOnUIThread, | 
| +                   profile_id_, | 
| drive_file_path_)); | 
| } | 
|  | 
| @@ -909,7 +921,8 @@ void DriveURLRequestJob::HeadersCompleted(int status_code, | 
| /////////////////////////////////////////////////////////////////////////////// | 
| // DriveProtocolHandler class | 
|  | 
| -DriveProtocolHandler::DriveProtocolHandler() { | 
| +DriveProtocolHandler::DriveProtocolHandler(void* profile_id) | 
| +  : profile_id_(profile_id) { | 
| } | 
|  | 
| DriveProtocolHandler::~DriveProtocolHandler() { | 
| @@ -918,7 +931,7 @@ DriveProtocolHandler::~DriveProtocolHandler() { | 
| net::URLRequestJob* DriveProtocolHandler::MaybeCreateJob( | 
| net::URLRequest* request, net::NetworkDelegate* network_delegate) const { | 
| DVLOG(1) << "Handling url: " << request->url().spec(); | 
| -  return new DriveURLRequestJob(request, network_delegate); | 
| +  return new DriveURLRequestJob(profile_id_, request, network_delegate); | 
| } | 
|  | 
| }  // namespace drive | 
|  |