| Index: chrome/browser/ui/webui/ntp/app_launcher_handler.cc
 | 
| diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
 | 
| index a8c2df64327b99da934c88f7f951944c1b28fd5f..0e2b5bede13f0a449e4b3e963808aac13416d65c 100644
 | 
| --- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
 | 
| +++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
 | 
| @@ -67,6 +67,7 @@
 | 
|  #include "extensions/common/extension.h"
 | 
|  #include "extensions/common/extension_icon_set.h"
 | 
|  #include "extensions/common/extension_set.h"
 | 
| +#include "net/base/url_util.h"
 | 
|  #include "ui/base/l10n/l10n_util.h"
 | 
|  #include "ui/base/webui/web_ui_util.h"
 | 
|  #include "url/gurl.h"
 | 
| @@ -482,9 +483,7 @@ void AppLauncherHandler::HandleLaunchApp(const base::ListValue* args) {
 | 
|    CHECK(args->GetString(0, &extension_id));
 | 
|    double source = -1.0;
 | 
|    CHECK(args->GetDouble(1, &source));
 | 
| -  std::string url;
 | 
| -  if (args->GetSize() > 2)
 | 
| -    CHECK(args->GetString(2, &url));
 | 
| +  GURL override_url;
 | 
|  
 | 
|    extension_misc::AppLaunchBucket launch_bucket =
 | 
|        static_cast<extension_misc::AppLaunchBucket>(
 | 
| @@ -511,6 +510,16 @@ void AppLauncherHandler::HandleLaunchApp(const base::ListValue* args) {
 | 
|      extensions::RecordAppLaunchType(launch_bucket, extension->GetType());
 | 
|    } else {
 | 
|      extensions::RecordWebStoreLaunch();
 | 
| +
 | 
| +    if (args->GetSize() > 2) {
 | 
| +      std::string source_value;
 | 
| +      CHECK(args->GetString(2, &source_value));
 | 
| +      if (!source_value.empty()) {
 | 
| +        override_url = net::AppendQueryParameter(
 | 
| +            extensions::AppLaunchInfo::GetFullLaunchURL(extension),
 | 
| +            extension_urls::kWebstoreSourceField, source_value);
 | 
| +      }
 | 
| +    }
 | 
|    }
 | 
|  
 | 
|    if (disposition == WindowOpenDisposition::NEW_FOREGROUND_TAB ||
 | 
| @@ -522,7 +531,7 @@ void AppLauncherHandler::HandleLaunchApp(const base::ListValue* args) {
 | 
|                                 ? extensions::LAUNCH_CONTAINER_WINDOW
 | 
|                                 : extensions::LAUNCH_CONTAINER_TAB,
 | 
|                             disposition, extensions::SOURCE_NEW_TAB_PAGE);
 | 
| -    params.override_url = GURL(url);
 | 
| +    params.override_url = override_url;
 | 
|      OpenApplication(params);
 | 
|    } else {
 | 
|      // To give a more "launchy" experience when using the NTP launcher, we close
 | 
| @@ -538,7 +547,7 @@ void AppLauncherHandler::HandleLaunchApp(const base::ListValue* args) {
 | 
|          old_contents ? WindowOpenDisposition::CURRENT_TAB
 | 
|                       : WindowOpenDisposition::NEW_FOREGROUND_TAB,
 | 
|          extensions::SOURCE_NEW_TAB_PAGE);
 | 
| -    params.override_url = GURL(url);
 | 
| +    params.override_url = override_url;
 | 
|      WebContents* new_contents = OpenApplication(params);
 | 
|  
 | 
|      // This will also destroy the handler, so do not perform any actions after.
 | 
| 
 |