OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_UI_GOOGLE_NOW_GOOGLE_NOW_SERVICE_H_ | 5 #ifndef CHROME_BROWSER_UI_GOOGLE_NOW_GOOGLE_NOW_SERVICE_H_ |
6 #define CHROME_BROWSER_UI_GOOGLE_NOW_GOOGLE_NOW_SERVICE_H_ | 6 #define CHROME_BROWSER_UI_GOOGLE_NOW_GOOGLE_NOW_SERVICE_H_ |
7 | 7 |
8 #include "base/timer.h" | 8 #include "base/timer.h" |
9 #include "chrome/browser/profiles/profile_keyed_service.h" | 9 #include "chrome/browser/profiles/profile_keyed_service.h" |
10 #include "net/url_request/url_fetcher_delegate.h" | |
10 | 11 |
11 class Profile; | 12 class Profile; |
12 | 13 |
13 namespace base { | 14 namespace base { |
14 class TimeDelta; | 15 class TimeDelta; |
15 } | 16 } |
16 | 17 |
17 namespace content { | 18 namespace content { |
18 struct Geoposition; | 19 struct Geoposition; |
19 } | 20 } |
20 | 21 |
21 namespace net { | |
22 class URLRequest; | |
23 } | |
24 | |
25 // The Google Now service gets Google Now cards from the server and shows them | 22 // The Google Now service gets Google Now cards from the server and shows them |
26 // as Chrome notifications. | 23 // as Chrome notifications. |
27 // The service performs periodic updating of Google Now cards. | 24 // The service performs periodic updating of Google Now cards. |
28 // Each updating of the cards consists of 3 steps: | 25 // Each updating of the cards consists of 3 steps: |
29 // 1. Obtaining the location of the machine (asynchronous); | 26 // 1. Obtaining the location of the machine (asynchronous); |
30 // 2. Making a server request (asynchronous); | 27 // 2. Making a server request (asynchronous); |
31 // 3. Showing the cards as notifications. | 28 // 3. Showing the cards as notifications. |
32 class GoogleNowService : public ProfileKeyedService { | 29 class GoogleNowService : public ProfileKeyedService, |
30 private net::URLFetcherDelegate { | |
sky
2012/12/13 00:38:46
style guide says no private inheritance.
vadimt
2012/12/13 00:55:10
Done.
| |
33 public: | 31 public: |
34 // Must call Init after construction. | 32 // Must call Init after construction. |
35 explicit GoogleNowService(Profile* profile); | 33 explicit GoogleNowService(Profile* profile); |
36 virtual ~GoogleNowService(); | 34 virtual ~GoogleNowService(); |
37 void Init(); | 35 void Init(); |
38 | 36 |
39 private: | 37 private: |
40 // Parsed response from the server. | 38 // Parsed response from the server. |
41 struct ServerResponse; | 39 struct ServerResponse; |
42 | 40 |
43 // Returns true if Google Now integration is enabled for the profile. | 41 // Returns true if Google Now integration is enabled for the profile. |
44 bool IsGoogleNowEnabled() const; | 42 bool IsGoogleNowEnabled() const; |
45 // Gets new cards from the server and shows them as notifications. | 43 // Gets new cards from the server and shows them as notifications. |
46 void UpdateCards(); | 44 void UpdateCards(); |
47 | 45 |
48 // Schedules next cards update after the specified delay. | 46 // Schedules next cards update after the specified delay. |
49 void StartWaitingForNextUpdate(base::TimeDelta delay); | 47 void StartWaitingForNextUpdate(base::TimeDelta delay); |
50 void OnWaitingForNextUpdateEnds(); | 48 void OnWaitingForNextUpdateEnds(); |
51 | 49 |
52 // Starts obtaining location of the machine. | 50 // Starts obtaining location of the machine. |
53 void StartObtainingGeolocation(); | 51 void StartObtainingGeolocation(); |
54 void OnLocationObtained(const content::Geoposition& position); | 52 void OnLocationObtained(const content::Geoposition& position); |
55 void OnLocationRequestTimeout(); | 53 void OnLocationRequestTimeout(); |
56 | 54 |
55 // Builds a URL for a server request. | |
56 static std::string BuildRequestURL(const content::Geoposition& position); | |
57 // Starts downloading cards from the server. | 57 // Starts downloading cards from the server. |
sky
2012/12/13 00:38:46
nit: newline between 56/57.
vadimt
2012/12/13 00:55:10
Done.
| |
58 void StartServerRequest(const content::Geoposition& position); | 58 void StartServerRequest(const content::Geoposition& position); |
59 void OnServerRequestCompleted(net::URLRequest* request, int num_bytes); | |
60 | 59 |
61 // Parses server response. Returns true if the parsing was successful. | 60 // Parses server response. Returns true if the parsing was successful. |
62 static bool ParseServerResponse(const net::URLRequest* request, | 61 static bool ParseServerResponse(const std::string& response_string, |
63 int num_bytes, | |
64 ServerResponse* server_response); | 62 ServerResponse* server_response); |
65 | 63 |
66 // Shows Google Now cards as notifications. | 64 // Shows Google Now cards as notifications. |
67 void ShowNotifications(const ServerResponse& server_response); | 65 void ShowNotifications(const ServerResponse& server_response); |
68 | 66 |
67 // URLFetcherDelegate | |
68 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; | |
69 | |
69 // The profile. | 70 // The profile. |
70 Profile* const profile_; | 71 Profile* const profile_; |
71 // Timer to schedule next cards update. | 72 // Timer to schedule next cards update. |
72 base::OneShotTimer<GoogleNowService> next_update_timer_; | 73 base::OneShotTimer<GoogleNowService> next_update_timer_; |
73 // Timer to cancel geolocation requests that take too long. | 74 // Timer to cancel geolocation requests that take too long. |
74 base::OneShotTimer<GoogleNowService> geolocation_request_timer_; | 75 base::OneShotTimer<GoogleNowService> geolocation_request_timer_; |
75 // Weak factory for the geolocation request callback. Used to ensure | 76 // Weak factory for the geolocation request callback. Used to ensure |
76 // geolocation request callback is not run after this object is destroyed. | 77 // geolocation request callback is not run after this object is destroyed. |
77 base::WeakPtrFactory<GoogleNowService> geolocation_request_weak_factory_; | 78 base::WeakPtrFactory<GoogleNowService> geolocation_request_weak_factory_; |
79 // Fetcher for Google Now cards. | |
80 scoped_ptr<net::URLFetcher> fetcher_; | |
78 | 81 |
79 DISALLOW_COPY_AND_ASSIGN(GoogleNowService); | 82 DISALLOW_COPY_AND_ASSIGN(GoogleNowService); |
80 }; | 83 }; |
81 | 84 |
82 #endif // CHROME_BROWSER_UI_GOOGLE_NOW_GOOGLE_NOW_SERVICE_H_ | 85 #endif // CHROME_BROWSER_UI_GOOGLE_NOW_GOOGLE_NOW_SERVICE_H_ |
OLD | NEW |