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) 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ash/frame/frame_util.h" 8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/files/file_path.h" 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/prefs/pref_service.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/strings/stringprintf.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/browser_process.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system_util.h" 14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/chromeos/extensions/file_manager/private_api_util.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/file_manager/app_installer.h" 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/chromeos/file_manager/zip_file_creator.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/profiles/profile_helper.h" 18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/devtools/devtools_window.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/drive/event_logger.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/extensions/devtools_util.h" 22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/lifetime/application_lifetime.h" 23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/profiles/profiles_state.h" 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/ash/multi_user/multi_user_util.h" 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h" 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/extensions/api/file_manager_private.h" 31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/common/pref_names.h" 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h" 33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h" 35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/web_contents.h" 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "content/public/common/page_zoom.h" 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/app_window/app_window.h" 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/app_window/app_window_registry.h" 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/auth_service.h" 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/webui/web_ui_util.h" 42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "url/gurl.h" 43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace extensions { 45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace { 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char kCWSScope[] = "https://www.googleapis.com/auth/chromewebstore"; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const char kGoogleCastApiExtensionId[] = "mafeflapfdfljijmlienjedomfjfmhpd"; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Obtains the current app window. 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAppWindow* GetCurrentAppWindow(ChromeSyncExtensionFunction* function) { 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AppWindowRegistry* const app_window_registry = 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AppWindowRegistry::Get(function->GetProfile()); 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::WebContents* const contents = function->GetAssociatedWebContents(); 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RenderViewHost* const render_view_host = 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) contents ? contents->GetRenderViewHost() : NULL; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return render_view_host ? app_window_registry->GetAppWindowForRenderViewHost( 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_view_host) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : NULL; 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::vector<linked_ptr<api::file_manager_private::ProfileInfo> > 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciGetLoggedInProfileInfoList() { 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK(user_manager::UserManager::IsInitialized()); 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<Profile*>& profiles = 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) g_browser_process->profile_manager()->GetLoadedProfiles(); 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<Profile*> original_profiles; 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<linked_ptr<api::file_manager_private::ProfileInfo> > 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) result_profiles; 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (size_t i = 0; i < profiles.size(); ++i) { 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Filter the profile. 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile* const profile = profiles[i]->GetOriginalProfile(); 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (original_profiles.count(profile)) 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) continue; 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) original_profiles.insert(profile); 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const user_manager::User* const user = 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::ProfileHelper::Get()->GetUserByProfile(profile); 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!user || !user->is_logged_in()) 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) continue; 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Make a ProfileInfo. 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci linked_ptr<api::file_manager_private::ProfileInfo> profile_info( 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new api::file_manager_private::ProfileInfo()); 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_info->profile_id = multi_user_util::GetUserIDFromProfile(profile); 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_info->display_name = UTF16ToUTF8(user->GetDisplayName()); 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(hirono): Remove the property from the profile_info. 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_info->is_current_profile = true; 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) result_profiles.push_back(profile_info); 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return result_profiles; 94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 96a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool FileManagerPrivateLogoutUserForReauthenticationFunction::RunSync() { 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) user_manager::User* user = 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::ProfileHelper::Get()->GetUserByProfile(GetProfile()); 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (user) { 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager::Get()->SaveUserOAuthStatus( 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) user->email(), user_manager::User::OAUTH2_TOKEN_STATUS_INVALID); 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 105a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome::AttemptUserExit(); 106a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return true; 107a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 108a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool FileManagerPrivateGetPreferencesFunction::RunSync() { 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci api::file_manager_private::Preferences result; 1111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const PrefService* const service = GetProfile()->GetPrefs(); 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) result.drive_enabled = drive::util::IsDriveEnabledForProfile(GetProfile()); 11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) result.cellular_disabled = 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->GetBoolean(prefs::kDisableDriveOverCellular); 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) result.hosted_files_disabled = 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->GetBoolean(prefs::kDisableDriveHostedFiles); 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) result.use24hour_clock = service->GetBoolean(prefs::kUse24HourClock); 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) result.allow_redeem_offers = true; 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!chromeos::CrosSettings::Get()->GetBoolean( 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chromeos::kAllowRedeemChromeOsRegistrationOffers, 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &result.allow_redeem_offers)) { 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) result.allow_redeem_offers = true; 124a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 125a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetResult(result.ToValue().release()); 127a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) drive::EventLogger* logger = file_manager::util::GetLogger(GetProfile()); 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (logger) 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) logger->Log(logging::LOG_INFO, "%s succeeded.", name().c_str()); 131a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return true; 132a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 133a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool FileManagerPrivateSetPreferencesFunction::RunSync() { 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci using extensions::api::file_manager_private::SetPreferences::Params; 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const scoped_ptr<Params> params(Params::Create(*args_)); 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params); 138a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PrefService* const service = GetProfile()->GetPrefs(); 140a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (params->change_info.cellular_disabled) 14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->SetBoolean(prefs::kDisableDriveOverCellular, 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *params->change_info.cellular_disabled); 144a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (params->change_info.hosted_files_disabled) 14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->SetBoolean(prefs::kDisableDriveHostedFiles, 14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) *params->change_info.hosted_files_disabled); 148a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) drive::EventLogger* logger = file_manager::util::GetLogger(GetProfile()); 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (logger) 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) logger->Log(logging::LOG_INFO, "%s succeeded.", name().c_str()); 152a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return true; 153a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 154a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciFileManagerPrivateZipSelectionFunction:: 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FileManagerPrivateZipSelectionFunction() {} 157a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciFileManagerPrivateZipSelectionFunction:: 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ~FileManagerPrivateZipSelectionFunction() {} 160a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool FileManagerPrivateZipSelectionFunction::RunAsync() { 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci using extensions::api::file_manager_private::ZipSelection::Params; 16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const scoped_ptr<Params> params(Params::Create(*args_)); 16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params); 165a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 166a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // First param is the source directory URL. 16758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (params->dir_url.empty()) 168a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 169a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 170424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::FilePath src_dir = file_manager::util::GetLocalPathFromURL( 1711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) render_view_host(), GetProfile(), GURL(params->dir_url)); 172a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (src_dir.empty()) 173a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 174a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 175a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Second param is the list of selected file URLs. 17658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (params->selection_urls.empty()) 177a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 178a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 179a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::vector<base::FilePath> files; 18058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (size_t i = 0; i < params->selection_urls.size(); ++i) { 181424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) base::FilePath path = file_manager::util::GetLocalPathFromURL( 1821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) render_view_host(), GetProfile(), GURL(params->selection_urls[i])); 183a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (path.empty()) 184a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 185a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) files.push_back(path); 186a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 187a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 188a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Third param is the name of the output zip file. 18958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (params->dest_name.empty()) 190a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 191a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 192a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Check if the dir path is under Drive mount point. 193a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // TODO(hshi): support create zip file on Drive (crbug.com/158690). 194a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (drive::util::IsUnderDriveMountPoint(src_dir)) 195a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 196a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::FilePath dest_file = src_dir.Append(params->dest_name); 198a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::vector<base::FilePath> src_relative_paths; 199a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) for (size_t i = 0; i != files.size(); ++i) { 200a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const base::FilePath& file_path = files[i]; 201a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 202a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Obtain the relative path of |file_path| under |src_dir|. 203a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::FilePath relative_path; 204a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!src_dir.AppendRelativePath(file_path, &relative_path)) 205a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 206a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) src_relative_paths.push_back(relative_path); 207a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 208a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 209010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (new file_manager::ZipFileCreator( 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&FileManagerPrivateZipSelectionFunction::OnZipDone, this), 211010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) src_dir, 212010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) src_relative_paths, 213010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) dest_file))->Start(); 214a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return true; 215a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 216a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid FileManagerPrivateZipSelectionFunction::OnZipDone(bool success) { 218a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) SetResult(new base::FundamentalValue(success)); 219a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) SendResponse(true); 220a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 221a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool FileManagerPrivateZoomFunction::RunSync() { 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci using extensions::api::file_manager_private::Zoom::Params; 22458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const scoped_ptr<Params> params(Params::Create(*args_)); 22558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params); 22658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 22758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::PageZoom zoom_type; 22858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switch (params->operation) { 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case api::file_manager_private::ZOOM_OPERATION_TYPE_IN: 23058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) zoom_type = content::PAGE_ZOOM_IN; 23158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) break; 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case api::file_manager_private::ZOOM_OPERATION_TYPE_OUT: 23358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) zoom_type = content::PAGE_ZOOM_OUT; 23458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) break; 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case api::file_manager_private::ZOOM_OPERATION_TYPE_RESET: 23658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) zoom_type = content::PAGE_ZOOM_RESET; 23758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) break; 23858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) default: 23958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NOTREACHED(); 24058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 24158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) render_view_host()->Zoom(zoom_type); 24358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 244a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 245a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool FileManagerPrivateInstallWebstoreItemFunction::RunAsync() { 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci using extensions::api::file_manager_private::InstallWebstoreItem::Params; 24858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const scoped_ptr<Params> params(Params::Create(*args_)); 24958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params); 25058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 25158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (params->item_id.empty()) 25258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 25358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 25458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const extensions::WebstoreStandaloneInstaller::Callback callback = 25558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind( 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &FileManagerPrivateInstallWebstoreItemFunction::OnInstallComplete, 25758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) this); 25858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Only GoogleCastAPI extension can use silent installation. 2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (params->silent_installation && 2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) params->item_id != kGoogleCastApiExtensionId) { 2626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) SetError("Only whitelisted items can do silent installation."); 2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return false; 2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<file_manager::AppInstaller> installer( 2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new file_manager::AppInstaller(GetAssociatedWebContents(), 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) params->item_id, 2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetProfile(), 2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) params->silent_installation, 2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) callback)); 27258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // installer will be AddRef()'d in BeginInstall(). 27358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) installer->BeginInstall(); 27458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 275a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 276a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid FileManagerPrivateInstallWebstoreItemFunction::OnInstallComplete( 27858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool success, 2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& error, 2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::webstore_install::Result result) { 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) drive::EventLogger* logger = file_manager::util::GetLogger(GetProfile()); 28258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (success) { 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (logger) { 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) logger->Log(logging::LOG_INFO, 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "App install succeeded. (item id: %s)", 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) webstore_item_id_.c_str()); 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 288a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } else { 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (logger) { 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) logger->Log(logging::LOG_ERROR, 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "App install failed. (item id: %s, reason: %s)", 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) webstore_item_id_.c_str(), 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error.c_str()); 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetError(error); 29658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 29758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 29858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SendResponse(success); 29958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 30058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciFileManagerPrivateRequestWebStoreAccessTokenFunction:: 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FileManagerPrivateRequestWebStoreAccessTokenFunction() { 30358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 30458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciFileManagerPrivateRequestWebStoreAccessTokenFunction:: 3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ~FileManagerPrivateRequestWebStoreAccessTokenFunction() { 30758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 30858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool FileManagerPrivateRequestWebStoreAccessTokenFunction::RunAsync() { 31058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::vector<std::string> scopes; 31158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scopes.push_back(kCWSScope); 31258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 31368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ProfileOAuth2TokenService* oauth_service = 3141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetForProfile(GetProfile()); 31558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) net::URLRequestContextGetter* url_request_context_getter = 31658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) g_browser_process->system_request_context(); 31758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 31858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!oauth_service) { 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) drive::EventLogger* logger = file_manager::util::GetLogger(GetProfile()); 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (logger) { 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) logger->Log(logging::LOG_ERROR, 3225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "CWS OAuth token fetch failed. OAuth2TokenService can't " 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "be retrieved."); 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 32558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetResult(base::Value::CreateNullValue()); 326a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return false; 327a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 32858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SigninManagerBase* signin_manager = 3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SigninManagerFactory::GetForProfile(GetProfile()); 33158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) auth_service_.reset(new google_apis::AuthService( 33258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) oauth_service, 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) signin_manager->GetAuthenticatedAccountId(), 33458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) url_request_context_getter, 33558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scopes)); 33658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) auth_service_->StartAuthentication(base::Bind( 3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &FileManagerPrivateRequestWebStoreAccessTokenFunction:: 33858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) OnAccessTokenFetched, 33958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) this)); 34058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 341a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return true; 342a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 343a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid FileManagerPrivateRequestWebStoreAccessTokenFunction::OnAccessTokenFetched( 34558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) google_apis::GDataErrorCode code, 34658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::string& access_token) { 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) drive::EventLogger* logger = file_manager::util::GetLogger(GetProfile()); 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 34958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (code == google_apis::HTTP_SUCCESS) { 35058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(auth_service_->HasAccessToken()); 35158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(access_token == auth_service_->access_token()); 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (logger) 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) logger->Log(logging::LOG_INFO, "CWS OAuth token fetch succeeded."); 35458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetResult(new base::StringValue(access_token)); 35558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SendResponse(true); 35658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } else { 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (logger) { 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) logger->Log(logging::LOG_ERROR, 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "CWS OAuth token fetch failed. (GDataErrorCode: %s)", 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) google_apis::GDataErrorCodeToString(code).c_str()); 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 36258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetResult(base::Value::CreateNullValue()); 36358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SendResponse(false); 36458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 36558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 36658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool FileManagerPrivateGetProfilesFunction::RunSync() { 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(USE_ATHENA) 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(oshima): Figure out what to do. 3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<linked_ptr<api::file_manager_private::ProfileInfo> >& 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles = GetLoggedInProfileInfoList(); 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Obtains the display profile ID. 3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AppWindow* const app_window = GetCurrentAppWindow(this); 3785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::MultiUserWindowManager* const window_manager = 3795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::MultiUserWindowManager::GetInstance(); 3805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string current_profile_id = 3815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) multi_user_util::GetUserIDFromProfile(GetProfile()); 3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string display_profile_id = 3835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window_manager && app_window ? window_manager->GetUserPresentingWindow( 3845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) app_window->GetNativeWindow()) 3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : ""; 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci results_ = api::file_manager_private::GetProfiles::Results::Create( 3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profiles, 3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) current_profile_id, 3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) display_profile_id.empty() ? current_profile_id : display_profile_id); 3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 3925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool FileManagerPrivateVisitDesktopFunction::RunSync() { 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci using api::file_manager_private::VisitDesktop::Params; 3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_ptr<Params> params(Params::Create(*args_)); 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<linked_ptr<api::file_manager_private::ProfileInfo> >& 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles = GetLoggedInProfileInfoList(); 3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::MultiUserWindowManager* const window_manager = 4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::MultiUserWindowManager::GetInstance(); 4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(window_manager); 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check if the target user is logged-in or not. 4055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool logged_in = false; 4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (size_t i = 0; i < profiles.size(); ++i) { 4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (profiles[i]->profile_id == params->profile_id) { 4085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) logged_in = true; 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 4115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!logged_in) { 4135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetError("The user is not logged-in now."); 4145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 4155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 4165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Look for the current app window. 4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AppWindow* const app_window = GetCurrentAppWindow(this); 4195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!app_window) { 4205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetError("Target window is not found."); 4215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 4225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 4235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Move the window to the user's desktop. 4255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window_manager->ShowWindowForUser(app_window->GetNativeWindow(), 4265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) params->profile_id); 4275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check the result. 4295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!window_manager->IsWindowOnDesktopOfUser(app_window->GetNativeWindow(), 4305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) params->profile_id)) { 4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetError("The window cannot visit the desktop."); 4325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 4335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 4345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 4365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool FileManagerPrivateOpenInspectorFunction::RunSync() { 4391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci using extensions::api::file_manager_private::OpenInspector::Params; 440cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const scoped_ptr<Params> params(Params::Create(*args_)); 441cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(params); 442cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 443cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switch (params->type) { 4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case extensions::api::file_manager_private::INSPECTION_TYPE_NORMAL: 445cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Open inspector for foreground page. 4466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DevToolsWindow::OpenDevToolsWindow( 4476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) content::WebContents::FromRenderViewHost(render_view_host())); 448cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 4491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case extensions::api::file_manager_private::INSPECTION_TYPE_CONSOLE: 450cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Open inspector for foreground page and bring focus to the console. 4516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DevToolsWindow::OpenDevToolsWindow( 4526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) content::WebContents::FromRenderViewHost(render_view_host()), 4536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DevToolsToggleAction::ShowConsole()); 454cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case extensions::api::file_manager_private::INSPECTION_TYPE_ELEMENT: 456cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Open inspector for foreground page in inspect element mode. 4576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DevToolsWindow::OpenDevToolsWindow( 4586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) content::WebContents::FromRenderViewHost(render_view_host()), 4596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DevToolsToggleAction::Inspect()); 460cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case extensions::api::file_manager_private::INSPECTION_TYPE_BACKGROUND: 462cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Open inspector for background page. 4635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::devtools_util::InspectBackgroundPage(extension(), 464cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetProfile()); 465cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 466cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) default: 467cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NOTREACHED(); 468cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SetError( 469cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::StringPrintf("Unexpected inspection type(%d) is specified.", 470cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static_cast<int>(params->type))); 471cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return false; 472cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 473cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 474cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 475cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 476424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} // namespace extensions 477