Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(251)

Unified Diff: third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h

Issue 1162033004: Pull cacheinvalidations code directory into chromium repo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h
diff --git a/third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h b/third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h
new file mode 100644
index 0000000000000000000000000000000000000000..4e3be27c0ba2a5226053e659e44c6efcb563b4b6
--- /dev/null
+++ b/third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h
@@ -0,0 +1,369 @@
+// Copyright 2012 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Types used by the invalidation client library and its applications.
+
+#ifndef GOOGLE_CACHEINVALIDATION_INCLUDE_TYPES_H_
+#define GOOGLE_CACHEINVALIDATION_INCLUDE_TYPES_H_
+
+#include <string>
+
+#include "google/cacheinvalidation/deps/logging.h"
+#include "google/cacheinvalidation/deps/stl-namespace.h"
+
+namespace invalidation {
+
+using INVALIDATION_STL_NAMESPACE::string;
+
+/* Represents an opaque handle that can be used to acknowledge an invalidation
+ * event by calling InvalidationClient::Acknowledge(AckHandle) to indicate that
+ * the client has successfully handled the event.
+ */
+class AckHandle {
+ public:
+ /* Creates a new ack handle from the serialized handle_data representation. */
+ explicit AckHandle(const string& handle_data) : handle_data_(handle_data) {}
+
+ const string& handle_data() const {
+ return handle_data_;
+ }
+
+ bool operator==(const AckHandle& ack_handle) const {
+ return handle_data() == ack_handle.handle_data();
+ }
+
+ bool IsNoOp() const {
+ return handle_data_.empty();
+ }
+
+ private:
+ /* The serialized representation of the handle. */
+ string handle_data_;
+};
+
+/* An identifier for application clients in an application-defined way. I.e., a
+ * client name in an application naming scheme. This is not interpreted by the
+ * invalidation system - however, it is used opaquely to squelch invalidations
+ * for the cient causing an update, e.g., if a client C whose app client id is
+ * C.appClientId changes object X and the backend store informs the backend
+ * invalidation sytsem that X was modified by X.appClientId, the invalidation to
+ * C can then be squelched by the invalidation system.
+ */
+class ApplicationClientId {
+ public:
+ /* Creates an application id for the given client_Name. */
+ explicit ApplicationClientId(const string& client_name)
+ : client_name_(client_name) {}
+
+ const string& client_name() const {
+ return client_name_;
+ }
+
+ bool operator==(const ApplicationClientId& app_client_id) const {
+ return client_name() == app_client_id.client_name();
+ }
+
+ private:
+ string client_name_;
+};
+
+/* Possible reasons for error in InvalidationListener::InformError. The
+ * application writer must NOT assume that this is complete list since error
+ * codes may be added later. That is, for error codes that it cannot handle,
+ * it should not necessarily just crash the code. It may want to present a
+ * dialog box to the user (say). For each ErrorReason, the ErrorInfo object
+ * has a context object. We describe the type and meaning of the context for
+ * each enum value below.
+ */
+class ErrorReason {
+ public:
+ /* The provided authentication/authorization token is not valid for use. */
+ static const int AUTH_FAILURE = 1;
+
+ /* An unknown failure - more human-readable information is in the error
+ * message.
+ */
+ static const int UNKNOWN_FAILURE = -1;
+};
+
+/* Extra information about the error - cast to appropriate subtype as specified
+ * for the reason.
+ */
+class ErrorContext {
+ public:
+ virtual ~ErrorContext() {}
+};
+
+/* A context with numeric data. */
+class NumberContext : public ErrorContext {
+ public:
+ explicit NumberContext(int number) : number_(number) {}
+
+ virtual ~NumberContext() {}
+
+ int number() {
+ return number_;
+ }
+
+ private:
+ int number_;
+};
+
+/* Information about an error given to the application. */
+class ErrorInfo {
+ public:
+ /* Constructs an ErrorInfo object given the reason for the error, whether it
+ * is transient or permanent, and a helpful message describing the error.
+ */
+ ErrorInfo(int error_reason, bool is_transient,
+ const string& error_message, const ErrorContext& context)
+ : error_reason_(error_reason),
+ is_transient_(is_transient),
+ error_message_(error_message),
+ context_(context) {}
+
+ int error_reason() const {
+ return error_reason_;
+ }
+
+ bool is_transient() const {
+ return is_transient_;
+ }
+
+ const string& error_message() const {
+ return error_message_;
+ }
+
+ const ErrorContext& context() const {
+ return context_;
+ }
+
+ private:
+ /* The cause of the failure. */
+ int error_reason_;
+
+ /* Is the error transient or permanent. See discussion in Status::Code for
+ * permanent and transient failure handling.
+ */
+ bool is_transient_;
+
+ /* Human-readable description of the error. */
+ string error_message_;
+
+ /* Extra information about the error - cast to appropriate object as specified
+ * for the reason.
+ */
+ ErrorContext context_;
+};
+
+/* A class to represent a unique object id that an application can register or
+ * unregister for.
+ */
+class ObjectId {
+ public:
+ ObjectId() : is_initialized_(false) {}
+
+ /* Creates an object id for the given source and name (the name is copied). */
+ ObjectId(int source, const string& name)
+ : is_initialized_(true), source_(source), name_(name) {}
+
+ void Init(int source, const string& name) {
+ is_initialized_ = true;
+ source_ = source;
+ name_ = name;
+ }
+
+ int source() const {
+ CHECK(is_initialized_);
+ return source_;
+ }
+
+ const string& name() const {
+ CHECK(is_initialized_);
+ return name_;
+ }
+
+ bool operator==(const ObjectId& object_id) const {
+ CHECK(is_initialized_);
+ CHECK(object_id.is_initialized_);
+ return (source() == object_id.source()) && (name() == object_id.name());
+ }
+
+ private:
+ /* Whether the object id has been initialized. */
+ bool is_initialized_;
+
+ /* The invalidation source type. */
+ int source_;
+
+ /* The name/unique id for the object. */
+ string name_;
+};
+
+/* A class to represent an invalidation for a given object/version and an
+ * optional payload.
+ */
+class Invalidation {
+ public:
+ Invalidation() : is_initialized_(false) {}
+
+ /* Creates a restarted invalidation for the given object and version. */
+ Invalidation(const ObjectId& object_id, int64 version) {
+ Init(object_id, version, true);
+ }
+
+ /* Creates an invalidation for the given object, version, and payload. */
+ Invalidation(const ObjectId& object_id, int64 version,
+ const string& payload) {
+ Init(object_id, version, payload, true);
+ }
+
+ /*
+ * Creates an invalidation for the given object, version, payload,
+ * and restarted flag.
+ */
+ Invalidation(const ObjectId& object_id, int64 version, const string& payload,
+ bool is_trickle_restart) {
+ Init(object_id, version, payload, is_trickle_restart);
+ }
+
+
+ void Init(const ObjectId& object_id, int64 version, bool is_trickle_restart) {
+ Init(object_id, version, false, "", is_trickle_restart);
+ }
+
+ void Init(const ObjectId& object_id, int64 version, const string& payload,
+ bool is_trickle_restart) {
+ Init(object_id, version, true, payload, is_trickle_restart);
+ }
+
+ const ObjectId& object_id() const {
+ return object_id_;
+ }
+
+ int64 version() const {
+ return version_;
+ }
+
+ bool has_payload() const {
+ return has_payload_;
+ }
+
+ const string& payload() const {
+ return payload_;
+ }
+
+ // This method is for internal use only.
+ bool is_trickle_restart_for_internal_use() const {
+ return is_trickle_restart_;
+ }
+
+ bool operator==(const Invalidation& invalidation) const {
+ return (object_id() == invalidation.object_id()) &&
+ (version() == invalidation.version()) &&
+ (is_trickle_restart_for_internal_use() ==
+ invalidation.is_trickle_restart_for_internal_use()) &&
+ (has_payload() == invalidation.has_payload()) &&
+ (payload() == invalidation.payload());
+ }
+
+ private:
+ void Init(const ObjectId& object_id, int64 version, bool has_payload,
+ const string& payload, bool is_trickle_restart) {
+ is_initialized_ = true;
+ object_id_.Init(object_id.source(), object_id.name());
+ version_ = version;
+ has_payload_ = has_payload;
+ payload_ = payload;
+ is_trickle_restart_ = is_trickle_restart;
+ }
+
+ /* Whether this invalidation has been initialized. */
+ bool is_initialized_;
+
+ /* The object being invalidated/updated. */
+ ObjectId object_id_;
+
+ /* The new version of the object. */
+ int64 version_;
+
+ /* Whether or not the invalidation includes a payload. */
+ bool has_payload_;
+
+ /* Optional payload for the client. */
+ string payload_;
+
+ /* Flag whether the trickle restarts at this invalidation. */
+ bool is_trickle_restart_;
+};
+
+/* Information given to about a operation - success, temporary or permanent
+ * failure.
+ */
+class Status {
+ public:
+ /* Actual status of the operation: Whether successful, transient or permanent
+ * failure.
+ */
+ enum Code {
+ /* Operation was successful. */
+ SUCCESS,
+
+ /* Operation had a transient failure. The application can retry the failed
+ * operation later - if it chooses to do so, it must use a sensible backoff
+ * policy such as exponential backoff.
+ */
+ TRANSIENT_FAILURE,
+
+ /* Opration has a permanent failure. Application must not automatically
+ * retry without fixing the situation (e.g., by presenting a dialog box to
+ * the user).
+ */
+ PERMANENT_FAILURE
+ };
+
+ /* Creates a new Status object given the code and message. */
+ Status(Code code, const string& message) : code_(code), message_(message) {}
+
+ bool IsSuccess() const {
+ return code_ == SUCCESS;
+ }
+
+ bool IsTransientFailure() const {
+ return code_ == TRANSIENT_FAILURE;
+ }
+
+ bool IsPermanentFailure() const {
+ return code_ == PERMANENT_FAILURE;
+ }
+
+ const string& message() const {
+ return message_;
+ }
+
+ bool operator==(const Status& status) const {
+ return (code_ == status.code_) && (message() == status.message());
+ }
+
+ private:
+ /* Success or failure. */
+ Code code_;
+
+ /* A message describing why the state was unknown, for debugging. */
+ string message_;
+};
+
+} // namespace invalidation
+
+#endif // GOOGLE_CACHEINVALIDATION_INCLUDE_TYPES_H_

Powered by Google App Engine
This is Rietveld 408576698