summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorerg@chromium.org <erg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-08 00:19:59 +0000
committererg@chromium.org <erg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-08 00:19:59 +0000
commit0f6c033419e7fc43dc52f8185446490c9ef3bbdb (patch)
tree01aebac3ca08dbbf605b5aa80e0988010b2b73c7 /chrome
parent4cc76bf03bfc647f4beacce4e8b887470462caf0 (diff)
downloadchromium_src-0f6c033419e7fc43dc52f8185446490c9ef3bbdb.zip
chromium_src-0f6c033419e7fc43dc52f8185446490c9ef3bbdb.tar.gz
chromium_src-0f6c033419e7fc43dc52f8185446490c9ef3bbdb.tar.bz2
First unified app menu behind the "--new-wrench-menu" flag.
Does not contain Cole's unified edit menu / zoom controls. This is just scaffolding that should allow all the rest of the unified menu to exist, while letting each platform implement the native-only portions in their platform specific ways. Only modifies the linux implementation to actually use the new model, though the command line flag and the new model should be shared between platforms. BUG=45734,45757 TEST=Run with --new-wrench-menu on linux. Notice how long the unified menu is. Review URL: http://codereview.chromium.org/2677006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49130 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/app/generated_resources.grd6
-rw-r--r--chrome/browser/gtk/browser_toolbar_gtk.cc63
-rw-r--r--chrome/browser/gtk/browser_toolbar_gtk.h2
-rw-r--r--chrome/browser/wrench_menu_model.cc174
-rw-r--r--chrome/browser/wrench_menu_model.h74
-rw-r--r--chrome/chrome_browser.gypi2
-rw-r--r--chrome/common/chrome_switches.cc3
-rw-r--r--chrome/common/chrome_switches.h1
8 files changed, 303 insertions, 22 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 14fa74c..33b2bcc 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -745,6 +745,9 @@ each locale. -->
<message name="IDS_PRINT" desc="The text label of the Print... menu item. Opens a dialog box to select print settings">
&amp;Print...
</message>
+ <message name="IDS_TOOLS_MENU" desc="The text label of the Tools submenu">
+ &amp;Tools
+ </message>
<message name="IDS_ZOOM_MENU" desc="The text label of the Zoom submenu">
&amp;Zoom
</message>
@@ -807,6 +810,9 @@ each locale. -->
<message name="IDS_PRINT" desc="In Title Case: The text label of the Print... menu item. Opens a dialog box to select print settings">
&amp;Print...
</message>
+ <message name="IDS_TOOLS_MENU" desc="The text label of the Tools submenu">
+ &amp;Tools
+ </message>
<message name="IDS_ZOOM_MENU" desc="In Title Case: The text label of the Zoom submenu">
&amp;Zoom
</message>
diff --git a/chrome/browser/gtk/browser_toolbar_gtk.cc b/chrome/browser/gtk/browser_toolbar_gtk.cc
index a73b1db..04b361b 100644
--- a/chrome/browser/gtk/browser_toolbar_gtk.cc
+++ b/chrome/browser/gtk/browser_toolbar_gtk.cc
@@ -13,6 +13,7 @@
#include "app/menus/accelerator_gtk.h"
#include "app/resource_bundle.h"
#include "base/base_paths.h"
+#include "base/command_line.h"
#include "base/i18n/rtl.h"
#include "base/keyboard_codes_posix.h"
#include "base/logging.h"
@@ -42,6 +43,7 @@
#include "chrome/browser/sync/sync_ui_util.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/upgrade_detector.h"
+#include "chrome/common/chrome_switches.h"
#include "chrome/common/notification_details.h"
#include "chrome/common/notification_service.h"
#include "chrome/common/notification_type.h"
@@ -88,6 +90,7 @@ BrowserToolbarGtk::BrowserToolbarGtk(Browser* browser, BrowserWindowGtk* window)
model_(browser->toolbar_model()),
page_menu_model_(this, browser),
app_menu_model_(this, browser),
+ wrench_menu_model_(this, browser),
browser_(browser),
window_(window),
profile_(NULL),
@@ -212,17 +215,21 @@ void BrowserToolbarGtk::Init(Profile* profile,
// We need another hbox for the menu buttons so we can place them together,
// but still have some padding to their collective left/right.
+ bool use_wrench_menu =
+ CommandLine::ForCurrentProcess()->HasSwitch(switches::kNewWrenchMenu);
GtkWidget* menus_hbox = gtk_hbox_new(FALSE, 0);
- GtkWidget* page_menu = BuildToolbarMenuButton(
- l10n_util::GetStringUTF8(IDS_PAGEMENU_TOOLTIP),
- &page_menu_button_);
- menu_bar_helper_.Add(page_menu_button_.get());
- page_menu_image_ = gtk_image_new_from_pixbuf(
- theme_provider_->GetRTLEnabledPixbufNamed(IDR_MENU_PAGE));
- gtk_container_add(GTK_CONTAINER(page_menu), page_menu_image_);
+ if (!use_wrench_menu) {
+ GtkWidget* page_menu = BuildToolbarMenuButton(
+ l10n_util::GetStringUTF8(IDS_PAGEMENU_TOOLTIP),
+ &page_menu_button_);
+ menu_bar_helper_.Add(page_menu_button_.get());
+ page_menu_image_ = gtk_image_new_from_pixbuf(
+ theme_provider_->GetRTLEnabledPixbufNamed(IDR_MENU_PAGE));
+ gtk_container_add(GTK_CONTAINER(page_menu), page_menu_image_);
- page_menu_.reset(new MenuGtk(this, &page_menu_model_));
- gtk_box_pack_start(GTK_BOX(menus_hbox), page_menu, FALSE, FALSE, 0);
+ page_menu_.reset(new MenuGtk(this, &page_menu_model_));
+ gtk_box_pack_start(GTK_BOX(menus_hbox), page_menu, FALSE, FALSE, 0);
+ }
GtkWidget* chrome_menu = BuildToolbarMenuButton(
l10n_util::GetStringFUTF8(IDS_APPMENU_TOOLTIP,
@@ -235,7 +242,10 @@ void BrowserToolbarGtk::Init(Profile* profile,
g_signal_connect_after(app_menu_image_, "expose-event",
G_CALLBACK(OnAppMenuImageExposeThunk), this);
- app_menu_.reset(new MenuGtk(this, &app_menu_model_));
+ if (use_wrench_menu)
+ app_menu_.reset(new MenuGtk(this, &wrench_menu_model_));
+ else
+ app_menu_.reset(new MenuGtk(this, &app_menu_model_));
gtk_box_pack_start(GTK_BOX(menus_hbox), chrome_menu, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(toolbar_right_), menus_hbox, FALSE, FALSE,
kToolbarWidgetSpacing);
@@ -275,7 +285,8 @@ void BrowserToolbarGtk::SetViewIDs() {
ViewIDUtil::SetID(home_->widget(), VIEW_ID_HOME_BUTTON);
ViewIDUtil::SetID(location_bar_->widget(), VIEW_ID_LOCATION_BAR);
ViewIDUtil::SetID(go_->widget(), VIEW_ID_GO_BUTTON);
- ViewIDUtil::SetID(page_menu_button_.get(), VIEW_ID_PAGE_MENU);
+ if (page_menu_button_.get())
+ ViewIDUtil::SetID(page_menu_button_.get(), VIEW_ID_PAGE_MENU);
ViewIDUtil::SetID(app_menu_button_.get(), VIEW_ID_APP_MENU);
}
@@ -300,7 +311,8 @@ void BrowserToolbarGtk::UpdateForBookmarkBarVisibility(
}
void BrowserToolbarGtk::ShowPageMenu() {
- PopupForButton(page_menu_button_.get());
+ if (page_menu_button_.get())
+ PopupForButton(page_menu_button_.get());
}
void BrowserToolbarGtk::ShowAppMenu() {
@@ -346,13 +358,15 @@ void BrowserToolbarGtk::EnabledStateChangedForCommand(int id, bool enabled) {
void BrowserToolbarGtk::StoppedShowing() {
// Without these calls, the hover state can get stuck since the leave-notify
// event is not sent when clicking a button brings up the menu.
- gtk_chrome_button_set_hover_state(
- GTK_CHROME_BUTTON(page_menu_button_.get()), 0.0);
+ if (page_menu_button_.get()) {
+ gtk_chrome_button_set_hover_state(
+ GTK_CHROME_BUTTON(page_menu_button_.get()), 0.0);
+ gtk_chrome_button_unset_paint_state(
+ GTK_CHROME_BUTTON(page_menu_button_.get()));
+ }
+
gtk_chrome_button_set_hover_state(
GTK_CHROME_BUTTON(app_menu_button_.get()), 0.0);
-
- gtk_chrome_button_unset_paint_state(
- GTK_CHROME_BUTTON(page_menu_button_.get()));
gtk_chrome_button_unset_paint_state(
GTK_CHROME_BUTTON(app_menu_button_.get()));
}
@@ -406,14 +420,18 @@ void BrowserToolbarGtk::Observe(NotificationType type,
// Update the spacing around the menu buttons
bool use_gtk = theme_provider_->UseGtkTheme();
int border = use_gtk ? 0 : 2;
- gtk_container_set_border_width(
- GTK_CONTAINER(page_menu_button_.get()), border);
+ if (page_menu_button_.get()) {
+ gtk_container_set_border_width(
+ GTK_CONTAINER(page_menu_button_.get()), border);
+ }
gtk_container_set_border_width(
GTK_CONTAINER(app_menu_button_.get()), border);
// Update the menu button images.
- gtk_image_set_from_pixbuf(GTK_IMAGE(page_menu_image_),
- theme_provider_->GetRTLEnabledPixbufNamed(IDR_MENU_PAGE));
+ if (page_menu_button_.get()) {
+ gtk_image_set_from_pixbuf(GTK_IMAGE(page_menu_image_),
+ theme_provider_->GetRTLEnabledPixbufNamed(IDR_MENU_PAGE));
+ }
gtk_image_set_from_pixbuf(GTK_IMAGE(app_menu_image_),
theme_provider_->GetRTLEnabledPixbufNamed(IDR_MENU_CHROME));
@@ -785,7 +803,8 @@ bool BrowserToolbarGtk::ShouldOnlyShowLocation() const {
}
void BrowserToolbarGtk::PopupForButton(GtkWidget* button) {
- page_menu_->Cancel();
+ if (page_menu_.get())
+ page_menu_->Cancel();
app_menu_->Cancel();
gtk_chrome_button_set_paint_state(GTK_CHROME_BUTTON(button),
diff --git a/chrome/browser/gtk/browser_toolbar_gtk.h b/chrome/browser/gtk/browser_toolbar_gtk.h
index 26df479..73f889c 100644
--- a/chrome/browser/gtk/browser_toolbar_gtk.h
+++ b/chrome/browser/gtk/browser_toolbar_gtk.h
@@ -20,6 +20,7 @@
#include "chrome/browser/page_menu_model.h"
#include "chrome/browser/pref_member.h"
#include "chrome/browser/sync/profile_sync_service.h"
+#include "chrome/browser/wrench_menu_model.h"
#include "chrome/common/notification_observer.h"
#include "chrome/common/notification_registrar.h"
#include "chrome/common/owned_widget_gtk.h"
@@ -243,6 +244,7 @@ class BrowserToolbarGtk : public CommandUpdater::CommandObserver,
PageMenuModel page_menu_model_;
AppMenuModel app_menu_model_;
+ WrenchMenuModel wrench_menu_model_;
Browser* browser_;
BrowserWindowGtk* window_;
diff --git a/chrome/browser/wrench_menu_model.cc b/chrome/browser/wrench_menu_model.cc
new file mode 100644
index 0000000..9462af3
--- /dev/null
+++ b/chrome/browser/wrench_menu_model.cc
@@ -0,0 +1,174 @@
+// Copyright (c) 2010 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/wrench_menu_model.h"
+
+#include <algorithm>
+
+#include "app/l10n_util.h"
+#include "app/resource_bundle.h"
+#include "base/command_line.h"
+#include "chrome/app/chrome_dll_resource.h"
+#include "chrome/browser/browser.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/defaults.h"
+#include "chrome/browser/page_menu_model.h"
+#include "chrome/browser/profile.h"
+#include "chrome/browser/sync/profile_sync_service.h"
+#include "chrome/browser/sync/sync_ui_util.h"
+#include "chrome/browser/upgrade_detector.h"
+#include "chrome/common/chrome_switches.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
+#include "grit/theme_resources.h"
+
+////////////////////////////////////////////////////////////////////////////////
+// ToolsMenuModel
+
+ToolsMenuModel::ToolsMenuModel(menus::SimpleMenuModel::Delegate* delegate,
+ Browser* browser)
+ : SimpleMenuModel(delegate) {
+ Build(browser);
+}
+
+ToolsMenuModel::~ToolsMenuModel() {}
+
+void ToolsMenuModel::Build(Browser* browser) {
+ AddCheckItemWithStringId(IDC_SHOW_BOOKMARK_BAR, IDS_SHOW_BOOKMARK_BAR);
+
+ AddSeparator();
+
+ AddItemWithStringId(IDC_MANAGE_EXTENSIONS, IDS_SHOW_EXTENSIONS);
+ AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
+ AddItemWithStringId(IDC_CLEAR_BROWSING_DATA, IDS_CLEAR_BROWSING_DATA);
+
+ AddSeparator();
+
+ encoding_menu_model_.reset(new EncodingMenuModel(browser));
+ AddSubMenuWithStringId(IDC_ENCODING_MENU, IDS_ENCODING_MENU,
+ encoding_menu_model_.get());
+ AddItemWithStringId(IDC_VIEW_SOURCE, IDS_VIEW_SOURCE);
+ if (g_browser_process->have_inspector_files()) {
+ AddItemWithStringId(IDC_DEV_TOOLS, IDS_DEV_TOOLS);
+ AddItemWithStringId(IDC_DEV_TOOLS_CONSOLE, IDS_DEV_TOOLS_CONSOLE);
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// WrenchMenuModel
+
+WrenchMenuModel::WrenchMenuModel(menus::SimpleMenuModel::Delegate* delegate,
+ Browser* browser)
+ : menus::SimpleMenuModel(delegate),
+ browser_(browser) {
+ Build();
+}
+
+WrenchMenuModel::~WrenchMenuModel() {
+}
+
+bool WrenchMenuModel::IsLabelDynamicAt(int index) const {
+ return IsDynamicItem(index) || SimpleMenuModel::IsLabelDynamicAt(index);
+}
+
+string16 WrenchMenuModel::GetLabelAt(int index) const {
+ if (!IsDynamicItem(index))
+ return SimpleMenuModel::GetLabelAt(index);
+
+ int command_id = GetCommandIdAt(index);
+
+ switch (command_id) {
+ case IDC_ABOUT:
+ return GetAboutEntryMenuLabel();
+ case IDC_SYNC_BOOKMARKS:
+ return GetSyncMenuLabel();
+ default:
+ NOTREACHED();
+ return string16();
+ }
+}
+
+bool WrenchMenuModel::GetIconAt(int index, SkBitmap* icon) const {
+ if (GetCommandIdAt(index) == IDC_ABOUT &&
+ Singleton<UpgradeDetector>::get()->notify_upgrade()) {
+ // Show the exclamation point next to the menu item.
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ *icon = *rb.GetBitmapNamed(IDR_UPDATE_AVAILABLE);
+ return true;
+ }
+ return false;
+}
+
+void WrenchMenuModel::Build() {
+ AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB);
+ AddItemWithStringId(IDC_NEW_WINDOW, IDS_NEW_WINDOW);
+ AddItemWithStringId(IDC_NEW_INCOGNITO_WINDOW, IDS_NEW_INCOGNITO_WINDOW);
+
+ AddSeparator();
+ CreateCutCopyPaste();
+ AddSeparator();
+ CreateZoomFullscreen();
+ AddSeparator();
+ AddItemWithStringId(IDC_SAVE_PAGE, IDS_SAVE_PAGE);
+ AddItemWithStringId(IDC_FIND, IDS_FIND);
+ AddItemWithStringId(IDC_PRINT, IDS_PRINT);
+
+ tools_menu_model_.reset(new ToolsMenuModel(delegate(), browser_));
+ AddSubMenuWithStringId(IDC_ZOOM_MENU, IDS_TOOLS_MENU,
+ tools_menu_model_.get());
+
+ AddSeparator();
+ AddItemWithStringId(IDC_SHOW_BOOKMARK_MANAGER, IDS_BOOKMARK_MANAGER);
+ AddItemWithStringId(IDC_SHOW_HISTORY, IDS_SHOW_HISTORY);
+ AddItemWithStringId(IDC_SHOW_DOWNLOADS, IDS_SHOW_DOWNLOADS);
+ AddSeparator();
+
+#if defined(OS_MACOSX)
+ AddItemWithStringId(IDC_OPTIONS, IDS_PREFERENCES_MAC);
+#else
+ AddItemWithStringId(IDC_OPTIONS, IDS_OPTIONS);
+#endif
+
+ AddItemWithStringId(IDC_HELP_PAGE, IDS_HELP_PAGE);
+ if (browser_defaults::kShowExitMenuItem) {
+ AddSeparator();
+#if defined(OS_CHROMEOS)
+ AddItemWithStringId(IDC_EXIT, IDS_SIGN_OUT);
+#else
+ AddItemWithStringId(IDC_EXIT, IDS_EXIT);
+#endif
+ }
+}
+
+void WrenchMenuModel::CreateCutCopyPaste() {
+ AddItemWithStringId(IDC_CUT, IDS_CUT);
+ AddItemWithStringId(IDC_COPY, IDS_COPY);
+ AddItemWithStringId(IDC_PASTE, IDS_PASTE);
+}
+
+void WrenchMenuModel::CreateZoomFullscreen() {
+ AddItemWithStringId(IDC_ZOOM_PLUS, IDS_ZOOM_PLUS);
+ AddItemWithStringId(IDC_ZOOM_MINUS, IDS_ZOOM_MINUS);
+ AddItemWithStringId(IDC_FULLSCREEN, IDS_FULLSCREEN);
+}
+
+string16 WrenchMenuModel::GetSyncMenuLabel() const {
+ return sync_ui_util::GetSyncMenuLabel(
+ browser_->profile()->GetOriginalProfile()->GetProfileSyncService());
+}
+
+string16 WrenchMenuModel::GetAboutEntryMenuLabel() const {
+ if (Singleton<UpgradeDetector>::get()->notify_upgrade()) {
+ return l10n_util::GetStringFUTF16(
+ IDS_UPDATE_NOW, l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
+ }
+ return l10n_util::GetStringFUTF16(
+ IDS_ABOUT, l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
+}
+
+bool WrenchMenuModel::IsDynamicItem(int index) const {
+ int command_id = GetCommandIdAt(index);
+ return command_id == IDC_SYNC_BOOKMARKS ||
+ command_id == IDC_ABOUT;
+}
diff --git a/chrome/browser/wrench_menu_model.h b/chrome/browser/wrench_menu_model.h
new file mode 100644
index 0000000..d010518
--- /dev/null
+++ b/chrome/browser/wrench_menu_model.h
@@ -0,0 +1,74 @@
+// Copyright (c) 2010 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.
+
+#ifndef CHROME_BROWSER_WRENCH_MENU_MODEL_H_
+#define CHROME_BROWSER_WRENCH_MENU_MODEL_H_
+
+#include <set>
+#include <vector>
+
+#include "app/menus/simple_menu_model.h"
+#include "base/ref_counted.h"
+#include "base/scoped_ptr.h"
+#include "chrome/browser/user_data_manager.h"
+
+class Browser;
+class EncodingMenuModel;
+
+class ToolsMenuModel : public menus::SimpleMenuModel {
+ public:
+ explicit ToolsMenuModel(menus::SimpleMenuModel::Delegate* delegate,
+ Browser* browser);
+ virtual ~ToolsMenuModel();
+
+ private:
+ void Build(Browser* browser);
+
+ scoped_ptr<EncodingMenuModel> encoding_menu_model_;
+
+ DISALLOW_COPY_AND_ASSIGN(ToolsMenuModel);
+};
+
+// A menu model that builds the contents of the wrench menu.
+class WrenchMenuModel : public menus::SimpleMenuModel {
+ public:
+ explicit WrenchMenuModel(menus::SimpleMenuModel::Delegate* delegate,
+ Browser* browser);
+ virtual ~WrenchMenuModel();
+
+ // Overridden from menus::SimpleMenuModel:
+ virtual bool IsLabelDynamicAt(int index) const;
+ virtual string16 GetLabelAt(int index) const;
+ virtual bool HasIcons() const { return true; }
+ virtual bool GetIconAt(int index, SkBitmap* icon) const;
+
+ protected:
+ // Adds the cut/copy/paste items to the menu. The default implementation adds
+ // three real menu items, while platform specific subclasses add their own
+ // native monstrosities.
+ virtual void CreateCutCopyPaste();
+
+ // Adds the zoom/fullscreen items to the menu. Like CreateCutCopyPaste().
+ virtual void CreateZoomFullscreen();
+
+ private:
+ void Build();
+
+ string16 GetSyncMenuLabel() const;
+ string16 GetAboutEntryMenuLabel() const;
+ bool IsDynamicItem(int index) const;
+
+ // Profile names that are in profiles_menu_contents_. This is used to
+ // detect profile change.
+ std::vector<std::wstring> known_profiles_;
+
+ // Tools menu.
+ scoped_ptr<ToolsMenuModel> tools_menu_model_;
+
+ Browser* browser_; // weak
+
+ DISALLOW_COPY_AND_ASSIGN(WrenchMenuModel);
+};
+
+#endif // CHROME_BROWSER_WRENCH_MENU_MODEL_H_
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index a92e336..fc19b62 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -2612,6 +2612,8 @@
'browser/worker_host/worker_process_host.h',
'browser/worker_host/worker_service.cc',
'browser/worker_host/worker_service.h',
+ 'browser/wrench_menu_model.cc',
+ 'browser/wrench_menu_model.h',
'browser/zygote_host_linux.cc',
'browser/zygote_main_linux.cc',
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 967f14f..73f5c4c 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -558,6 +558,9 @@ const char kNaClStartupDialog[] = "nacl-startup-dialog";
// performance will be poor.
const char kNewTabPage[] = "new-tab-page";
+// Uses the new unified app menu instead of the old "page/app" split menus.
+const char kNewWrenchMenu[] = "new-wrench-menu";
+
// Disables the default browser check. Useful for UI/browser tests where we
// want to avoid having the default browser info-bar displayed.
const char kNoDefaultBrowserCheck[] = "no-default-browser-check";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 5852935..c479c5f 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -164,6 +164,7 @@ extern const char kNaClBrokerProcess[];
extern const char kNaClLoaderProcess[];
extern const char kNaClStartupDialog[];
extern const char kNewTabPage[];
+extern const char kNewWrenchMenu[];
extern const char kNoDefaultBrowserCheck[];
extern const char kNoEvents[];
extern const char kNoFirstRun[];