File: registration_info.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (137 lines) | stat: -rw-r--r-- 4,805 bytes parent folder | download | duplicates (11)
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
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_GCM_DRIVER_REGISTRATION_INFO_H_
#define COMPONENTS_GCM_DRIVER_REGISTRATION_INFO_H_

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

#include "base/memory/ref_counted.h"
#include "base/time/time.h"

namespace gcm  {

// Encapsulates the information needed to register with the server.
struct RegistrationInfo : public base::RefCounted<RegistrationInfo> {
  enum RegistrationType {
    GCM_REGISTRATION,
    INSTANCE_ID_TOKEN
  };

  // Returns the appropriate RegistrationInfo instance based on the serialized
  // key and value.
  // |registration_id| can be NULL if no interest to it.
  static scoped_refptr<RegistrationInfo> BuildFromString(
      const std::string& serialized_key,
      const std::string& serialized_value,
      std::string* registration_id);

  RegistrationInfo();

  // Returns the type of the registration info.
  virtual RegistrationType GetType() const = 0;

  // For persisting to the store. Depending on the type, part of the
  // registration info is written as key. The remaining of the registration
  // info plus the registration ID are written as value.
  virtual std::string GetSerializedKey() const = 0;
  virtual std::string GetSerializedValue(
      const std::string& registration_id) const = 0;
  // |registration_id| can be NULL if it is of no interest to the caller.
  virtual bool Deserialize(const std::string& serialized_key,
                           const std::string& serialized_value,
                           std::string* registration_id) = 0;

  // Every registration is associated with an application.
  std::string app_id;
  base::Time last_validated;

 protected:
  friend class base::RefCounted<RegistrationInfo>;
  virtual ~RegistrationInfo();
};

// For GCM registration.
struct GCMRegistrationInfo final : public RegistrationInfo {
  GCMRegistrationInfo();

  // Converts from the base type;
  static const GCMRegistrationInfo* FromRegistrationInfo(
      const RegistrationInfo* registration_info);
  static GCMRegistrationInfo* FromRegistrationInfo(
      RegistrationInfo* registration_info);

  // RegistrationInfo overrides:
  RegistrationType GetType() const override;
  std::string GetSerializedKey() const override;
  std::string GetSerializedValue(
      const std::string& registration_id) const override;
  bool Deserialize(const std::string& serialized_key,
                   const std::string& serialized_value,
                   std::string* registration_id) override;

  // List of IDs of the servers that are allowed to send the messages to the
  // application. These IDs are assigned by the Google API Console.
  std::vector<std::string> sender_ids;

 private:
  ~GCMRegistrationInfo() override;
};

// For InstanceID token retrieval.
struct InstanceIDTokenInfo final : public RegistrationInfo {
  InstanceIDTokenInfo();

  // Converts from the base type;
  static const InstanceIDTokenInfo* FromRegistrationInfo(
      const RegistrationInfo* registration_info);
  static InstanceIDTokenInfo* FromRegistrationInfo(
      RegistrationInfo* registration_info);

  // RegistrationInfo overrides:
  RegistrationType GetType() const override;
  std::string GetSerializedKey() const override;
  std::string GetSerializedValue(
      const std::string& registration_id) const override;
  bool Deserialize(const std::string& serialized_key,
                   const std::string& serialized_value,
                   std::string* registration_id) override;

  // Entity that is authorized to access resources associated with the Instance
  // ID. It can be another Instance ID or a project ID assigned by the Google
  // API Console.
  std::string authorized_entity;

  // Authorized actions that the authorized entity can take.
  // E.g. for sending GCM messages, 'GCM' scope should be used.
  std::string scope;

  // Specifies TTL of retrievable token, zero value means unlimited TTL.
  // Not serialized/deserialized.
  base::TimeDelta time_to_live;

 private:
  ~InstanceIDTokenInfo() override;
};

struct RegistrationInfoComparer {
  bool operator()(const scoped_refptr<RegistrationInfo>& a,
                  const scoped_refptr<RegistrationInfo>& b) const;
};

// Collection of registration info.
// Map from RegistrationInfo instance to registration ID.
using RegistrationInfoMap = std::
    map<scoped_refptr<RegistrationInfo>, std::string, RegistrationInfoComparer>;

// Returns true if a GCM registration for |app_id| exists in |map|.
bool ExistsGCMRegistrationInMap(const RegistrationInfoMap& map,
                                const std::string& app_id);

}  // namespace gcm

#endif  // COMPONENTS_GCM_DRIVER_REGISTRATION_INFO_H_