people_result.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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"
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h"
20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h"
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/user_metrics.h"
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/event_router.h"
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "grit/generated_resources.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)
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const int kIconSize = 32;
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochconst char kImageSizePath[] = "s64-p/";
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kEmailUrlPrefix[] = "mailto:";
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)const char* const kHangoutsExtensionIds[] = {
418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  "nckgahadagoaajjgafhacjanaoiihapd",
428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  "ljclpkphhpbpinifbeabbhlfddcpfdde",
438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  "ppleadejekpmccmnpjdimmlfljlkdfej",
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  "eggnbpckecmjlblplehfpjjdhhidfdoj",
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  "jfjjdfefebklmdbmenmlehlopoocnoeh",
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  "knipolnnllmklapflnccelgolnpehhpl"
478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)};
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Add a query parameter to specify the size to fetch the image in. The
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// original profile image can be of an arbitrary size, we ask the server to
510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// crop it to a square 64x64 using its smart cropping algorithm.
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)GURL GetImageUrl(const GURL& url) {
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::string image_filename = url.ExtractFileName();
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (image_filename.empty())
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return url;
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return url.Resolve(kImageSizePath + image_filename);
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace app_list {
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)PeopleResult::PeopleResult(Profile* profile, scoped_ptr<Person> person)
654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    : profile_(profile), person_(person.Pass()), weak_factory_(this) {
664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  set_id(person_->id);
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  set_title(base::UTF8ToUTF16(person_->display_name));
684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  set_relevance(person_->interaction_rank);
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  set_details(base::UTF8ToUTF16(person_->email));
7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  RefreshHangoutsExtensionId();
7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  SetDefaultActions();
7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  image_ = gfx::ImageSkia(
7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      new UrlIconSource(base::Bind(&PeopleResult::OnIconLoaded,
7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                   weak_factory_.GetWeakPtr()),
7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        profile_->GetRequestContext(),
784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                        GetImageUrl(person_->image_url),
7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        kIconSize,
8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        IDR_PROFILE_PICTURE_LOADING),
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      gfx::Size(kIconSize, kIconSize));
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);
1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  request.from = signin_manager->GetAuthenticatedAccountId();
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),
17768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                content::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(&params);
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