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