| // Copyright 2014 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/renderer_context_menu/context_menu_content_type_platform_app.h" |
| |
| #include "base/command_line.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "content/public/browser/web_contents.h" |
| #include "extensions/browser/process_manager.h" |
| #include "extensions/common/extension.h" |
| #include "extensions/common/manifest.h" |
| |
| using extensions::Extension; |
| using extensions::ProcessManager; |
| |
| ContextMenuContentTypePlatformApp::ContextMenuContentTypePlatformApp( |
| content::WebContents* web_contents, |
| const content::ContextMenuParams& params) |
| : ContextMenuContentType(web_contents, params, false) { |
| } |
| |
| ContextMenuContentTypePlatformApp::~ContextMenuContentTypePlatformApp() { |
| } |
| |
| const Extension* ContextMenuContentTypePlatformApp::GetExtension() const { |
| ProcessManager* process_manager = |
| ProcessManager::Get(source_web_contents()->GetBrowserContext()); |
| return process_manager->GetExtensionForWebContents( |
| source_web_contents()); |
| } |
| |
| bool ContextMenuContentTypePlatformApp::SupportsGroup(int group) { |
| const extensions::Extension* platform_app = GetExtension(); |
| |
| // The RVH might be for a process sandboxed from the extension. |
| if (!platform_app) |
| return false; |
| |
| DCHECK(platform_app->is_platform_app()); |
| |
| switch (group) { |
| // Add undo/redo, cut/copy/paste etc for text fields. |
| case ITEM_GROUP_EDITABLE: |
| case ITEM_GROUP_COPY: |
| return ContextMenuContentType::SupportsGroup(group); |
| case ITEM_GROUP_CURRENT_EXTENSION: |
| return true; |
| case ITEM_GROUP_DEVTOOLS_UNPACKED_EXT: |
| // Add dev tools for unpacked extensions. |
| return extensions::Manifest::IsUnpackedLocation( |
| platform_app->location()) || |
| base::CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kDebugPackedApps); |
| default: |
| return false; |
| } |
| } |