• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <string>
6 
7 #include "chrome/browser/browser_process.h"
8 #include "chrome/browser/extensions/api/feedback_private/feedback_private_api.h"
9 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/browser/profiles/profile_manager.h"
11 #include "chrome/browser/ui/browser_finder.h"
12 #include "chrome/browser/ui/tabs/tab_strip_model.h"
13 #include "content/public/browser/web_contents.h"
14 #include "url/gurl.h"
15 
16 namespace {
17 
GetTargetTabUrl(int session_id,int index)18 GURL GetTargetTabUrl(int session_id, int index) {
19   Browser* browser = chrome::FindBrowserWithID(session_id);
20   // Sanity checks.
21   if (!browser || index >= browser->tab_strip_model()->count())
22     return GURL();
23 
24   if (index >= 0) {
25     content::WebContents* target_tab =
26         browser->tab_strip_model()->GetWebContentsAt(index);
27     if (target_tab)
28       return target_tab->GetURL();
29   }
30 
31   return GURL();
32 }
33 
34 }  // namespace
35 
36 namespace chrome {
37 
38 extern const char kAppLauncherCategoryTag[] = "AppLauncher";
39 
ShowFeedbackPage(Browser * browser,const std::string & description_template,const std::string & category_tag)40 void ShowFeedbackPage(Browser* browser,
41                       const std::string& description_template,
42                       const std::string& category_tag) {
43   GURL page_url;
44   if (browser) {
45     page_url = GetTargetTabUrl(browser->session_id().id(),
46                                browser->tab_strip_model()->active_index());
47   }
48 
49   Profile* profile = NULL;
50   if (browser) {
51     profile = browser->profile();
52   } else {
53     profile = ProfileManager::GetLastUsedProfileAllowedByPolicy();
54   }
55   if (!profile) {
56     LOG(ERROR) << "Cannot invoke feedback: No profile found!";
57     return;
58   }
59 
60   // We do not want to launch on an OTR profile.
61   profile = profile->GetOriginalProfile();
62   DCHECK(profile);
63 
64   extensions::FeedbackPrivateAPI* api =
65       extensions::FeedbackPrivateAPI::GetFactoryInstance()->Get(profile);
66 
67   api->RequestFeedback(description_template,
68                        category_tag,
69                        page_url);
70 }
71 
72 }  // namespace chrome
73