people_result.cc revision e5d81f57cb97b3b6b7fccc9c5610d21eb81db09d
13842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz// Copyright 2013 The Chromium Authors. All rights reserved. 23842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz// Use of this source code is governed by a BSD-style license that can be 33842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz// found in the LICENSE file. 43842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 53842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "chrome/browser/ui/app_list/search/people/people_result.h" 63842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 73842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include <vector> 83842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 93842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "base/bind.h" 103842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "base/memory/ref_counted.h" 113842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "base/strings/utf_string_conversions.h" 123842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "chrome/browser/profiles/profile.h" 133842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 143842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "chrome/browser/signin/signin_manager_factory.h" 153842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "chrome/browser/ui/app_list/search/common/url_icon_source.h" 163842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "chrome/browser/ui/app_list/search/people/person.h" 173842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "chrome/browser/ui/browser_navigator.h" 183842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "chrome/common/extensions/api/hangouts_private.h" 193842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "components/signin/core/browser/profile_oauth2_token_service.h" 203842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "components/signin/core/browser/signin_manager.h" 213842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "content/public/browser/user_metrics.h" 223842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "extensions/browser/event_router.h" 233842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "extensions/browser/extension_system.h" 243842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "grit/generated_resources.h" 253842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "grit/theme_resources.h" 263842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "ui/base/l10n/l10n_util.h" 273842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz#include "ui/base/resource/resource_bundle.h" 283842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 293842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitznamespace OnHangoutRequested = 303842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz extensions::api::hangouts_private::OnHangoutRequested; 313842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 323842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzusing extensions::api::hangouts_private::User; 333842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzusing extensions::api::hangouts_private::HangoutRequest; 343842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 353842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitznamespace { 363842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 373842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzconst int kIconSize = 32; 383842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzconst char kImageSizePath[] = "s32-p/"; 393842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzconst char kEmailUrlPrefix[] = "mailto:"; 403842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 413842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzconst char* const kHangoutsExtensionIds[] = { 420eba2169fb19ef0707a2c96201e33769001b5f11Ken Werner "nckgahadagoaajjgafhacjanaoiihapd", 433842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz "ljclpkphhpbpinifbeabbhlfddcpfdde", 440eba2169fb19ef0707a2c96201e33769001b5f11Ken Werner "ppleadejekpmccmnpjdimmlfljlkdfej", 450eba2169fb19ef0707a2c96201e33769001b5f11Ken Werner "eggnbpckecmjlblplehfpjjdhhidfdoj" 460eba2169fb19ef0707a2c96201e33769001b5f11Ken Werner}; 470eba2169fb19ef0707a2c96201e33769001b5f11Ken Werner 483842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz// Add a query parameter to specify the size to fetch the image in. The 493842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz// original profile image can be of an arbitrary size, we ask the server to 503842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz// crop it to a square 32x32 using its smart cropping algorithm. 513842dac7333e42aa44531eda34ba55200b99ccf8Daniel JacobowitzGURL GetImageUrl(const GURL& url) { 523842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz std::string image_filename = url.ExtractFileName(); 530eba2169fb19ef0707a2c96201e33769001b5f11Ken Werner if (image_filename.empty()) 543842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz return url; 553842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 563842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz return url.Resolve(kImageSizePath + image_filename); 573842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz} 583842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 593842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz} // namespace 603842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 613842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitznamespace app_list { 623842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 633842dac7333e42aa44531eda34ba55200b99ccf8Daniel JacobowitzPeopleResult::PeopleResult(Profile* profile, scoped_ptr<Person> person) 643842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz : profile_(profile), person_(person.Pass()), weak_factory_(this) { 653842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz set_id(person_->id); 663842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz set_title(base::UTF8ToUTF16(person_->display_name)); 673842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz set_relevance(person_->interaction_rank); 683842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz set_details(base::UTF8ToUTF16(person_->email)); 693842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 703842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz RefreshHangoutsExtensionId(); 713842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz SetDefaultActions(); 723842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 733842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz image_ = gfx::ImageSkia( 743842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz new UrlIconSource(base::Bind(&PeopleResult::OnIconLoaded, 753842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz weak_factory_.GetWeakPtr()), 763842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz profile_->GetRequestContext(), 773842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz GetImageUrl(person_->image_url), 783842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz kIconSize, 793842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz IDR_PROFILE_PICTURE_LOADING), 803842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz gfx::Size(kIconSize, kIconSize)); 817d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris SetIcon(image_); 82cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris} 83f4a8df5f4f338f1a12c25213227e98b34b42447fChristopher Ferris 847d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher FerrisPeopleResult::~PeopleResult() { 85cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris} 867d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris 877d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferrisvoid PeopleResult::Open(int event_flags) { 88cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris // Action 0 will always be our default action. 897d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris InvokeAction(0, event_flags); 907d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris} 917d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris 927d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferrisvoid PeopleResult::InvokeAction(int action_index, int event_flags) { 937d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris if (hangouts_extension_id_.empty()) { 947d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris // If the hangouts app is not available, the only option we are showing 95cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris // to the user is 'Send Email'. 967d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris SendEmail(); 973842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz } else { 983842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz switch (action_index) { 993842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz case 0: 1007d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris OpenChat(); 101cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris break; 102f4a8df5f4f338f1a12c25213227e98b34b42447fChristopher Ferris case 1: 1037d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris SendEmail(); 104cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris break; 1057d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris default: 1067d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris LOG(ERROR) << "Invalid people search action: " << action_index; 107cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris } 1087d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris } 1097d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris} 1107d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris 1117d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferrisscoped_ptr<ChromeSearchResult> PeopleResult::Duplicate() { 1127d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris return scoped_ptr<ChromeSearchResult>( 1137d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris new PeopleResult(profile_, person_->Duplicate().Pass())).Pass(); 114cdf9ee587b78148c5d48dae1b5ea72ec8df64c96Christopher Ferris} 1157d46a21e0a2cb561e4cad57b101a7137e01023dcChristopher Ferris 1163842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzvoid PeopleResult::OnIconLoaded() { 1173842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz // Remove the existing image reps since the icon data is loaded and they 1183842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz // need to be re-created. 1193842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz const std::vector<gfx::ImageSkiaRep>& image_reps = image_.image_reps(); 1203842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz for (size_t i = 0; i < image_reps.size(); ++i) 1213842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz image_.RemoveRepresentation(image_reps[i].scale()); 1223842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 1233842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz SetIcon(image_); 1243842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz} 1250eba2169fb19ef0707a2c96201e33769001b5f11Ken Werner 1263842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzvoid PeopleResult::SetDefaultActions() { 1273842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz Actions actions; 1283842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 1293842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 1303842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz if (!hangouts_extension_id_.empty()) { 1313842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz actions.push_back(Action( 1323842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz *bundle.GetImageSkiaNamed(IDR_PEOPLE_SEARCH_ACTION_CHAT), 1333842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz *bundle.GetImageSkiaNamed(IDR_PEOPLE_SEARCH_ACTION_CHAT_HOVER), 1343842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz *bundle.GetImageSkiaNamed(IDR_PEOPLE_SEARCH_ACTION_CHAT_PRESSED), 1353842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz l10n_util::GetStringUTF16(IDS_PEOPLE_SEARCH_ACTION_CHAT_TOOLTIP))); 1363842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz } 1373842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz actions.push_back(Action( 1383842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz *bundle.GetImageSkiaNamed(IDR_PEOPLE_SEARCH_ACTION_EMAIL), 1393842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz *bundle.GetImageSkiaNamed(IDR_PEOPLE_SEARCH_ACTION_EMAIL_HOVER), 1403842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz *bundle.GetImageSkiaNamed(IDR_PEOPLE_SEARCH_ACTION_EMAIL_PRESSED), 1413842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz l10n_util::GetStringUTF16(IDS_PEOPLE_SEARCH_ACTION_EMAIL_TOOLTIP))); 1423842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz SetActions(actions); 1433842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz} 1443842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 1453842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzvoid PeopleResult::OpenChat() { 1463842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz HangoutRequest request; 1473842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 1483842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz request.type = extensions::api::hangouts_private::HANGOUT_TYPE_CHAT; 1493842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 1503842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz // from: the user this chat request is originating from. 1513842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz SigninManagerBase* signin_manager = 1523842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz SigninManagerFactory::GetInstance()->GetForProfile(profile_); 1533842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz DCHECK(signin_manager); 1543842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz request.from = signin_manager->GetAuthenticatedAccountId(); 1550eba2169fb19ef0707a2c96201e33769001b5f11Ken Werner 1563842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz // to: list of users with whom to start this hangout is with. 1573842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz linked_ptr<User> target(new User()); 1583842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz target->id = person_->owner_id; 1593842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz request.to.push_back(target); 1603842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 1613842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz scoped_ptr<extensions::Event> event( 1623842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz new extensions::Event(OnHangoutRequested::kEventName, 1633842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz OnHangoutRequested::Create(request))); 1643842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 1653842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz // TODO(rkc): Change this once we remove the hangoutsPrivate API. 1663842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz // See crbug.com/306672 1673842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz extensions::ExtensionSystem::Get( 1683842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz profile_)->event_router()->DispatchEventToExtension( 1693842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz hangouts_extension_id_, event.Pass()); 1703842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 1713842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz content::RecordAction(base::UserMetricsAction("PeopleSearch_OpenChat")); 1723842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz} 1733842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 1743842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzvoid PeopleResult::SendEmail() { 1753842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz chrome::NavigateParams params(profile_, 1763842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz GURL(kEmailUrlPrefix + person_->email), 1773842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz content::PAGE_TRANSITION_LINK); 1783842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz // If no window exists, this will open a new window this one tab. 1793842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz params.disposition = NEW_FOREGROUND_TAB; 1803842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz chrome::Navigate(¶ms); 1813842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz content::RecordAction(base::UserMetricsAction("PeopleSearch_SendEmail")); 1823842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz} 1833842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 1843842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitzvoid PeopleResult::RefreshHangoutsExtensionId() { 1853842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz // TODO(rkc): Change this once we remove the hangoutsPrivate API. 1863842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz // See crbug.com/306672 1873842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz for (size_t i = 0; i < arraysize(kHangoutsExtensionIds); ++i) { 1883842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz if (extensions::ExtensionSystem::Get( 1893842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz profile_)->event_router()->ExtensionHasEventListener( 1903842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz kHangoutsExtensionIds[i], OnHangoutRequested::kEventName)) { 1913842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz hangouts_extension_id_ = kHangoutsExtensionIds[i]; 1923842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz return; 1933842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz } 1943842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz } 1953842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz hangouts_extension_id_.clear(); 1963842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz} 197545023c2072975c6b85a09d5faf2cf05db10e064Ken Werner 198545023c2072975c6b85a09d5faf2cf05db10e064Ken WernerChromeSearchResultType PeopleResult::GetType() { 1993842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz return SEARCH_PEOPLE_SEARCH_RESULT; 2003842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz} 2013842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz 2023842dac7333e42aa44531eda34ba55200b99ccf8Daniel Jacobowitz} // namespace app_list 2031e10c2931d970d0ae5426bba6ba9e1c2998c7451Ken Werner