11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/enhanced_bookmarks/bookmark_server_search_service.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/enhanced_bookmarks/enhanced_bookmark_utils.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/enhanced_bookmarks/proto/search.pb.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/base/url_util.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/url_request/url_fetcher.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst std::string kSearchUrl( 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "https://www.google.com/stars/search"); 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace enhanced_bookmarks { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciBookmarkServerSearchService::BookmarkServerSearchService( 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<net::URLRequestContextGetter> request_context_getter, 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileOAuth2TokenService* token_service, 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SigninManagerBase* signin_manager, 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EnhancedBookmarkModel* enhanced_bookmark_model) 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : BookmarkServerService(request_context_getter, 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci token_service, 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci signin_manager, 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci enhanced_bookmark_model) { 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciBookmarkServerSearchService::~BookmarkServerSearchService() { 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BookmarkServerSearchService::Search(const std::string& query) { 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(query.length()); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci current_query_ = query; 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TriggerTokenRequest(true); 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::vector<const BookmarkNode*> BookmarkServerSearchService::ResultForQuery( 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& query) { 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(query.length()); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<const BookmarkNode*> result; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::map<std::string, std::vector<std::string> >::iterator it = 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci searches_.find(query); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (it == searches_.end()) 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return result; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (std::vector<std::string>::iterator clip_it = it->second.begin(); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci clip_it != it->second.end(); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ++clip_it) { 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node = BookmarkForRemoteId(*clip_it); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (node) 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result.push_back(node); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return result; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinet::URLFetcher* BookmarkServerSearchService::CreateFetcher() { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Add the necessary arguments to the URI. 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL url(kSearchUrl); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url = net::AppendQueryParameter(url, "output", "proto"); 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url = net::AppendQueryParameter(url, "q", current_query_); 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Build the URLFetcher to perform the request. 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::URLFetcher* url_fetcher = 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::URLFetcher::Create(url, net::URLFetcher::GET, this); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return url_fetcher; 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool BookmarkServerSearchService::ProcessResponse(const std::string& response, 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool* should_notify) { 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(*should_notify); 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(current_query_.length()); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::CorpusSearchResult response_proto; 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool result = response_proto.ParseFromString(response); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!result) 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; // Not formatted properly. 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<std::string> clip_ids; 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (google::protobuf::RepeatedPtrField< 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci image::collections::CorpusSearchResult_ClipResult>::const_iterator 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci it = response_proto.results().begin(); 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci it != response_proto.results().end(); 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ++it) { 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& clip_id = it->clip_id(); 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!clip_id.length()) 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci continue; 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci clip_ids.push_back(clip_id); 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci searches_[current_query_] = clip_ids; 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci current_query_.clear(); 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return true; 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BookmarkServerSearchService::CleanAfterFailure() { 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci searches_.clear(); 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BookmarkServerSearchService::EnhancedBookmarkAdded( 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node) { 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci searches_.clear(); 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BookmarkServerSearchService::EnhancedBookmarkAllUserNodesRemoved() { 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci searches_.clear(); 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BookmarkServerSearchService::EnhancedBookmarkRemoteIdChanged( 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const BookmarkNode* node, 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& old_remote_id, 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& remote_id) { 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci searches_.clear(); 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace enhanced_bookmarks 117