extension_install_prompt.cc revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_install_prompt.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/bundle_installer.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_install_ui.h" 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/extensions/extension_util.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/chromium_strings.h" 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/generated_resources.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/browser/extension_prefs.h" 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/browser/extension_util.h" 296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "extensions/browser/image_loader.h" 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/common/constants.h" 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/common/extension_icon_set.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/extension_resource.h" 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/feature_switch.h" 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest.h" 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest_constants.h" 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/common/manifest_handlers/icons_handler.h" 388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "extensions/common/permissions/permission_message_provider.h" 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "extensions/common/permissions/permission_set.h" 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/permissions/permissions_data.h" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/url_pattern.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::BundleInstaller; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using extensions::Manifest; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::PermissionSet; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const int kTitleIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, // The regular install prompt depends on what's being installed. 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_INLINE_INSTALL_PROMPT_TITLE, 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_INSTALL_PROMPT_TITLE, 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_RE_ENABLE_PROMPT_TITLE, 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PERMISSIONS_PROMPT_TITLE, 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_TITLE, 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_POST_INSTALL_PERMISSIONS_PROMPT_TITLE, 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_LAUNCH_APP_PROMPT_TITLE, 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, // The remote install prompt depends on what's being installed. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const int kHeadingIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_INSTALL_PROMPT_HEADING, 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, // Inline installs use the extension name. 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, // Heading for bundle installs depends on the bundle contents. 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_RE_ENABLE_PROMPT_HEADING, 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PERMISSIONS_PROMPT_HEADING, 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, // External installs use different strings for extensions/apps. 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_POST_INSTALL_PERMISSIONS_PROMPT_HEADING, 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_LAUNCH_APP_PROMPT_HEADING, 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_REMOTE_INSTALL_PROMPT_HEADING, 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static const int kButtons[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL, 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL, 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL, 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL, 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL, 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL, 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::DIALOG_BUTTON_CANCEL, 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL, 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const int kAcceptButtonIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_INSTALL_BUTTON, 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_INSTALL_BUTTON, 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_INSTALL_BUTTON, 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_RE_ENABLE_BUTTON, 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_PERMISSIONS_BUTTON, 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, // External installs use different strings for extensions/apps. 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_PERMISSIONS_CLEAR_RETAINED_FILES_BUTTON, 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_LAUNCH_BUTTON, 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_REMOTE_INSTALL_BUTTON, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const int kAbortButtonIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, // These all use the platform's default cancel label. 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_PERMISSIONS_ABORT_BUTTON, 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ABORT_BUTTON, 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_CLOSE, 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, // Platform dependent cancel button. 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 0, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)static const int 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kPermissionsHeaderIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_THESE_WILL_HAVE_ACCESS_TO, 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_WILL_NOW_HAVE_ACCESS_TO, 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_WANTS_ACCESS_TO, 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_CAN_ACCESS, 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns bitmap for the default icon with size equal to the default icon's 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// pixel size under maximal supported scale factor. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SkBitmap GetDefaultIconBitmapForMaxScaleFactor(bool is_app) { 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::ImageSkia& image = is_app ? 1265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu extensions::util::GetDefaultAppIcon() : 1275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu extensions::util::GetDefaultExtensionIcon(); 12868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return image.GetRepresentation( 12968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::ImageSkia::GetMaxSupportedScale()).sk_bitmap(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If auto confirm is enabled then posts a task to proceed with or cancel the 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// install and returns true. Otherwise returns false. 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AutoConfirmPrompt(ExtensionInstallPrompt::Delegate* delegate) { 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switch (ExtensionInstallPrompt::g_auto_confirm_for_tests) { 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case ExtensionInstallPrompt::NONE: 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return false; 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // We use PostTask instead of calling the delegate directly here, because in 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // the real implementations it's highly likely the message loop will be 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // pumping a few times before the user clicks accept or cancel. 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case ExtensionInstallPrompt::ACCEPT: 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FROM_HERE, 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Bind(&ExtensionInstallPrompt::Delegate::InstallUIProceed, 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Unretained(delegate))); 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return true; 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case ExtensionInstallPrompt::CANCEL: 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FROM_HERE, 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Bind(&ExtensionInstallPrompt::Delegate::InstallUIAbort, 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Unretained(delegate), 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) true)); 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return true; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile* ProfileForWebContents(content::WebContents* web_contents) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!web_contents) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Profile::FromBrowserContext(web_contents->GetBrowserContext()); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::NativeWindow NativeWindowForWebContents(content::WebContents* contents) { 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!contents) 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return contents->GetTopLevelNativeWindow(); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ExtensionInstallPrompt::AutoConfirmForTests 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ExtensionInstallPrompt::g_auto_confirm_for_tests = ExtensionInstallPrompt::NONE; 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// This should match the PromptType enum. 1806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)std::string ExtensionInstallPrompt::PromptTypeToString(PromptType type) { 1816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) switch (type) { 1826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ExtensionInstallPrompt::INSTALL_PROMPT: 1836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return "INSTALL_PROMPT"; 1846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ExtensionInstallPrompt::INLINE_INSTALL_PROMPT: 1856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return "INLINE_INSTALL_PROMPT"; 1866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ExtensionInstallPrompt::BUNDLE_INSTALL_PROMPT: 1876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return "BUNDLE_INSTALL_PROMPT"; 1886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ExtensionInstallPrompt::RE_ENABLE_PROMPT: 1896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return "RE_ENABLE_PROMPT"; 1906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ExtensionInstallPrompt::PERMISSIONS_PROMPT: 1916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return "PERMISSIONS_PROMPT"; 1926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ExtensionInstallPrompt::EXTERNAL_INSTALL_PROMPT: 1936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return "EXTERNAL_INSTALL_PROMPT"; 1946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ExtensionInstallPrompt::POST_INSTALL_PERMISSIONS_PROMPT: 1956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return "POST_INSTALL_PERMISSIONS_PROMPT"; 1966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ExtensionInstallPrompt::LAUNCH_PROMPT: 1976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return "LAUNCH_PROMPT"; 1986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ExtensionInstallPrompt::REMOTE_INSTALL_PROMPT: 1996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return "REMOTE_INSTALL_PROMPT"; 2006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ExtensionInstallPrompt::UNSET_PROMPT_TYPE: 2016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case ExtensionInstallPrompt::NUM_PROMPT_TYPES: 2026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) break; 2036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 2046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return "OTHER"; 2056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 2066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ExtensionInstallPrompt::Prompt::Prompt(PromptType type) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : type_(type), 209424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) is_showing_details_for_retained_files_(false), 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_(NULL), 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bundle_(NULL), 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) average_rating_(0.0), 213a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) rating_count_(0), 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) show_user_count_(false), 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) has_webstore_data_(false) { 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionInstallPrompt::Prompt::~Prompt() { 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::Prompt::SetPermissions( 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<base::string16>& permissions) { 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permissions_ = permissions; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid ExtensionInstallPrompt::Prompt::SetPermissionsDetails( 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<base::string16>& details) { 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch details_ = details; 229424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) is_showing_details_for_permissions_.clear(); 230424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) for (size_t i = 0; i < details.size(); ++i) 231424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) is_showing_details_for_permissions_.push_back(false); 232424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 233424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 234424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void ExtensionInstallPrompt::Prompt::SetIsShowingDetails( 235424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DetailsType type, 236424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) size_t index, 237424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool is_showing_details) { 238424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) switch (type) { 239424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case PERMISSIONS_DETAILS: 240424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) is_showing_details_for_permissions_[index] = is_showing_details; 241424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) break; 242424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case RETAINED_FILES_DETAILS: 243424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) is_showing_details_for_retained_files_ = is_showing_details; 244424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) break; 245424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 2467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ExtensionInstallPrompt::Prompt::SetWebstoreData( 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& localized_user_count, 250a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool show_user_count, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double average_rating, 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int rating_count) { 2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHECK(type_ == INLINE_INSTALL_PROMPT || type_ == EXTERNAL_INSTALL_PROMPT); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localized_user_count_ = localized_user_count; 255a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) show_user_count_ = show_user_count; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) average_rating_ = average_rating; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rating_count_ = rating_count; 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) has_webstore_data_ = true; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ExtensionInstallPrompt::Prompt::GetDialogTitle() const { 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int resource_id = kTitleIds[type_]; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type_ == INSTALL_PROMPT) { 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension_->is_app()) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_id = IDS_EXTENSION_INSTALL_APP_PROMPT_TITLE; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (extension_->is_theme()) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_id = IDS_EXTENSION_INSTALL_THEME_PROMPT_TITLE; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_id = IDS_EXTENSION_INSTALL_EXTENSION_PROMPT_TITLE; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (type_ == EXTERNAL_INSTALL_PROMPT) { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringFUTF16( 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) resource_id, base::UTF8ToUTF16(extension_->name())); 274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else if (type_ == REMOTE_INSTALL_PROMPT) { 275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (extension_->is_app()) 276cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_id = IDS_EXTENSION_REMOTE_INSTALL_APP_PROMPT_TITLE; 277cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) else 278cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) resource_id = IDS_EXTENSION_REMOTE_INSTALL_EXTENSION_PROMPT_TITLE; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(resource_id); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ExtensionInstallPrompt::Prompt::GetHeading() const { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type_ == INLINE_INSTALL_PROMPT) { 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base::UTF8ToUTF16(extension_->name()); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (type_ == BUNDLE_INSTALL_PROMPT) { 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return bundle_->GetHeadingTextFor(BundleInstaller::Item::STATE_PENDING); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (type_ == EXTERNAL_INSTALL_PROMPT) { 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int resource_id = -1; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension_->is_app()) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_HEADING_APP; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (extension_->is_theme()) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_HEADING_THEME; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_HEADING_EXTENSION; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(resource_id); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringFUTF16( 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kHeadingIds[type_], base::UTF8ToUTF16(extension_->name())); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int ExtensionInstallPrompt::Prompt::GetDialogButtons() const { 305868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (type_ == POST_INSTALL_PERMISSIONS_PROMPT && 306868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ShouldDisplayRevokeFilesButton()) { 307868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return kButtons[type_] | ui::DIALOG_BUTTON_OK; 308868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 309868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kButtons[type_]; 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ExtensionInstallPrompt::Prompt::ShouldShowExplanationText() const { 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return type_ == INSTALL_PROMPT && 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_->is_extension() && experiment_ && experiment_->text_only(); 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ExtensionInstallPrompt::Prompt::HasAcceptButtonLabel() const { 319868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (kAcceptButtonIds[type_] == 0) 320868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return false; 321868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 322868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (type_ == POST_INSTALL_PERMISSIONS_PROMPT) 323868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return ShouldDisplayRevokeFilesButton(); 324868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 325868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return true; 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ExtensionInstallPrompt::Prompt::GetAcceptButtonLabel() const { 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type_ == EXTERNAL_INSTALL_PROMPT) { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = -1; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension_->is_app()) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ACCEPT_BUTTON_APP; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (extension_->is_theme()) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ACCEPT_BUTTON_THEME; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ACCEPT_BUTTON_EXTENSION; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(id); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (ShouldShowExplanationText()) 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return experiment_->GetOkButtonText(); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(kAcceptButtonIds[type_]); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ExtensionInstallPrompt::Prompt::HasAbortButtonLabel() const { 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (ShouldShowExplanationText()) 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kAbortButtonIds[type_] > 0; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ExtensionInstallPrompt::Prompt::GetAbortButtonLabel() const { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(HasAbortButtonLabel()); 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (ShouldShowExplanationText()) 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return experiment_->GetCancelButtonText(); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(kAbortButtonIds[type_]); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsHeading() const { 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(kPermissionsHeaderIds[type_]); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ExtensionInstallPrompt::Prompt::GetRetainedFilesHeading() const { 36268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int kRetainedFilesMessageIDs[6] = { 36368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) IDS_EXTENSION_PROMPT_RETAINED_FILES_DEFAULT, 36468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) IDS_EXTENSION_PROMPT_RETAINED_FILE_SINGULAR, 36568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) IDS_EXTENSION_PROMPT_RETAINED_FILES_ZERO, 36668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) IDS_EXTENSION_PROMPT_RETAINED_FILES_TWO, 36768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) IDS_EXTENSION_PROMPT_RETAINED_FILES_FEW, 36868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) IDS_EXTENSION_PROMPT_RETAINED_FILES_MANY, 36968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) }; 37068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::vector<int> message_ids; 37168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) for (size_t i = 0; i < arraysize(kRetainedFilesMessageIDs); i++) { 37268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) message_ids.push_back(kRetainedFilesMessageIDs[i]); 37368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 37468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return l10n_util::GetPluralStringFUTF16(message_ids, GetRetainedFileCount()); 3757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 3767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool ExtensionInstallPrompt::Prompt::ShouldShowPermissions() const { 3787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return GetPermissionCount() > 0 || type_ == POST_INSTALL_PERMISSIONS_PROMPT; 3797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::Prompt::AppendRatingStars( 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StarAppender appender, void* data) const { 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(appender); 3845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHECK(type_ == INLINE_INSTALL_PROMPT || type_ == EXTERNAL_INSTALL_PROMPT); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int rating_integer = floor(average_rating_); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double rating_fractional = average_rating_ - rating_integer; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rating_fractional > 0.66) { 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rating_integer++; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rating_fractional < 0.33 || rating_fractional > 0.66) { 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rating_fractional = 0; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < rating_integer; i++) { 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) appender(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_ON), data); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rating_fractional) { 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) appender(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_HALF_LEFT), data); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; i < kMaxExtensionRating; i++) { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) appender(rb.GetImageSkiaNamed(IDR_EXTENSIONS_RATING_STAR_OFF), data); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ExtensionInstallPrompt::Prompt::GetRatingCount() const { 4115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHECK(type_ == INLINE_INSTALL_PROMPT || type_ == EXTERNAL_INSTALL_PROMPT); 4121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return l10n_util::GetStringFUTF16(IDS_EXTENSION_RATING_COUNT, 4131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::IntToString16(rating_count_)); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ExtensionInstallPrompt::Prompt::GetUserCount() const { 4175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CHECK(type_ == INLINE_INSTALL_PROMPT || type_ == EXTERNAL_INSTALL_PROMPT); 418a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 419a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (show_user_count_) { 4201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return l10n_util::GetStringFUTF16(IDS_EXTENSION_USER_COUNT, 4211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::UTF8ToUTF16(localized_user_count_)); 422a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 4231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return base::string16(); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t ExtensionInstallPrompt::Prompt::GetPermissionCount() const { 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return permissions_.size(); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochsize_t ExtensionInstallPrompt::Prompt::GetPermissionsDetailsCount() const { 4317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return details_.size(); 4327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 4337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ExtensionInstallPrompt::Prompt::GetPermission(size_t index) 4355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const { 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK_LT(index, permissions_.size()); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return permissions_[index]; 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsDetails( 4417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch size_t index) const { 4427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CHECK_LT(index, details_.size()); 4437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return details_[index]; 4447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 4457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 446424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)bool ExtensionInstallPrompt::Prompt::GetIsShowingDetails( 447424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DetailsType type, size_t index) const { 448424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) switch (type) { 449424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case PERMISSIONS_DETAILS: 450424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CHECK_LT(index, is_showing_details_for_permissions_.size()); 451424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return is_showing_details_for_permissions_[index]; 452424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) case RETAINED_FILES_DETAILS: 453424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return is_showing_details_for_retained_files_; 454424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 455424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return false; 456424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 457424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 458868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)size_t ExtensionInstallPrompt::Prompt::GetRetainedFileCount() const { 459868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return retained_files_.size(); 460868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 461868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 4625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ExtensionInstallPrompt::Prompt::GetRetainedFile(size_t index) 4635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const { 464868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CHECK_LT(index, retained_files_.size()); 4651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return retained_files_[index].AsUTF16Unsafe(); 466868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 467868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 468868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)bool ExtensionInstallPrompt::Prompt::ShouldDisplayRevokeFilesButton() const { 469868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return !retained_files_.empty(); 470868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 471868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ExtensionInstallPrompt::ShowParams::ShowParams(content::WebContents* contents) 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : parent_web_contents(contents), 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parent_window(NativeWindowForWebContents(contents)), 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigator(contents) { 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ExtensionInstallPrompt::ShowParams::ShowParams( 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::NativeWindow window, 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::PageNavigator* navigator) 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : parent_web_contents(NULL), 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parent_window(window), 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigator(navigator) { 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<Extension> 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionInstallPrompt::GetLocalizedExtensionForDisplay( 4895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* manifest, 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int flags, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& id, 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& localized_name, 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& localized_description, 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* error) { 4955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> localized_manifest; 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!localized_name.empty() || !localized_description.empty()) { 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localized_manifest.reset(manifest->DeepCopy()); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!localized_name.empty()) { 4993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) localized_manifest->SetString(extensions::manifest_keys::kName, 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localized_name); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!localized_description.empty()) { 5033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) localized_manifest->SetString(extensions::manifest_keys::kDescription, 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localized_description); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Extension::Create( 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(), 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Manifest::INTERNAL, 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localized_manifest.get() ? *localized_manifest.get() : *manifest, 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flags, 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id, 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ExtensionInstallPrompt::ExtensionInstallPrompt(content::WebContents* contents) 518cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : ui_loop_(base::MessageLoop::current()), 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_(NULL), 5205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bundle_(NULL), 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) install_ui_(ExtensionInstallUI::Create(ProfileForWebContents(contents))), 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_params_(contents), 523f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) delegate_(NULL) { 524f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ExtensionInstallPrompt::ExtensionInstallPrompt( 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile, 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::NativeWindow native_window, 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::PageNavigator* navigator) 530cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : ui_loop_(base::MessageLoop::current()), 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extension_(NULL), 5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bundle_(NULL), 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install_ui_(ExtensionInstallUI::Create(profile)), 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_params_(native_window, navigator), 535f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) delegate_(NULL) { 536f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionInstallPrompt::~ExtensionInstallPrompt() { 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::ConfirmBundleInstall( 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::BundleInstaller* bundle, 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PermissionSet* permissions) { 54490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(ui_loop_ == base::MessageLoop::current()); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bundle_ = bundle; 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permissions_ = permissions; 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = bundle; 548f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prompt_ = new Prompt(BUNDLE_INSTALL_PROMPT); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ShowConfirmation(); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::ConfirmStandaloneInstall( 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension, 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkBitmap* icon, 557f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<Prompt> prompt) { 55890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(ui_loop_ == base::MessageLoop::current()); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_ = extension; 56046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) permissions_ = extension->permissions_data()->active_permissions(); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = delegate; 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prompt_ = prompt; 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetIcon(icon); 56558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ShowConfirmation(); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::ConfirmWebstoreInstall( 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension, 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SkBitmap* icon, 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ShowDialogCallback& show_dialog_callback) { 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SetIcon requires |extension_| to be set. ConfirmInstall will setup the 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // remaining fields. 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_ = extension; 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetIcon(icon); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConfirmInstall(delegate, extension, show_dialog_callback); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::ConfirmInstall( 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension, 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ShowDialogCallback& show_dialog_callback) { 58490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(ui_loop_ == base::MessageLoop::current()); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_ = extension; 58646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) permissions_ = extension->permissions_data()->active_permissions(); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = delegate; 588f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prompt_ = new Prompt(INSTALL_PROMPT); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_dialog_callback_ = show_dialog_callback; 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We special-case themes to not show any confirm UI. Instead they are 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // immediately installed, and then we show an infobar (see OnInstallSuccess) 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to allow the user to revert if they don't like it. 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We don't do this in the case where off-store extension installs are 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled because in that case, we don't show the dangerous download UI, so 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we need the UI confirmation. 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension->is_theme()) { 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension->from_webstore() || 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::FeatureSwitch::easy_off_store_install()->IsEnabled()) { 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate->InstallUIProceed(); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadImageIfNeeded(); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::ConfirmReEnable(Delegate* delegate, 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension) { 61190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(ui_loop_ == base::MessageLoop::current()); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_ = extension; 61346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) permissions_ = extension->permissions_data()->active_permissions(); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = delegate; 615cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_remote_install = 616cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) install_ui_->profile() && 617cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) extensions::ExtensionPrefs::Get(install_ui_->profile())->HasDisableReason( 618cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) extension->id(), extensions::Extension::DISABLE_REMOTE_INSTALL); 619cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_ephemeral = 620cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) extensions::util::IsEphemeralApp(extension->id(), install_ui_->profile()); 621f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 622f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PromptType type = UNSET_PROMPT_TYPE; 623cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (is_ephemeral) 624f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) type = LAUNCH_PROMPT; 625cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) else if (is_remote_install) 626f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) type = REMOTE_INSTALL_PROMPT; 627cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) else 628f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) type = RE_ENABLE_PROMPT; 629f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prompt_ = new Prompt(type); 630f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadImageIfNeeded(); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::ConfirmExternalInstall( 635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Delegate* delegate, 636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Extension* extension, 6375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ShowDialogCallback& show_dialog_callback, 638f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<Prompt> prompt) { 63990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(ui_loop_ == base::MessageLoop::current()); 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_ = extension; 64146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) permissions_ = extension->permissions_data()->active_permissions(); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = delegate; 6435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prompt_ = prompt; 644c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) show_dialog_callback_ = show_dialog_callback; 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadImageIfNeeded(); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::ConfirmPermissions( 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension, 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PermissionSet* permissions) { 65390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(ui_loop_ == base::MessageLoop::current()); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_ = extension; 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permissions_ = permissions; 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = delegate; 657f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prompt_ = new Prompt(PERMISSIONS_PROMPT); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadImageIfNeeded(); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 662868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void ExtensionInstallPrompt::ReviewPermissions( 663868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Delegate* delegate, 664868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const Extension* extension, 665868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const std::vector<base::FilePath>& retained_file_paths) { 66690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(ui_loop_ == base::MessageLoop::current()); 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extension_ = extension; 66846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) permissions_ = extension->permissions_data()->active_permissions(); 669f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prompt_ = new Prompt(POST_INSTALL_PERMISSIONS_PROMPT); 670f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prompt_->set_retained_files(retained_file_paths); 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_ = delegate; 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LoadImageIfNeeded(); 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::OnInstallSuccess(const Extension* extension, 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkBitmap* icon) { 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_ = extension; 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetIcon(icon); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) install_ui_->OnInstallSuccess(extension, &icon_); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::OnInstallFailure( 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::CrxInstallerError& error) { 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) install_ui_->OnInstallFailure(error); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::SetIcon(const SkBitmap* image) { 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (image) 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon_ = *image; 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon_ = SkBitmap(); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (icon_.empty()) { 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Let's set default icon bitmap whose size is equal to the default icon's 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pixel size under maximal supported scale factor. If the bitmap is larger 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // than the one we need, it will be scaled down by the ui code. 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon_ = GetDefaultIconBitmapForMaxScaleFactor(extension_->is_app()); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ExtensionInstallPrompt::OnImageLoaded(const gfx::Image& image) { 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetIcon(image.IsEmpty() ? NULL : image.ToSkBitmap()); 70458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ShowConfirmation(); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::LoadImageIfNeeded() { 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bundle install prompts do not have an icon. 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Also |install_ui_.profile()| can be NULL in unit tests. 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!icon_.empty() || !install_ui_->profile()) { 71158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ShowConfirmation(); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionResource image = extensions::IconsInfo::GetIconResource( 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extension_, 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extension_misc::EXTENSION_ICON_LARGE, 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionIconSet::MATCH_BIGGER); 71946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 72046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Load the image asynchronously. The response will be sent to OnImageLoaded. 72146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extensions::ImageLoader* loader = 72246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extensions::ImageLoader::Get(install_ui_->profile()); 72346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 72446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::vector<extensions::ImageLoader::ImageRepresentation> images_list; 72546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) images_list.push_back(extensions::ImageLoader::ImageRepresentation( 72646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) image, 72746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extensions::ImageLoader::ImageRepresentation::NEVER_RESIZE, 72846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::Size(), 72946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui::SCALE_FACTOR_100P)); 73046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) loader->LoadImagesAsync( 73146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extension_, 73246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) images_list, 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&ExtensionInstallPrompt::OnImageLoaded, AsWeakPtr())); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionInstallPrompt::ShowConfirmation() { 737f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (prompt_->type() == INSTALL_PROMPT) 738f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prompt_->set_experiment(ExtensionInstallPromptExperiment::Find()); 7395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) else 740f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prompt_->set_experiment(ExtensionInstallPromptExperiment::ControlGroup()); 7415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (permissions_.get() && 7436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) (!extension_ || 7446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) !extensions::PermissionsData::ShouldSkipPermissionWarnings( 7456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extension_->id()))) { 7466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Manifest::Type type = 7476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extension_ ? extension_->GetType() : Manifest::TYPE_UNKNOWN; 7486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const extensions::PermissionMessageProvider* message_provider = 7496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extensions::PermissionMessageProvider::Get(); 7506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) prompt_->SetPermissions( 7516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) message_provider->GetWarningMessages(permissions_, type)); 7526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) prompt_->SetPermissionsDetails( 7536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) message_provider->GetWarningMessagesDetails(permissions_, type)); 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 756f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switch (prompt_->type()) { 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case PERMISSIONS_PROMPT: 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case RE_ENABLE_PROMPT: 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case INLINE_INSTALL_PROMPT: 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case EXTERNAL_INSTALL_PROMPT: 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case INSTALL_PROMPT: 7621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case LAUNCH_PROMPT: 763cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case POST_INSTALL_PERMISSIONS_PROMPT: 764cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case REMOTE_INSTALL_PROMPT: { 765f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prompt_->set_extension(extension_); 766f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prompt_->set_icon(gfx::Image::CreateFrom1xBitmap(icon_)); 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case BUNDLE_INSTALL_PROMPT: { 770f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prompt_->set_bundle(bundle_); 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "Unknown message"; 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (AutoConfirmPrompt(delegate_)) 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (show_dialog_callback_.is_null()) 7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetDefaultShowDialogCallback().Run(show_params_, delegate_, prompt_); 7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_dialog_callback_.Run(show_params_, delegate_, prompt_); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 786