private_api_misc.cc revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// found in the LICENSE file. 4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/chromeos/extensions/file_manager/private_api_misc.h" 6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/files/file_path.h" 8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/prefs/pref_service.h" 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/values.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/browser_process.h" 11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/chromeos/drive/drive_integration_service.h" 12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/chromeos/drive/logging.h" 13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/chromeos/extensions/file_manager/private_api_util.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/file_manager/file_manager_installer.h" 15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/google_apis/auth_service.h" 17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/lifetime/application_lifetime.h" 18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service.h" 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/extensions/api/file_browser_private.h" 22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/common/pref_names.h" 23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "content/public/common/page_zoom.h" 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "google_apis/gaia/oauth2_token_service.h" 26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "url/gurl.h" 27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace extensions { 29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace { 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char kCWSScope[] = "https://www.googleapis.com/auth/chromewebstore"; 32a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 33a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)bool FileBrowserPrivateLogoutUserFunction::RunImpl() { 35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome::AttemptUserExit(); 36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return true; 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)bool FileBrowserPrivateGetPreferencesFunction::RunImpl() { 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) api::file_browser_private::GetPreferences::Results::Result result; 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const PrefService* const service = profile_->GetPrefs(); 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) result.drive_enabled = drive::util::IsDriveEnabledForProfile(profile_); 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) result.cellular_disabled = 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->GetBoolean(prefs::kDisableDriveOverCellular); 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) result.hosted_files_disabled = 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->GetBoolean(prefs::kDisableDriveHostedFiles); 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) result.use24hour_clock = service->GetBoolean(prefs::kUse24HourClock); 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) result.allow_redeem_offers = true; 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!chromeos::CrosSettings::Get()->GetBoolean( 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chromeos::kAllowRedeemChromeOsRegistrationOffers, 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &result.allow_redeem_offers)) { 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) result.allow_redeem_offers = true; 54a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetResult(result.ToValue().release()); 57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) drive::util::Log(logging::LOG_INFO, "%s succeeded.", name().c_str()); 59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return true; 60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)bool FileBrowserPrivateSetPreferencesFunction::RunImpl() { 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) using extensions::api::file_browser_private::SetPreferences::Params; 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const scoped_ptr<Params> params(Params::Create(*args_)); 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params); 66a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PrefService* const service = profile_->GetPrefs(); 68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (params->change_info.cellular_disabled) 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->SetBoolean(prefs::kDisableDriveOverCellular, 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *params->change_info.cellular_disabled); 72a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (params->change_info.hosted_files_disabled) 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->SetBoolean(prefs::kDisableDriveHostedFiles, 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *params->change_info.hosted_files_disabled); 76a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 77a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) drive::util::Log(logging::LOG_INFO, "%s succeeded.", name().c_str()); 78a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return true; 79a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 80a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 81424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)FileBrowserPrivateZipSelectionFunction:: 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FileBrowserPrivateZipSelectionFunction() {} 83a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 84424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)FileBrowserPrivateZipSelectionFunction:: 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ~FileBrowserPrivateZipSelectionFunction() {} 86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 87424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)bool FileBrowserPrivateZipSelectionFunction::RunImpl() { 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) using extensions::api::file_browser_private::ZipSelection::Params; 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const scoped_ptr<Params> params(Params::Create(*args_)); 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params); 91a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 92a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // First param is the source directory URL. 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (params->dir_url.empty()) 94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 95a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 96424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::FilePath src_dir = file_manager::util::GetLocalPathFromURL( 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) render_view_host(), profile(), GURL(params->dir_url)); 98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (src_dir.empty()) 99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Second param is the list of selected file URLs. 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (params->selection_urls.empty()) 103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 104a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 105a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::vector<base::FilePath> files; 10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (size_t i = 0; i < params->selection_urls.size(); ++i) { 107424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::FilePath path = file_manager::util::GetLocalPathFromURL( 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) render_view_host(), profile(), GURL(params->selection_urls[i])); 109a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (path.empty()) 110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 111a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) files.push_back(path); 112a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 113a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Third param is the name of the output zip file. 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (params->dest_name.empty()) 116a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 117a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 118a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Check if the dir path is under Drive mount point. 119a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // TODO(hshi): support create zip file on Drive (crbug.com/158690). 120a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (drive::util::IsUnderDriveMountPoint(src_dir)) 121a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 122a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::FilePath dest_file = src_dir.Append(params->dest_name); 124a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::vector<base::FilePath> src_relative_paths; 125a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) for (size_t i = 0; i != files.size(); ++i) { 126a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const base::FilePath& file_path = files[i]; 127a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 128a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Obtain the relative path of |file_path| under |src_dir|. 129a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::FilePath relative_path; 130a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!src_dir.AppendRelativePath(file_path, &relative_path)) 131a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 132a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) src_relative_paths.push_back(relative_path); 133a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 134a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 135424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) zip_file_creator_ = new file_manager::ZipFileCreator(this, 136424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) src_dir, 137424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) src_relative_paths, 138424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) dest_file); 139a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 140a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Keep the refcount until the zipping is complete on utility process. 141a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) AddRef(); 142a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 143a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) zip_file_creator_->Start(); 144a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return true; 145a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 146a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 147424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void FileBrowserPrivateZipSelectionFunction::OnZipDone(bool success) { 148a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) SetResult(new base::FundamentalValue(success)); 149a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) SendResponse(true); 150a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Release(); 151a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 152a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool FileBrowserPrivateZoomFunction::RunImpl() { 15458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) using extensions::api::file_browser_private::Zoom::Params; 15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const scoped_ptr<Params> params(Params::Create(*args_)); 15658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params); 15758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 15858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::RenderViewHost* const view_host = render_view_host(); 15958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::PageZoom zoom_type; 16058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switch (params->operation) { 16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) case Params::OPERATION_IN: 16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) zoom_type = content::PAGE_ZOOM_IN; 16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) break; 16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) case Params::OPERATION_OUT: 16558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) zoom_type = content::PAGE_ZOOM_OUT; 16658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) break; 16758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) case Params::OPERATION_RESET: 16858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) zoom_type = content::PAGE_ZOOM_RESET; 16958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) break; 17058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) default: 17158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NOTREACHED(); 17258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 17358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 17458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) view_host->Zoom(zoom_type); 17558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 176a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 177a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 17858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool FileBrowserPrivateInstallWebstoreItemFunction::RunImpl() { 17958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) using extensions::api::file_browser_private::InstallWebstoreItem::Params; 18058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const scoped_ptr<Params> params(Params::Create(*args_)); 18158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params); 18258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 18358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (params->item_id.empty()) 18458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 18558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 18658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const extensions::WebstoreStandaloneInstaller::Callback callback = 18758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind( 18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &FileBrowserPrivateInstallWebstoreItemFunction::OnInstallComplete, 18958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) this); 19058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 19158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_refptr<file_manager::FileManagerInstaller> installer( 19258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) new file_manager::FileManagerInstaller( 19358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetAssociatedWebContents(), // web_contents(), 19458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params->item_id, 19558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) profile(), 19658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) callback)); 19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // installer will be AddRef()'d in BeginInstall(). 19858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) installer->BeginInstall(); 19958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 200a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 201a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 20258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void FileBrowserPrivateInstallWebstoreItemFunction::OnInstallComplete( 20358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool success, 20458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::string& error) { 20558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (success) { 20658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) drive::util::Log(logging::LOG_INFO, 20758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "App install succeeded. (item id: %s)", 20858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) webstore_item_id_.c_str()); 209a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } else { 21058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) drive::util::Log(logging::LOG_ERROR, 21158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "App install failed. (item id: %s, reason: %s)", 21258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) webstore_item_id_.c_str(), 21358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) error.c_str()); 21458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) error_ = error; 21558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 21658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 21758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SendResponse(success); 21858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 21958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 22058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)FileBrowserPrivateRequestWebStoreAccessTokenFunction:: 22158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FileBrowserPrivateRequestWebStoreAccessTokenFunction() { 22258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 22358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 22458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)FileBrowserPrivateRequestWebStoreAccessTokenFunction:: 22558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ~FileBrowserPrivateRequestWebStoreAccessTokenFunction() { 22658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 22758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 22858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool FileBrowserPrivateRequestWebStoreAccessTokenFunction::RunImpl() { 22958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::vector<std::string> scopes; 23058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scopes.push_back(kCWSScope); 23158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 23268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ProfileOAuth2TokenService* oauth_service = 23358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetForProfile(profile()); 23458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) net::URLRequestContextGetter* url_request_context_getter = 23558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) g_browser_process->system_request_context(); 23658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 23758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!oauth_service) { 23858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) drive::util::Log(logging::LOG_ERROR, 23958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "CWS OAuth token fetch failed. OAuth2TokenService can't " 24058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "be retrived."); 24158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetResult(base::Value::CreateNullValue()); 242a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 243a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 24458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 24558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) auth_service_.reset(new google_apis::AuthService( 24658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) oauth_service, 24768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) oauth_service->GetPrimaryAccountId(), 24858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) url_request_context_getter, 24958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scopes)); 25058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) auth_service_->StartAuthentication(base::Bind( 25158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &FileBrowserPrivateRequestWebStoreAccessTokenFunction:: 25258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) OnAccessTokenFetched, 25358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) this)); 25458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 255a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return true; 256a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 257a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 25858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void FileBrowserPrivateRequestWebStoreAccessTokenFunction::OnAccessTokenFetched( 25958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) google_apis::GDataErrorCode code, 26058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::string& access_token) { 26158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (code == google_apis::HTTP_SUCCESS) { 26258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(auth_service_->HasAccessToken()); 26358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(access_token == auth_service_->access_token()); 26458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) drive::util::Log(logging::LOG_INFO, 26558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "CWS OAuth token fetch succeeded. (token: %s)", 26658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) access_token.c_str()); 26758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetResult(new base::StringValue(access_token)); 26858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SendResponse(true); 26958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } else { 27058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) drive::util::Log(logging::LOG_ERROR, 27158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "CWS OAuth token fetch failed. (GDataErrorCode: %s)", 27258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) google_apis::GDataErrorCodeToString(code).c_str()); 27358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetResult(base::Value::CreateNullValue()); 27458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SendResponse(false); 27558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 27658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 27758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 278424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} // namespace extensions 279