| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h" | 5 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "chrome/browser/extensions/extension_prefs.h" | 23 #include "chrome/browser/extensions/extension_prefs.h" |
| 24 #include "chrome/browser/extensions/extension_service.h" | 24 #include "chrome/browser/extensions/extension_service.h" |
| 25 #include "chrome/browser/prefs/pref_service.h" | 25 #include "chrome/browser/prefs/pref_service.h" |
| 26 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 26 #include "chrome/browser/prefs/scoped_user_pref_update.h" |
| 27 #include "chrome/browser/profiles/profile.h" | 27 #include "chrome/browser/profiles/profile.h" |
| 28 #include "chrome/browser/ui/browser.h" | 28 #include "chrome/browser/ui/browser.h" |
| 29 #include "chrome/browser/ui/browser_list.h" | 29 #include "chrome/browser/ui/browser_list.h" |
| 30 #include "chrome/browser/ui/browser_window.h" | 30 #include "chrome/browser/ui/browser_window.h" |
| 31 #include "chrome/browser/ui/webui/extension_icon_source.h" | 31 #include "chrome/browser/ui/webui/extension_icon_source.h" |
| 32 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h" | 32 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h" |
| 33 #include "chrome/browser/ui/webui/web_ui_util.h" |
| 33 #include "chrome/common/chrome_notification_types.h" | 34 #include "chrome/common/chrome_notification_types.h" |
| 34 #include "chrome/common/extensions/extension.h" | 35 #include "chrome/common/extensions/extension.h" |
| 35 #include "chrome/common/extensions/extension_constants.h" | 36 #include "chrome/common/extensions/extension_constants.h" |
| 36 #include "chrome/common/extensions/extension_icon_set.h" | 37 #include "chrome/common/extensions/extension_icon_set.h" |
| 37 #include "chrome/common/extensions/extension_resource.h" | 38 #include "chrome/common/extensions/extension_resource.h" |
| 38 #include "chrome/common/favicon_url.h" | 39 #include "chrome/common/favicon_url.h" |
| 39 #include "chrome/common/pref_names.h" | 40 #include "chrome/common/pref_names.h" |
| 40 #include "chrome/common/url_constants.h" | 41 #include "chrome/common/url_constants.h" |
| 41 #include "chrome/common/web_apps.h" | 42 #include "chrome/common/web_apps.h" |
| 42 #include "content/browser/disposition_utils.h" | |
| 43 #include "content/browser/tab_contents/tab_contents.h" | 43 #include "content/browser/tab_contents/tab_contents.h" |
| 44 #include "content/public/browser/notification_service.h" | 44 #include "content/public/browser/notification_service.h" |
| 45 #include "googleurl/src/gurl.h" | 45 #include "googleurl/src/gurl.h" |
| 46 #include "grit/browser_resources.h" | 46 #include "grit/browser_resources.h" |
| 47 #include "grit/generated_resources.h" | 47 #include "grit/generated_resources.h" |
| 48 #include "net/base/escape.h" | 48 #include "net/base/escape.h" |
| 49 #include "ui/base/animation/animation.h" | 49 #include "ui/base/animation/animation.h" |
| 50 #include "ui/base/l10n/l10n_util.h" | 50 #include "ui/base/l10n/l10n_util.h" |
| 51 #include "ui/gfx/codec/png_codec.h" | 51 #include "ui/gfx/codec/png_codec.h" |
| 52 #include "webkit/glue/window_open_disposition.h" | |
| 53 | 52 |
| 54 namespace { | 53 namespace { |
| 55 | 54 |
| 56 const net::UnescapeRule::Type kUnescapeRules = | 55 const net::UnescapeRule::Type kUnescapeRules = |
| 57 net::UnescapeRule::NORMAL | net::UnescapeRule::URL_SPECIAL_CHARS; | 56 net::UnescapeRule::NORMAL | net::UnescapeRule::URL_SPECIAL_CHARS; |
| 58 | 57 |
| 59 extension_misc::AppLaunchBucket ParseLaunchSource( | 58 extension_misc::AppLaunchBucket ParseLaunchSource( |
| 60 const std::string& launch_source) { | 59 const std::string& launch_source) { |
| 61 int bucket_num = extension_misc::APP_LAUNCH_BUCKET_INVALID; | 60 int bucket_num = extension_misc::APP_LAUNCH_BUCKET_INVALID; |
| 62 base::StringToInt(launch_source, &bucket_num); | 61 base::StringToInt(launch_source, &bucket_num); |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 content::Source<CrxInstaller>(NULL)); | 501 content::Source<CrxInstaller>(NULL)); |
| 503 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOAD_ERROR, | 502 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOAD_ERROR, |
| 504 content::Source<Profile>(profile)); | 503 content::Source<Profile>(profile)); |
| 505 } | 504 } |
| 506 | 505 |
| 507 has_loaded_apps_ = true; | 506 has_loaded_apps_ = true; |
| 508 } | 507 } |
| 509 | 508 |
| 510 void AppLauncherHandler::HandleLaunchApp(const ListValue* args) { | 509 void AppLauncherHandler::HandleLaunchApp(const ListValue* args) { |
| 511 std::string extension_id; | 510 std::string extension_id; |
| 511 CHECK(args->GetString(0, &extension_id)); |
| 512 double source = -1.0; | 512 double source = -1.0; |
| 513 CHECK(args->GetDouble(1, &source)); |
| 513 std::string url; | 514 std::string url; |
| 514 bool alt_key = false; | |
| 515 bool ctrl_key = false; | |
| 516 bool meta_key = false; | |
| 517 bool shift_key = false; | |
| 518 double button = 0.0; | |
| 519 | |
| 520 CHECK(args->GetString(0, &extension_id)); | |
| 521 CHECK(args->GetDouble(1, &source)); | |
| 522 if (args->GetSize() > 2) | 515 if (args->GetSize() > 2) |
| 523 CHECK(args->GetString(2, &url)); | 516 CHECK(args->GetString(2, &url)); |
| 524 if (args->GetSize() > 3) { | |
| 525 CHECK(args->GetBoolean(3, &alt_key)); | |
| 526 CHECK(args->GetBoolean(4, &ctrl_key)); | |
| 527 CHECK(args->GetBoolean(5, &meta_key)); | |
| 528 CHECK(args->GetBoolean(6, &shift_key)); | |
| 529 CHECK(args->GetDouble(7, &button)); | |
| 530 } | |
| 531 | 517 |
| 532 extension_misc::AppLaunchBucket launch_bucket = | 518 extension_misc::AppLaunchBucket launch_bucket = |
| 533 static_cast<extension_misc::AppLaunchBucket>( | 519 static_cast<extension_misc::AppLaunchBucket>( |
| 534 static_cast<int>(source)); | 520 static_cast<int>(source)); |
| 535 CHECK(launch_bucket >= 0 && | 521 CHECK(launch_bucket >= 0 && |
| 536 launch_bucket < extension_misc::APP_LAUNCH_BUCKET_BOUNDARY); | 522 launch_bucket < extension_misc::APP_LAUNCH_BUCKET_BOUNDARY); |
| 537 | 523 |
| 538 const Extension* extension = | 524 const Extension* extension = |
| 539 extension_service_->GetExtensionById(extension_id, false); | 525 extension_service_->GetExtensionById(extension_id, false); |
| 540 | 526 |
| 541 // Prompt the user to re-enable the application if disabled. | 527 // Prompt the user to re-enable the application if disabled. |
| 542 if (!extension) { | 528 if (!extension) { |
| 543 PromptToEnableApp(extension_id); | 529 PromptToEnableApp(extension_id); |
| 544 return; | 530 return; |
| 545 } | 531 } |
| 546 | 532 |
| 547 Profile* profile = extension_service_->profile(); | 533 Profile* profile = extension_service_->profile(); |
| 548 | 534 |
| 549 // If the user pressed special keys when clicking, override the saved | 535 WindowOpenDisposition disposition = args->GetSize() > 3 ? |
| 550 // preference for launch container. | 536 web_ui_util::GetDispositionFromClick(args, 3) : CURRENT_TAB; |
| 551 bool middle_button = (button == 1.0); | |
| 552 WindowOpenDisposition disposition = | |
| 553 disposition_utils::DispositionFromClick(middle_button, alt_key, | |
| 554 ctrl_key, meta_key, shift_key); | |
| 555 | |
| 556 if (extension_id != extension_misc::kWebStoreAppId) { | 537 if (extension_id != extension_misc::kWebStoreAppId) { |
| 557 RecordAppLaunchByID(launch_bucket); | 538 RecordAppLaunchByID(launch_bucket); |
| 558 extension_service_->apps_promo()->ExpireDefaultApps(); | 539 extension_service_->apps_promo()->ExpireDefaultApps(); |
| 559 } else if (NewTabUI::NTP4Enabled()) { | 540 } else if (NewTabUI::NTP4Enabled()) { |
| 560 RecordWebStoreLaunch(url.find("chrome-ntp-promo") != std::string::npos); | 541 RecordWebStoreLaunch(url.find("chrome-ntp-promo") != std::string::npos); |
| 561 } | 542 } |
| 562 | 543 |
| 563 if (disposition == NEW_FOREGROUND_TAB || disposition == NEW_BACKGROUND_TAB) { | 544 if (disposition == NEW_FOREGROUND_TAB || disposition == NEW_BACKGROUND_TAB) { |
| 564 // TODO(jamescook): Proper support for background tabs. | 545 // TODO(jamescook): Proper support for background tabs. |
| 565 Browser::OpenApplication( | 546 Browser::OpenApplication( |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 995 | 976 |
| 996 void AppLauncherHandler::UninstallDefaultApps() { | 977 void AppLauncherHandler::UninstallDefaultApps() { |
| 997 AppsPromo* apps_promo = extension_service_->apps_promo(); | 978 AppsPromo* apps_promo = extension_service_->apps_promo(); |
| 998 const ExtensionIdSet& app_ids = apps_promo->old_default_apps(); | 979 const ExtensionIdSet& app_ids = apps_promo->old_default_apps(); |
| 999 for (ExtensionIdSet::const_iterator iter = app_ids.begin(); | 980 for (ExtensionIdSet::const_iterator iter = app_ids.begin(); |
| 1000 iter != app_ids.end(); ++iter) { | 981 iter != app_ids.end(); ++iter) { |
| 1001 if (extension_service_->GetExtensionById(*iter, true)) | 982 if (extension_service_->GetExtensionById(*iter, true)) |
| 1002 extension_service_->UninstallExtension(*iter, false, NULL); | 983 extension_service_->UninstallExtension(*iter, false, NULL); |
| 1003 } | 984 } |
| 1004 } | 985 } |
| OLD | NEW |