Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / extensions / extension_action_context_menu_controller.mm
index 9824eae..f540d86 100644 (file)
@@ -5,6 +5,7 @@
 #import "chrome/browser/ui/cocoa/extensions/extension_action_context_menu_controller.h"
 
 #include "base/strings/sys_string_conversions.h"
+#include "chrome/browser/extensions/active_script_controller.h"
 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
 #include "chrome/browser/extensions/extension_action_manager.h"
 #include "chrome/browser/extensions/extension_service.h"
@@ -12,6 +13,7 @@
 #include "chrome/browser/extensions/extension_uninstall_dialog.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/cocoa/browser_window_cocoa.h"
 #include "chrome/browser/ui/cocoa/browser_window_controller.h"
 #include "chrome/browser/ui/cocoa/extensions/extension_popup_controller.h"
 #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h"
 #include "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
-#include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/extensions/manifest_url_handler.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
+#include "chrome/grit/chromium_strings.h"
+#include "chrome/grit/generated_resources.h"
 #include "content/public/browser/web_contents.h"
 #include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_system.h"
+#include "extensions/browser/uninstall_reason.h"
+#include "extensions/common/constants.h"
 #include "extensions/common/extension.h"
-#include "grit/chromium_strings.h"
-#include "grit/generated_resources.h"
+#include "extensions/common/extension_urls.h"
+#include "extensions/common/manifest_handlers/options_page_info.h"
 #include "ui/base/l10n/l10n_util_mac.h"
 
 using content::OpenURLParams;
@@ -44,7 +49,8 @@ class AsyncUninstaller : public extensions::ExtensionUninstallDialog::Delegate {
       : extension_(extension),
         profile_(browser->profile()) {
     extension_uninstall_dialog_.reset(
-        extensions::ExtensionUninstallDialog::Create(profile_, browser, this));
+        extensions::ExtensionUninstallDialog::Create(
+            profile_, browser->window()->GetNativeWindow(), this));
     extension_uninstall_dialog_->ConfirmUninstall(extension_);
   }
 
@@ -52,8 +58,12 @@ class AsyncUninstaller : public extensions::ExtensionUninstallDialog::Delegate {
 
   // ExtensionUninstallDialog::Delegate:
   virtual void ExtensionUninstallAccepted() OVERRIDE {
-    extensions::ExtensionSystem::Get(profile_)->extension_service()->
-        UninstallExtension(extension_->id(), false, NULL);
+    extensions::ExtensionSystem::Get(profile_)
+        ->extension_service()
+        ->UninstallExtension(extension_->id(),
+                             extensions::UNINSTALL_REASON_USER_INITIATED,
+                             base::Bind(&base::DoNothing),
+                             NULL);
   }
   virtual void ExtensionUninstallCanceled() OVERRIDE {}
 
@@ -71,6 +81,7 @@ class AsyncUninstaller : public extensions::ExtensionUninstallDialog::Delegate {
 
 @interface ExtensionActionContextMenuController ()
 - (void)onExtensionName:(id)sender;
+- (void)onAlwaysRun:(id)sender;
 - (void)onOptions:(id)sender;
 - (void)onUninstall:(id)sender;
 - (void)onHide:(id)sender;
@@ -106,13 +117,26 @@ class AsyncUninstaller : public extensions::ExtensionUninstallDialog::Delegate {
   // Separator.
   [menu addItem:[NSMenuItem separatorItem]];
 
+  // Always Run. Only displayed if there is an active script injection action.
+  content::WebContents* activeTab =
+      browser_->tab_strip_model()->GetActiveWebContents();
+  if (activeTab &&
+      extensions::ActiveScriptController::GetForWebContents(activeTab)
+          ->WantsToRun(extension_)) {
+    item = [menu addItemWithTitle:
+                l10n_util::GetNSStringWithFixup(IDS_EXTENSIONS_ALWAYS_RUN)
+                           action:@selector(onAlwaysRun:)
+                    keyEquivalent:@""];
+    [item setTarget:self];
+  }
+
   // Options.
   item = [menu addItemWithTitle:
               l10n_util::GetNSStringWithFixup(IDS_EXTENSIONS_OPTIONS_MENU_ITEM)
                          action:@selector(onOptions:)
                   keyEquivalent:@""];
   [item setTarget:self];
-  [item setEnabled:extensions::ManifestURL::GetOptionsPage(
+  [item setEnabled:extensions::OptionsPageInfo::GetOptionsPage(
       extension_).spec().length() > 0];
 
 
@@ -156,18 +180,26 @@ class AsyncUninstaller : public extensions::ExtensionUninstallDialog::Delegate {
 }
 
 - (void)onExtensionName:(id)sender {
-  GURL url(std::string(extension_urls::kGalleryBrowsePrefix) +
-           std::string("/detail/") + extension_->id());
+  GURL url(extension_urls::GetWebstoreItemDetailURLPrefix() + extension_->id());
   OpenURLParams params(url,
                        Referrer(),
                        NEW_FOREGROUND_TAB,
-                       content::PAGE_TRANSITION_LINK,
+                       ui::PAGE_TRANSITION_LINK,
                        false);
   browser_->OpenURL(params);
 }
 
+- (void)onAlwaysRun:(id)sender {
+  content::WebContents* activeTab =
+      browser_->tab_strip_model()->GetActiveWebContents();
+  if (activeTab) {
+    extensions::ActiveScriptController::GetForWebContents(activeTab)
+        ->AlwaysRunOnVisibleOrigin(extension_);
+  }
+}
+
 - (void)onOptions:(id)sender {
-  DCHECK(!extensions::ManifestURL::GetOptionsPage(extension_).is_empty());
+  DCHECK(!extensions::OptionsPageInfo::GetOptionsPage(extension_).is_empty());
   extensions::ExtensionTabUtil::OpenOptionsPage(extension_, browser_);
 }