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(&params);
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