190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_HISTORY_H_ 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define CHROME_BROWSER_UI_APP_LIST_SEARCH_HISTORY_H_ 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <map> 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <string> 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/basictypes.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/ref_counted.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/app_list/search/history_data_observer.h" 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/app_list/search/history_types.h" 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h" 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace app_list { 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class HistoryData; 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class HistoryDataStore; 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace test { 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class SearchHistoryTest; 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// History tracks the launch events of the search results and uses HistoryData 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// to build user learning data out of these events. The learning data is stored 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// as associations between user typed query and launched result id. There are 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// primary and secondary associations. See HistoryData comments to see how 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// they are built. The learning data is sent to the mixer to boost results that 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// have been launched before. 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class History : public KeyedService, public HistoryDataObserver { 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public: 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci explicit History(scoped_refptr<HistoryDataStore> store); 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~History(); 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns true if the service is ready. 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool IsReady() const; 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Adds a launch event to the learning data. 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void AddLaunchEvent(const std::string& query, const std::string& result_id); 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Gets all known search results that were launched using the given |query| 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // or using queries that |query| is a prefix of. 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<KnownResults> GetKnownResults(const std::string& query) const; 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) private: 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) friend class app_list::test::SearchHistoryTest; 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // HistoryDataObserver overrides: 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnHistoryDataLoadedFromStore() OVERRIDE; 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<HistoryData> data_; 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_refptr<HistoryDataStore> store_; 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool data_loaded_; 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(History); 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}; 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace app_list 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // CHROME_BROWSER_UI_APP_LIST_SEARCH_HISTORY_H_ 64