12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_API_DEVELOPER_PRIVATE_DEVELOPER_PRIVATE_API_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_API_DEVELOPER_PRIVATE_DEVELOPER_PRIVATE_API_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <set> 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/files/file.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/scoped_observer.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/developer_private/entry_picker.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/file_system/file_system_api.h" 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/extensions/chrome_extension_function.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/error_console/error_console.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_install_prompt.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_uninstall_dialog.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/pack_extension_job.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/requirements_checker.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_observer.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_registrar.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/render_view_host.h" 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/browser_context_keyed_api_factory.h" 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/event_router.h" 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "extensions/browser/extension_registry_observer.h" 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/file_system_context.h" 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/file_system_operation.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/shell_dialogs/select_file_dialog.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class Profile; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ExtensionError; 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class ExtensionRegistry; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ExtensionSystem; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ManagementPolicy; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace api { 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class EntryPicker; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class EntryPickerClient; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace developer_private { 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ItemInfo; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ItemInspectView; 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct ProjectInfo; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace developer_private 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace api 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace developer = api::developer_private; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef std::vector<linked_ptr<developer::ItemInfo> > ItemInfoList; 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef std::vector<linked_ptr<developer::ProjectInfo> > ProjectInfoList; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef std::vector<linked_ptr<developer::ItemInspectView> > 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ItemInspectViewList; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class DeveloperPrivateEventRouter : public content::NotificationObserver, 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public ExtensionRegistryObserver, 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public ErrorConsole::Observer { 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch explicit DeveloperPrivateEventRouter(Profile* profile); 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~DeveloperPrivateEventRouter(); 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Add or remove an ID to the list of extensions subscribed to events. 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void AddExtensionId(const std::string& extension_id); 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void RemoveExtensionId(const std::string& extension_id); 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // content::NotificationObserver implementation. 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void Observe(int type, 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const content::NotificationSource& source, 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const content::NotificationDetails& details) OVERRIDE; 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // ExtensionRegistryObserver implementation. 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void OnExtensionLoaded(content::BrowserContext* browser_context, 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const Extension* extension) OVERRIDE; 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void OnExtensionUnloaded( 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content::BrowserContext* browser_context, 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const Extension* extension, 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) UnloadedExtensionInfo::Reason reason) OVERRIDE; 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void OnExtensionWillBeInstalled( 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content::BrowserContext* browser_context, 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const Extension* extension, 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool is_update, 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool from_ephemeral, 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& old_name) OVERRIDE; 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void OnExtensionUninstalled( 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::BrowserContext* browser_context, 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const Extension* extension, 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::UninstallReason reason) OVERRIDE; 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // ErrorConsole::Observer implementation. 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnErrorAdded(const ExtensionError* error) OVERRIDE; 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content::NotificationRegistrar registrar_; 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ScopedObserver<extensions::ExtensionRegistry, 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extensions::ExtensionRegistryObserver> 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extension_registry_observer_; 10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Profile* profile_; 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The set of IDs of the Extensions that have subscribed to DeveloperPrivate 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // events. Since the only consumer of the DeveloperPrivate API is currently 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // the Apps Developer Tool (which replaces the chrome://extensions page), we 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // don't want to send information about the subscribing extension in an 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // update. In particular, we want to avoid entering a loop, which could happen 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // when, e.g., the Apps Developer Tool throws an error. 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<std::string> extension_ids_; 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(DeveloperPrivateEventRouter); 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The profile-keyed service that manages the DeveloperPrivate API. 119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class DeveloperPrivateAPI : public BrowserContextKeyedAPI, 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public EventRouter::Observer { 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static BrowserContextKeyedAPIFactory<DeveloperPrivateAPI>* 123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetFactoryInstance(); 124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Convenience method to get the DeveloperPrivateAPI for a profile. 126a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static DeveloperPrivateAPI* Get(content::BrowserContext* context); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) explicit DeveloperPrivateAPI(content::BrowserContext* context); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeveloperPrivateAPI(); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetLastUnpackedDirectory(const base::FilePath& path); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath& GetLastUnpackedDirectory() { 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return last_unpacked_directory_; 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // KeyedService implementation 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Shutdown() OVERRIDE; 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // EventRouter::Observer implementation. 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnListenerAdded(const EventListenerInfo& details) OVERRIDE; 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnListenerRemoved(const EventListenerInfo& details) OVERRIDE; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) friend class BrowserContextKeyedAPIFactory<DeveloperPrivateAPI>; 146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // BrowserContextKeyedAPI implementation. 148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static const char* service_name() { return "DeveloperPrivateAPI"; } 149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static const bool kServiceRedirectedInIncognito = true; 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static const bool kServiceIsNULLWhileTesting = true; 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RegisterNotifications(); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Profile* profile_; 155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used to start the load |load_extension_dialog_| in the last directory that 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // was loaded. 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath last_unpacked_directory_; 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Created lazily upon OnListenerAdded. 161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<DeveloperPrivateEventRouter> developer_private_event_router_; 162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(DeveloperPrivateAPI); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace api { 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class DeveloperPrivateAutoUpdateFunction : public ChromeSyncExtensionFunction { 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.autoUpdate", 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DEVELOPERPRIVATE_AUTOUPDATE) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeveloperPrivateAutoUpdateFunction(); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionFunction: 1775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool RunSync() OVERRIDE; 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class DeveloperPrivateGetItemsInfoFunction 1811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : public ChromeAsyncExtensionFunction { 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.getItemsInfo", 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DEVELOPERPRIVATE_GETITEMSINFO) 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeveloperPrivateGetItemsInfoFunction(); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionFunction: 190010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<developer::ItemInfo> CreateItemInfo(const Extension& item, 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool item_is_enabled); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void GetIconsOnFileThread( 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ItemInfoList item_list, 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::map<std::string, ExtensionResource> itemIdToIconResourceMap); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Helper that lists the current inspectable html pages for the extension. 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void GetInspectablePagesForExtensionProcess( 202424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const Extension* extension, 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::set<content::RenderViewHost*>& views, 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ItemInspectViewList* result); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ItemInspectViewList GetInspectablePagesForExtension( 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const Extension* extension, 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool extension_is_enabled); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void GetAppWindowPagesForExtensionProfile(const Extension* extension, 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ItemInspectViewList* result); 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) linked_ptr<developer::ItemInspectView> constructInspectView( 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& url, 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int render_process_id, 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int render_view_id, 2173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool incognito, 2183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool generated_background_page); 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class DeveloperPrivateInspectFunction : public ChromeSyncExtensionFunction { 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.inspect", 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DEVELOPERPRIVATE_INSPECT) 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeveloperPrivateInspectFunction(); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionFunction: 2305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool RunSync() OVERRIDE; 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class DeveloperPrivateAllowFileAccessFunction 2341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : public ChromeSyncExtensionFunction { 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.allowFileAccess", 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DEVELOPERPRIVATE_ALLOWFILEACCESS); 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeveloperPrivateAllowFileAccessFunction(); 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionFunction: 2435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool RunSync() OVERRIDE; 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class DeveloperPrivateAllowIncognitoFunction 2471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : public ChromeSyncExtensionFunction { 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.allowIncognito", 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DEVELOPERPRIVATE_ALLOWINCOGNITO); 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeveloperPrivateAllowIncognitoFunction(); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionFunction: 2565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool RunSync() OVERRIDE; 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class DeveloperPrivateReloadFunction : public ChromeSyncExtensionFunction { 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.reload", 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DEVELOPERPRIVATE_RELOAD); 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeveloperPrivateReloadFunction(); 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionFunction: 2685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool RunSync() OVERRIDE; 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class DeveloperPrivateShowPermissionsDialogFunction 2721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : public ChromeSyncExtensionFunction, 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public ExtensionInstallPrompt::Delegate { 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.showPermissionsDialog", 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DEVELOPERPRIVATE_PERMISSIONS); 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DeveloperPrivateShowPermissionsDialogFunction(); 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~DeveloperPrivateShowPermissionsDialogFunction(); 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ExtensionFunction: 2835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool RunSync() OVERRIDE; 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Overridden from ExtensionInstallPrompt::Delegate 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void InstallUIProceed() OVERRIDE; 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void InstallUIAbort(bool user_initiated) OVERRIDE; 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ExtensionInstallPrompt> prompt_; 290868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string extension_id_; 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DeveloperPrivateEnableFunction 2941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : public ChromeSyncExtensionFunction, 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public base::SupportsWeakPtr<DeveloperPrivateEnableFunction> { 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.enable", 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DEVELOPERPRIVATE_ENABLE); 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DeveloperPrivateEnableFunction(); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeveloperPrivateEnableFunction(); 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Callback for requirements checker. 306010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void OnRequirementsChecked(const std::string& extension_id, 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<std::string> requirements_errors); 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionFunction: 3095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool RunSync() OVERRIDE; 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<RequirementsChecker> requirements_checker_; 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class DeveloperPrivateChooseEntryFunction : public ChromeAsyncExtensionFunction, 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public EntryPickerClient { 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeveloperPrivateChooseEntryFunction(); 319010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool ShowPicker(ui::SelectFileDialog::Type picker_type, 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& last_directory, 322a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& select_title, 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::SelectFileDialog::FileTypeInfo& info, 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int file_type_index); 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // EntryPickerClient functions. 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void FileSelected(const base::FilePath& path) = 0; 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void FileSelectionCanceled() = 0; 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DeveloperPrivateLoadUnpackedFunction 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public DeveloperPrivateChooseEntryFunction { 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.loadUnpacked", 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DEVELOPERPRIVATE_LOADUNPACKED); 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeveloperPrivateLoadUnpackedFunction(); 340010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // EntryPickerCLient implementation. 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void FileSelected(const base::FilePath& path) OVERRIDE; 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void FileSelectionCanceled() OVERRIDE; 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DeveloperPrivateChoosePathFunction 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public DeveloperPrivateChooseEntryFunction { 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.choosePath", 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DEVELOPERPRIVATE_CHOOSEPATH); 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeveloperPrivateChoosePathFunction(); 355010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // EntryPickerClient functions. 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void FileSelected(const base::FilePath& path) OVERRIDE; 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void FileSelectionCanceled() OVERRIDE; 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DeveloperPrivatePackDirectoryFunction 3631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : public ChromeAsyncExtensionFunction, 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public PackExtensionJob::Client { 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.packDirectory", 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DEVELOPERPRIVATE_PACKDIRECTORY); 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DeveloperPrivatePackDirectoryFunction(); 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionPackJob::Client implementation. 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnPackSuccess(const base::FilePath& crx_file, 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& key_file) OVERRIDE; 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnPackFailure(const std::string& error, 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionCreator::ErrorType error_type) OVERRIDE; 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeveloperPrivatePackDirectoryFunction(); 380010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 3835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<PackExtensionJob> pack_job_; 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string item_path_str_; 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string key_path_str_; 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class DeveloperPrivateIsProfileManagedFunction 3891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : public ChromeSyncExtensionFunction { 3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.isProfileManaged", 3925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DEVELOPERPRIVATE_ISPROFILEMANAGED); 393424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected: 3955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~DeveloperPrivateIsProfileManagedFunction(); 396424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // ExtensionFunction: 3985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool RunSync() OVERRIDE; 399424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 400424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class DeveloperPrivateLoadDirectoryFunction 4021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : public ChromeAsyncExtensionFunction { 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.loadDirectory", 4055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DEVELOPERPRIVATE_LOADUNPACKEDCROS); 406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DeveloperPrivateLoadDirectoryFunction(); 408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected: 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~DeveloperPrivateLoadDirectoryFunction(); 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // ExtensionFunction: 413010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 4145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 41503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool LoadByFileSystemAPI(const storage::FileSystemURL& directory_url); 416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 4175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ClearExistingDirectoryContent(const base::FilePath& project_path); 4185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void ReadDirectoryByFileSystemAPI(const base::FilePath& project_path, 420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::FilePath& destination_path); 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void ReadDirectoryByFileSystemAPICb( 4235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& project_path, 4245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& destination_path, 4255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::File::Error result, 42603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const storage::FileSystemOperation::FileEntryList& file_list, 4275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool has_more); 428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SnapshotFileCallback( 4305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& target_path, 4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::File::Error result, 4325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::File::Info& file_info, 4335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& platform_path, 43403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const scoped_refptr<storage::ShareableFileReference>& file_ref); 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void CopyFile(const base::FilePath& src_path, 4375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& dest_path); 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void Load(); 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 44103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_refptr<storage::FileSystemContext> context_; 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // syncfs url representing the root of the folder to be copied. 4445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string project_base_url_; 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // physical path on disc of the folder to be copied. 4475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FilePath project_base_path_; 4485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 4505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int pending_copy_operations_count_; 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This is set to false if any of the copyFile operations fail on 4535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // call of the API. It is returned as a response of the API call. 4545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool success_; 455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class DeveloperPrivateRequestFileSourceFunction 4581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : public ChromeAsyncExtensionFunction { 4595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 4605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.requestFileSource", 4615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DEVELOPERPRIVATE_REQUESTFILESOURCE); 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DeveloperPrivateRequestFileSourceFunction(); 464c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected: 4665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~DeveloperPrivateRequestFileSourceFunction(); 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // ExtensionFunction: 469010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 470b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 4725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void LaunchCallback(const base::DictionaryValue& results); 4735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 4745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class DeveloperPrivateOpenDevToolsFunction 4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : public ChromeAsyncExtensionFunction { 4775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 4785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DECLARE_EXTENSION_FUNCTION("developerPrivate.openDevTools", 4795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DEVELOPERPRIVATE_OPENDEVTOOLS); 4805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DeveloperPrivateOpenDevToolsFunction(); 4825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected: 4845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~DeveloperPrivateOpenDevToolsFunction(); 4855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // ExtensionFunction: 487010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace api 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_API_DEVELOPER_PRIVATE_DEVELOPER_PRIVATE_API_H_ 495