- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / autocomplete / contact_provider_chromeos.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_AUTOCOMPLETE_CONTACT_PROVIDER_CHROMEOS_H_
6 #define CHROME_BROWSER_AUTOCOMPLETE_CONTACT_PROVIDER_CHROMEOS_H_
7
8 #include <utility>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "base/compiler_specific.h"
13 #include "base/memory/weak_ptr.h"
14 #include "chrome/browser/autocomplete/autocomplete_match.h"
15 #include "chrome/browser/autocomplete/autocomplete_provider.h"
16 #include "chrome/browser/chromeos/contacts/contact_manager_observer.h"
17
18 class AutocompleteInput;
19
20 namespace contacts {
21 class ContactManagerInterface;
22 }
23
24 // AutocompleteProvider implementation that searches through the contacts
25 // provided by contacts::ContactManager.
26 class ContactProvider : public AutocompleteProvider,
27                         public contacts::ContactManagerObserver {
28  public:
29   // Key within AutocompleteMatch::additional_info where the corresponding
30   // contact's ID is stored.
31   static const char kMatchContactIdKey[];
32
33   ContactProvider(
34       AutocompleteProviderListener* listener,
35       Profile* profile,
36       base::WeakPtr<contacts::ContactManagerInterface> contact_manager);
37
38   // AutocompleteProvider overrides:
39   virtual void Start(const AutocompleteInput& input,
40                      bool minimal_changes) OVERRIDE;
41
42   // contacts::ContactManagerObserver overrides:
43   virtual void OnContactsUpdated(Profile* profile) OVERRIDE;
44
45  private:
46   struct ContactData;
47   typedef std::vector<ContactData> ContactDataVector;
48
49   virtual ~ContactProvider();
50
51   // Returns true if |a|'s affinity is greater than |b|'s affinity.
52   static bool CompareAffinity(const ContactData& a, const ContactData& b);
53
54   // Updates |contacts_| to match the contacts currently reported by
55   // ContactManager.
56   void RefreshContacts();
57
58   // Adds an AutocompleteMatch object for |contact| to |matches_| if |contact|
59   // is matched by |input|.  |input_words| is |input.text()| split on word
60   // boundaries.
61   void AddContactIfMatched(const AutocompleteInput& input,
62                            const std::vector<string16>& input_words,
63                            const ContactData& contact);
64
65   // Returns an AutocompleteMatch object corresponding to the passed-in data.
66   AutocompleteMatch CreateAutocompleteMatch(const AutocompleteInput& input,
67                                             const ContactData& contact);
68
69   base::WeakPtr<contacts::ContactManagerInterface> contact_manager_;
70
71   // Contacts through which we search, ordered by descending affinity.
72   ContactDataVector contacts_;
73
74   DISALLOW_COPY_AND_ASSIGN(ContactProvider);
75 };
76
77 #endif  // CHROME_BROWSER_AUTOCOMPLETE_CONTACT_PROVIDER_CHROMEOS_H_