1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file.
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <string>
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/browser_process.h"
8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/extensions/api/feedback_private/feedback_private_api.h"
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/ui/browser_finder.h"
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/public/browser/web_contents.h"
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "url/gurl.h"
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace {
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)GURL GetTargetTabUrl(int session_id, int index) {
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  Browser* browser = chrome::FindBrowserWithID(session_id);
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Sanity checks.
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (!browser || index >= browser->tab_strip_model()->count())
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return GURL();
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (index >= 0) {
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    content::WebContents* target_tab =
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        browser->tab_strip_model()->GetWebContentsAt(index);
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (target_tab)
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      return target_tab->GetURL();
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return GURL();
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace chrome {
37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)extern const char kAppLauncherCategoryTag[] = "AppLauncher";
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void ShowFeedbackPage(Browser* browser,
41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                      const std::string& description_template,
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                      const std::string& category_tag) {
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  GURL page_url;
44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (browser) {
45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    page_url = GetTargetTabUrl(browser->session_id().id(),
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                               browser->tab_strip_model()->active_index());
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  Profile* profile = NULL;
50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (browser) {
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    profile = browser->profile();
52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  } else {
53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    profile = ProfileManager::GetLastUsedProfileAllowedByPolicy();
54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (!profile) {
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    LOG(ERROR) << "Cannot invoke feedback: No profile found!";
57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return;
58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // We do not want to launch on an OTR profile.
61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  profile = profile->GetOriginalProfile();
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  DCHECK(profile);
63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  extensions::FeedbackPrivateAPI* api =
65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      extensions::FeedbackPrivateAPI::GetFactoryInstance()->Get(profile);
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  api->RequestFeedback(description_template,
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                       category_tag,
69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                       page_url);
70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace chrome
73