158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/app_list/search/people/people_result.h" 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <vector> 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/bind.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/memory/ref_counted.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/strings/utf_string_conversions.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/app_list/search/common/url_icon_source.h" 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/app_list/search/people/person.h" 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/browser_navigator.h" 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/extensions/api/hangouts_private.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h" 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h" 21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/user_metrics.h" 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/event_router.h" 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "grit/theme_resources.h" 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace OnHangoutRequested = 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) extensions::api::hangouts_private::OnHangoutRequested; 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using extensions::api::hangouts_private::User; 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using extensions::api::hangouts_private::HangoutRequest; 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace { 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochconst char kImageSizePath[] = "s64-p/"; 3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kEmailUrlPrefix[] = "mailto:"; 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)const char* const kHangoutsExtensionIds[] = { 408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) "nckgahadagoaajjgafhacjanaoiihapd", 418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) "ljclpkphhpbpinifbeabbhlfddcpfdde", 428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) "ppleadejekpmccmnpjdimmlfljlkdfej", 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "eggnbpckecmjlblplehfpjjdhhidfdoj", 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "jfjjdfefebklmdbmenmlehlopoocnoeh", 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "knipolnnllmklapflnccelgolnpehhpl" 468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}; 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Add a query parameter to specify the size to fetch the image in. The 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// original profile image can be of an arbitrary size, we ask the server to 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// crop it to a square 64x64 using its smart cropping algorithm. 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)GURL GetImageUrl(const GURL& url) { 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string image_filename = url.ExtractFileName(); 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (image_filename.empty()) 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return url; 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return url.Resolve(kImageSizePath + image_filename); 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace app_list { 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)PeopleResult::PeopleResult(Profile* profile, scoped_ptr<Person> person) 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) : profile_(profile), person_(person.Pass()), weak_factory_(this) { 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) set_id(person_->id); 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) set_title(base::UTF8ToUTF16(person_->display_name)); 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) set_relevance(person_->interaction_rank); 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) set_details(base::UTF8ToUTF16(person_->email)); 6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) RefreshHangoutsExtensionId(); 7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SetDefaultActions(); 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int icon_size = GetPreferredIconDimension(); 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) image_ = gfx::ImageSkia( 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new UrlIconSource( 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Bind(&PeopleResult::OnIconLoaded, weak_factory_.GetWeakPtr()), 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) profile_->GetRequestContext(), 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetImageUrl(person_->image_url), 796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) icon_size, 806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IDR_PROFILE_PICTURE_LOADING), 816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) gfx::Size(icon_size, icon_size)); 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetIcon(image_); 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)PeopleResult::~PeopleResult() { 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PeopleResult::Open(int event_flags) { 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Action 0 will always be our default action. 9068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) InvokeAction(0, event_flags); 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PeopleResult::InvokeAction(int action_index, int event_flags) { 948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (hangouts_extension_id_.empty()) { 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // If the hangouts app is not available, the only option we are showing 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // to the user is 'Send Email'. 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SendEmail(); 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else { 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) switch (action_index) { 1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) case 0: 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OpenChat(); 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) break; 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) case 1: 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SendEmail(); 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) break; 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) default: 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) LOG(ERROR) << "Invalid people search action: " << action_index; 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)scoped_ptr<ChromeSearchResult> PeopleResult::Duplicate() { 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return scoped_ptr<ChromeSearchResult>( 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) new PeopleResult(profile_, person_->Duplicate().Pass())).Pass(); 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void PeopleResult::OnIconLoaded() { 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Remove the existing image reps since the icon data is loaded and they 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // need to be re-created. 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::vector<gfx::ImageSkiaRep>& image_reps = image_.image_reps(); 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (size_t i = 0; i < image_reps.size(); ++i) 12268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) image_.RemoveRepresentation(image_reps[i].scale()); 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetIcon(image_); 12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void PeopleResult::SetDefaultActions() { 12868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Actions actions; 12968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 13068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 1318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!hangouts_extension_id_.empty()) { 1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) actions.push_back(Action( 1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *bundle.GetImageSkiaNamed(IDR_PEOPLE_SEARCH_ACTION_CHAT), 1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *bundle.GetImageSkiaNamed(IDR_PEOPLE_SEARCH_ACTION_CHAT_HOVER), 1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *bundle.GetImageSkiaNamed(IDR_PEOPLE_SEARCH_ACTION_CHAT_PRESSED), 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_PEOPLE_SEARCH_ACTION_CHAT_TOOLTIP))); 1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 13868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) actions.push_back(Action( 13968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) *bundle.GetImageSkiaNamed(IDR_PEOPLE_SEARCH_ACTION_EMAIL), 14068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) *bundle.GetImageSkiaNamed(IDR_PEOPLE_SEARCH_ACTION_EMAIL_HOVER), 14168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) *bundle.GetImageSkiaNamed(IDR_PEOPLE_SEARCH_ACTION_EMAIL_PRESSED), 14268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_PEOPLE_SEARCH_ACTION_EMAIL_TOOLTIP))); 14368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SetActions(actions); 14468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 14568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void PeopleResult::OpenChat() { 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) HangoutRequest request; 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) request.type = extensions::api::hangouts_private::HANGOUT_TYPE_CHAT; 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // from: the user this chat request is originating from. 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SigninManagerBase* signin_manager = 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SigninManagerFactory::GetInstance()->GetForProfile(profile_); 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(signin_manager); 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci request.from = signin_manager->GetAuthenticatedUsername(); 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // to: list of users with whom to start this hangout is with. 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) linked_ptr<User> target(new User()); 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) target->id = person_->owner_id; 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) request.to.push_back(target); 1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<extensions::Event> event( 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) new extensions::Event(OnHangoutRequested::kEventName, 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnHangoutRequested::Create(request))); 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(rkc): Change this once we remove the hangoutsPrivate API. 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // See crbug.com/306672 1680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch extensions::EventRouter::Get(profile_) 1690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ->DispatchEventToExtension(hangouts_extension_id_, event.Pass()); 170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RecordAction(base::UserMetricsAction("PeopleSearch_OpenChat")); 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 17468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void PeopleResult::SendEmail() { 17568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) chrome::NavigateParams params(profile_, 1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GURL(kEmailUrlPrefix + person_->email), 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 17868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // If no window exists, this will open a new window this one tab. 17968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) params.disposition = NEW_FOREGROUND_TAB; 18068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) chrome::Navigate(¶ms); 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RecordAction(base::UserMetricsAction("PeopleSearch_SendEmail")); 18268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 18368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void PeopleResult::RefreshHangoutsExtensionId() { 1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(rkc): Change this once we remove the hangoutsPrivate API. 1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // See crbug.com/306672 1878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (size_t i = 0; i < arraysize(kHangoutsExtensionIds); ++i) { 1880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (extensions::EventRouter::Get(profile_)->ExtensionHasEventListener( 1898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) kHangoutsExtensionIds[i], OnHangoutRequested::kEventName)) { 1908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) hangouts_extension_id_ = kHangoutsExtensionIds[i]; 1918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return; 1928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 1938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 1948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) hangouts_extension_id_.clear(); 1954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)ChromeSearchResultType PeopleResult::GetType() { 19858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return SEARCH_PEOPLE_SEARCH_RESULT; 19958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 20058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 20158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace app_list 202