File: copresence_api.h

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (151 lines) | stat: -rw-r--r-- 5,085 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_EXTENSIONS_API_COPRESENCE_COPRESENCE_API_H_
#define CHROME_BROWSER_EXTENSIONS_API_COPRESENCE_COPRESENCE_API_H_

#include <map>
#include <string>
#include <vector>

#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/extensions/api/copresence/copresence_translations.h"
#include "chrome/browser/extensions/chrome_extension_function.h"
#include "chrome/common/extensions/api/copresence.h"
#include "components/copresence/public/copresence_delegate.h"
#include "extensions/browser/browser_context_keyed_api_factory.h"

class ChromeWhispernetClient;

namespace copresence {
class CopresenceManager;
class WhispernetClient;
}

namespace gcm {
class GCMDriver;
}

namespace user_prefs {
class PrefRegistrySyncable;
}

namespace extensions {

class CopresenceService final : public BrowserContextKeyedAPI,
                                public copresence::CopresenceDelegate {
 public:
  explicit CopresenceService(content::BrowserContext* context);
  ~CopresenceService() override;

  // BrowserContextKeyedAPI implementation.
  static const bool kServiceHasOwnInstanceInIncognito = true;
  void Shutdown() override;

  // These accessors will always return an object (except during shutdown).
  // If the object doesn't exist, they will create one first.
  copresence::CopresenceManager* manager();
  copresence::WhispernetClient* whispernet_client();

  // A registry containing the app id's associated with every subscription.
  SubscriptionToAppMap& apps_by_subscription_id() {
    return apps_by_subscription_id_;
  }

  const std::string auth_token(const std::string& app_id) const;

  void set_api_key(const std::string& app_id,
                   const std::string& api_key);

  void set_auth_token(const std::string& app_id,
                      const std::string& token);

  // Delete all current copresence data, including stored device IDs.
  void ResetState();

  // Manager override for testing.
  void set_manager_for_testing(
      scoped_ptr<copresence::CopresenceManager> manager);

  // Registers the preference for saving our device IDs.
  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);

  // BrowserContextKeyedAPI implementation.
  static BrowserContextKeyedAPIFactory<CopresenceService>* GetFactoryInstance();

 private:
  friend class BrowserContextKeyedAPIFactory<CopresenceService>;

  // CopresenceDelegate implementation
  void HandleMessages(const std::string& app_id,
                      const std::string& subscription_id,
                      const std::vector<copresence::Message>& message) override;
  void HandleStatusUpdate(copresence::CopresenceStatus status) override;
  net::URLRequestContextGetter* GetRequestContext() const override;
  const std::string GetPlatformVersionString() const override;
  const std::string GetAPIKey(const std::string& app_id) const override;
  const std::string GetProjectId(const std::string& app_id) const override;
  copresence::WhispernetClient* GetWhispernetClient() override;
  gcm::GCMDriver* GetGCMDriver() override;
  const std::string GetDeviceId(bool authenticated) override;
  void SaveDeviceId(bool authenticated, const std::string& device_id) override;

  // BrowserContextKeyedAPI implementation.
  static const char* service_name() { return "CopresenceService"; }

  PrefService* GetPrefService();

  bool is_shutting_down_;
  content::BrowserContext* const browser_context_;

  std::map<std::string, std::string> apps_by_subscription_id_;

  std::map<std::string, std::string> api_keys_by_app_;
  std::map<std::string, std::string> auth_tokens_by_app_;

  scoped_ptr<copresence::CopresenceManager> manager_;
  scoped_ptr<ChromeWhispernetClient> whispernet_client_;

  DISALLOW_COPY_AND_ASSIGN(CopresenceService);
};

template <>
void BrowserContextKeyedAPIFactory<
    CopresenceService>::DeclareFactoryDependencies();

class CopresenceExecuteFunction : public ChromeUIThreadExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("copresence.execute", COPRESENCE_EXECUTE);

 protected:
  ~CopresenceExecuteFunction() override {}
  ExtensionFunction::ResponseAction Run() override;

 private:
  void SendResult(copresence::CopresenceStatus status);
};

class CopresenceSetApiKeyFunction : public ChromeUIThreadExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("copresence.setApiKey", COPRESENCE_SETAPIKEY);

 protected:
  ~CopresenceSetApiKeyFunction() override {}
  ExtensionFunction::ResponseAction Run() override;
};

class CopresenceSetAuthTokenFunction : public ChromeUIThreadExtensionFunction {
 public:
  DECLARE_EXTENSION_FUNCTION("copresence.setAuthToken",
                             COPRESENCE_SETAUTHTOKEN);

 protected:
  ~CopresenceSetAuthTokenFunction() override {}
  ExtensionFunction::ResponseAction Run() override;
};

}  // namespace extensions

#endif  // CHROME_BROWSER_EXTENSIONS_API_COPRESENCE_COPRESENCE_API_H_