| Index: chrome/browser/extensions/api/developer_private/developer_private_api.cc | 
| =================================================================== | 
| --- chrome/browser/extensions/api/developer_private/developer_private_api.cc	(revision 173621) | 
| +++ chrome/browser/extensions/api/developer_private/developer_private_api.cc	(working copy) | 
| @@ -1,296 +0,0 @@ | 
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| -// Use of this source code is governed by a BSD-style license that can be | 
| -// found in the LICENSE file. | 
| - | 
| -#include "chrome/browser/extensions/api/developer_private/developer_private_api.h" | 
| - | 
| -#include "base/string_number_conversions.h" | 
| -#include "base/utf_string_conversions.h" | 
| -#include "base/values.h" | 
| -#include "chrome/browser/debugger/devtools_window.h" | 
| -#include "chrome/browser/extensions/api/developer_private/developer_private_api_factory.h" | 
| -#include "chrome/browser/extensions/extension_service.h" | 
| -#include "chrome/browser/extensions/extension_system.h" | 
| -#include "chrome/browser/extensions/management_policy.h" | 
| -#include "chrome/browser/extensions/updater/extension_updater.h" | 
| -#include "chrome/browser/profiles/profile.h" | 
| -#include "chrome/browser/ui/webui/extensions/extension_icon_source.h" | 
| -#include "chrome/browser/view_type_utils.h" | 
| -#include "chrome/common/extensions/api/developer_private.h" | 
| -#include "content/public/browser/browser_thread.h" | 
| -#include "content/public/browser/render_process_host.h" | 
| -#include "content/public/browser/render_view_host.h" | 
| -#include "content/public/browser/web_contents.h" | 
| -#include "grit/generated_resources.h" | 
| - | 
| -using content::RenderViewHost; | 
| -using extensions::DeveloperPrivateAPI; | 
| -using extensions::Extension; | 
| -using extensions::ExtensionSystem; | 
| - | 
| -namespace { | 
| - | 
| -extensions::ExtensionUpdater* GetExtensionUpdater(Profile* profile) { | 
| -    return profile->GetExtensionService()->updater(); | 
| -} | 
| - | 
| -}  // namespace | 
| - | 
| -namespace extensions { | 
| - | 
| -DeveloperPrivateAPI* DeveloperPrivateAPI::Get(Profile* profile) { | 
| -  return DeveloperPrivateAPIFactory::GetForProfile(profile); | 
| -} | 
| - | 
| -DeveloperPrivateAPI::DeveloperPrivateAPI(Profile* profile) | 
| -  : profile_(profile), | 
| -    deleting_render_view_host_(NULL) { | 
| -      RegisterNotifications(); | 
| -} | 
| - | 
| -scoped_ptr<developer::ItemInfo> DeveloperPrivateAPI::CreateItemInfo( | 
| -    const Extension& item, | 
| -    ExtensionSystem* system, | 
| -    bool item_is_enabled) { | 
| -  scoped_ptr<developer::ItemInfo> info(new developer::ItemInfo()); | 
| -  ExtensionService* service = system->extension_service(); | 
| - | 
| -  info->id = item.id(); | 
| -  info->name = item.name(); | 
| -  info->enabled = service->IsExtensionEnabled(info->id); | 
| -  info->offline_enabled = item.offline_enabled(); | 
| -  info->version = item.VersionString(); | 
| -  info->description = item.description(); | 
| - | 
| -  if (item.is_app()) { | 
| -    if (item.is_legacy_packaged_app()) | 
| -      info->type = developer::DEVELOPER_PRIVATE_ITEM_TYPE_LEGACY_PACKAGED_APP; | 
| -    else if (item.is_hosted_app()) | 
| -      info->type = developer::DEVELOPER_PRIVATE_ITEM_TYPE_HOSTED_APP; | 
| -    else if (item.is_platform_app()) | 
| -      info->type = developer::DEVELOPER_PRIVATE_ITEM_TYPE_PACKAGED_APP; | 
| -    else | 
| -      NOTREACHED(); | 
| -  } else if (item.is_theme()) { | 
| -    info->type = developer::DEVELOPER_PRIVATE_ITEM_TYPE_THEME; | 
| -  } else if (item.is_extension()) { | 
| -    info->type = developer::DEVELOPER_PRIVATE_ITEM_TYPE_EXTENSION; | 
| -  } else { | 
| -    NOTREACHED(); | 
| -  } | 
| - | 
| -  if (item.location() == Extension::LOAD) { | 
| -    info->path.reset( | 
| -        new std::string(UTF16ToUTF8(item.path().LossyDisplayName()))); | 
| -  } | 
| - | 
| -  info->enabled_incognito = service->IsIncognitoEnabled(item.id()); | 
| -  info->wants_file_access = item.wants_file_access(); | 
| -  info->allow_file_access = service->AllowFileAccess(&item); | 
| -  info->allow_reload = (item.location() == Extension::LOAD); | 
| -  info->is_unpacked = (item.location() == Extension::LOAD); | 
| - | 
| -  GURL icon = | 
| -      ExtensionIconSource::GetIconURL(&item, | 
| -                                      extension_misc::EXTENSION_ICON_MEDIUM, | 
| -                                      ExtensionIconSet::MATCH_BIGGER, | 
| -                                      !info->enabled, | 
| -                                      NULL); | 
| -  info->icon = icon.spec(); | 
| - | 
| -  info->homepage_url.reset(new std::string(item.GetHomepageURL().spec())); | 
| -  if (!item.options_url().is_empty()) { | 
| -    info->options_url.reset(new std::string(item.options_url().spec())); | 
| -  } | 
| - | 
| -  if (!item.update_url().is_empty()) { | 
| -    info->update_url.reset(new std::string( | 
| -        item.update_url().spec())); | 
| -  } | 
| - | 
| -  if (item.is_app()) { | 
| -    info->app_launch_url.reset(new std::string( | 
| -        item.GetFullLaunchURL().spec())); | 
| -  } | 
| - | 
| -  info->may_disable = system->management_policy()-> | 
| -      UserMayModifySettings(&item, NULL); | 
| -  info->is_app = item.is_app(); | 
| -  info->views = GetInspectablePagesForExtension(&item, item_is_enabled); | 
| - | 
| -  return info.Pass(); | 
| -} | 
| - | 
| -void DeveloperPrivateAPI::AddItemsInfo(const ExtensionSet& items, | 
| -                                       ExtensionSystem* system, | 
| -                                       ItemInfoList* item_list) { | 
| - | 
| -  for (ExtensionSet::const_iterator iter = items.begin(); | 
| -       iter != items.end(); ++iter) { | 
| -    const Extension& item = **iter; | 
| -    if (item.location() == Extension::COMPONENT) | 
| -      continue; // Skip built-in extensions / apps; | 
| -    item_list->push_back(make_linked_ptr<developer::ItemInfo>( | 
| -        CreateItemInfo(item, system, false).release())); | 
| -  } | 
| -} | 
| - | 
| -void DeveloperPrivateAPI::GetInspectablePagesForExtensionProcess( | 
| -    const std::set<content::RenderViewHost*>& views, | 
| -    ItemInspectViewList* result) { | 
| -  for (std::set<content::RenderViewHost*>::const_iterator iter = views.begin(); | 
| -       iter != views.end(); ++iter) { | 
| -    content::RenderViewHost* host = *iter; | 
| -    content::WebContents* web_contents = | 
| -        content::WebContents::FromRenderViewHost(host); | 
| -    chrome::ViewType host_type = chrome::GetViewType(web_contents); | 
| -    if (host == deleting_render_view_host_ || | 
| -        chrome::VIEW_TYPE_EXTENSION_POPUP == host_type || | 
| -        chrome::VIEW_TYPE_EXTENSION_DIALOG == host_type) | 
| -      continue; | 
| - | 
| -    GURL url = web_contents->GetURL(); | 
| -    content::RenderProcessHost* process = host->GetProcess(); | 
| -    linked_ptr<developer::ItemInspectView> | 
| -        view(new developer::ItemInspectView()); | 
| -    view->path = url.path().substr(1); | 
| -    view->render_process_id = process->GetID(); | 
| -    view->render_view_id = host->GetRoutingID(); | 
| -    view->incognito = process->GetBrowserContext()->IsOffTheRecord(); | 
| - | 
| -    result->push_back(view); | 
| -  } | 
| -} | 
| - | 
| -ItemInspectViewList DeveloperPrivateAPI::GetInspectablePagesForExtension( | 
| -    const extensions::Extension* extension, | 
| -    bool extension_is_enabled) { | 
| - | 
| -  ItemInspectViewList result; | 
| -  // Get the extension process's active views. | 
| -  ExtensionProcessManager* process_manager = | 
| -      extensions::ExtensionSystem::Get(profile_)->process_manager(); | 
| -  GetInspectablePagesForExtensionProcess( | 
| -      process_manager->GetRenderViewHostsForExtension(extension->id()), | 
| -      &result); | 
| -  return result; | 
| -} | 
| - | 
| -void DeveloperPrivateAPI::Observe( | 
| -    int type, | 
| -    const content::NotificationSource& source, | 
| -    const content::NotificationDetails& details) { | 
| -  Profile* source_profile = NULL; | 
| -  switch (type) { | 
| -    // TODO(grv): Listen to other notifications. | 
| -    case content::NOTIFICATION_RENDER_VIEW_HOST_DELETED: | 
| -    case chrome::NOTIFICATION_BACKGROUND_CONTENTS_DELETED: | 
| -      deleting_render_view_host_ | 
| -          = content::Source<RenderViewHost>(source).ptr(); | 
| -      source_profile = content::Source<Profile>(source).ptr(); | 
| -      break; | 
| -    default: | 
| -      NOTREACHED(); | 
| -  } | 
| -} | 
| - | 
| -void DeveloperPrivateAPI::RegisterNotifications() { | 
| -  registrar_.Add(this, | 
| -                 content::NOTIFICATION_RENDER_VIEW_HOST_DELETED, | 
| -                 content::NotificationService::AllBrowserContextsAndSources()); | 
| -  registrar_.Add(this, | 
| -                 chrome::NOTIFICATION_BACKGROUND_CONTENTS_DELETED, | 
| -                 content::NotificationService::AllBrowserContextsAndSources()); | 
| -} | 
| - | 
| -DeveloperPrivateAPI::~DeveloperPrivateAPI() {} | 
| - | 
| -void DeveloperPrivateAPI::Shutdown() {} | 
| - | 
| -namespace api { | 
| - | 
| -bool DeveloperPrivateAutoUpdateFunction::RunImpl() { | 
| -  extensions::ExtensionUpdater* updater = GetExtensionUpdater(profile()); | 
| -  if (updater) | 
| -    updater->CheckNow(extensions::ExtensionUpdater::CheckParams()); | 
| -  SetResult(Value::CreateBooleanValue(true)); | 
| -  return true; | 
| -} | 
| - | 
| -DeveloperPrivateAutoUpdateFunction::~DeveloperPrivateAutoUpdateFunction() {} | 
| - | 
| -bool DeveloperPrivateGetItemsInfoFunction::RunImpl() { | 
| -  ItemInfoList items; | 
| -  ExtensionSystem* system = ExtensionSystem::Get(profile()); | 
| -  scoped_ptr<developer::GetItemsInfo::Params> params( | 
| -      developer::GetItemsInfo::Params::Create(*args_)); | 
| -  EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); | 
| - | 
| -  bool include_disabled = params->include_disabled; | 
| -  bool include_terminated = params->include_terminated; | 
| -  ExtensionSet extension_set; | 
| -  extension_set.InsertAll( | 
| -      *profile()->GetExtensionService()->extensions()); | 
| - | 
| -  if (include_disabled) { | 
| -    extension_set.InsertAll( | 
| -        *profile()->GetExtensionService()->disabled_extensions()); | 
| -  } | 
| - | 
| -  if (include_terminated) { | 
| -    extension_set.InsertAll( | 
| -        *profile()->GetExtensionService()->disabled_extensions()); | 
| -  } | 
| - | 
| -  DeveloperPrivateAPI::Get(profile())->AddItemsInfo( | 
| -      extension_set, system, &items); | 
| - | 
| -  results_ = developer::GetItemsInfo::Results::Create(items); | 
| -  return true; | 
| -} | 
| - | 
| -DeveloperPrivateGetItemsInfoFunction::~DeveloperPrivateGetItemsInfoFunction() {} | 
| - | 
| -bool DeveloperPrivateInspectFunction::RunImpl() { | 
| -  scoped_ptr<developer::Inspect::Params> params( | 
| -      developer::Inspect::Params::Create(*args_)); | 
| -  EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); | 
| -  const developer::InspectOptions& options = params->options; | 
| - | 
| -  int render_process_id; | 
| -  base::StringToInt(options.render_process_id, &render_process_id); | 
| - | 
| -  if (render_process_id == -1) { | 
| -    // This is a lazy background page. Identify if it is a normal | 
| -    // or incognito background page. | 
| -    ExtensionService* service = profile()->GetExtensionService(); | 
| -    if (options.incognito) | 
| -      service = extensions::ExtensionSystem::Get( | 
| -          service->profile()->GetOffTheRecordProfile())->extension_service(); | 
| -    const Extension* extension = service->extensions()->GetByID( | 
| -        options.extension_id); | 
| -    DCHECK(extension); | 
| -    // Wakes up the background page and  opens the inspect window. | 
| -    service->InspectBackgroundPage(extension); | 
| -    return false; | 
| -  } | 
| - | 
| -  int render_view_id; | 
| -  base::StringToInt(options.render_view_id, &render_view_id); | 
| -  content::RenderViewHost* host = content::RenderViewHost::FromID( | 
| -      render_process_id, render_view_id); | 
| - | 
| -  if (!host) { | 
| -    // This can happen if the host has gone away since the page was displayed. | 
| -    return false; | 
| -  } | 
| - | 
| -  DevToolsWindow::OpenDevToolsWindow(host); | 
| -  return true; | 
| -} | 
| - | 
| -DeveloperPrivateInspectFunction::~DeveloperPrivateInspectFunction() {} | 
| - | 
| -}  // namespace api | 
| - | 
| -}  // namespace extensions | 
|  |