OLD | NEW |
(Empty) | |
| 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_UI_GOOGLE_NOW_GOOGLE_NOW_SERVICE_H_ |
| 6 #define CHROME_BROWSER_UI_GOOGLE_NOW_GOOGLE_NOW_SERVICE_H_ |
| 7 |
| 8 #include "base/timer.h" |
| 9 #include "chrome/browser/profiles/profile_keyed_service.h" |
| 10 |
| 11 class Profile; |
| 12 |
| 13 namespace content { |
| 14 struct Geoposition; |
| 15 } |
| 16 |
| 17 namespace net { |
| 18 class URLRequest; |
| 19 } |
| 20 |
| 21 // The Google Now service gets Google Now cards from the server and shows them |
| 22 // as Chrome notifications. |
| 23 // The service performs periodic updating of Google Now cards. |
| 24 // Each updating of the cards consists of 3 steps: |
| 25 // 1. Obtaining the location of the machine (asynchronous); |
| 26 // 2. Making a server request (asynchronous); |
| 27 // 3. Showing the cards as notifications. |
| 28 class GoogleNowService : public ProfileKeyedService { |
| 29 public: |
| 30 // Must call Init after construction. |
| 31 explicit GoogleNowService(Profile* profile); |
| 32 void Init(); |
| 33 |
| 34 private: |
| 35 // Parsed response from the server. |
| 36 struct ServerResponse; |
| 37 |
| 38 // Returns true if Google Now integration is enabled for the profile. |
| 39 bool IsGoogleNowEnabled() const; |
| 40 // Gets new cards from the server and shows them as notifications. |
| 41 void UpdateCards(); |
| 42 |
| 43 // Schedules next cards update after the specified delay. |
| 44 void StartWaitingForNextUpdate(int64 delay_ms); |
| 45 void OnWaitingForNextUpdateEnds(); |
| 46 |
| 47 // Starts obtaining location of the machine. |
| 48 void StartObtainingGeolocation(); |
| 49 void OnLocationObtained(const content::Geoposition& position); |
| 50 |
| 51 // Starts downloading cards from the server. |
| 52 void StartServerRequest(const content::Geoposition& position); |
| 53 void OnServerRequestCompleted(net::URLRequest* request, int num_bytes); |
| 54 |
| 55 // Returns true if the location can be used for the server request. |
| 56 static bool IsLocationGood(const content::Geoposition& position); |
| 57 |
| 58 // Parses server response. Returns true if the parsing was successful. |
| 59 static bool ParseServerResponse(const net::URLRequest* request, int num_bytes, |
| 60 ServerResponse* server_response); |
| 61 |
| 62 // Shows Google Now cards as notifications. |
| 63 void ShowNotifications(const ServerResponse& server_response); |
| 64 |
| 65 // The profile. |
| 66 Profile* const profile_; |
| 67 // Timer to schedule next cards update. |
| 68 base::OneShotTimer<GoogleNowService> next_update_timer_; |
| 69 |
| 70 DISALLOW_COPY_AND_ASSIGN(GoogleNowService); |
| 71 }; |
| 72 |
| 73 #endif // CHROME_BROWSER_UI_GOOGLE_NOW_GOOGLE_NOW_SERVICE_H_ |
OLD | NEW |