blob: 36ad372b60dd19e07c07e882868bea2299eadd82 [file] [log] [blame]
// 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 CONTENT_COMMON_SERVICE_WORKER_SERVICE_WORKER_TYPES_H_
#define CONTENT_COMMON_SERVICE_WORKER_SERVICE_WORKER_TYPES_H_
#include <map>
#include <string>
#include "base/basictypes.h"
#include "base/strings/string_util.h"
#include "content/common/content_export.h"
#include "content/public/common/request_context_frame_type.h"
#include "content/public/common/request_context_type.h"
#include "third_party/WebKit/public/platform/WebServiceWorkerResponseType.h"
#include "third_party/WebKit/public/platform/WebServiceWorkerState.h"
#include "url/gurl.h"
// This file is to have common definitions that are to be shared by
// browser and child process.
namespace content {
// Indicates invalid request ID (i.e. the sender does not expect it gets
// response for the message) for messaging between browser process
// and embedded worker.
static const int kInvalidServiceWorkerRequestId = -1;
// Constants for invalid identifiers.
static const int kInvalidServiceWorkerHandleId = -1;
static const int kInvalidServiceWorkerRegistrationHandleId = -1;
static const int kInvalidServiceWorkerProviderId = -1;
static const int64 kInvalidServiceWorkerRegistrationId = -1;
static const int64 kInvalidServiceWorkerVersionId = -1;
static const int64 kInvalidServiceWorkerResourceId = -1;
static const int64 kInvalidServiceWorkerResponseId = -1;
static const int kInvalidEmbeddedWorkerThreadId = -1;
enum FetchRequestMode {
FETCH_REQUEST_MODE_SAME_ORIGIN,
FETCH_REQUEST_MODE_NO_CORS,
FETCH_REQUEST_MODE_CORS,
FETCH_REQUEST_MODE_CORS_WITH_FORCED_PREFLIGHT,
FETCH_REQUEST_MODE_LAST = FETCH_REQUEST_MODE_CORS_WITH_FORCED_PREFLIGHT
};
enum FetchCredentialsMode {
FETCH_CREDENTIALS_MODE_OMIT,
FETCH_CREDENTIALS_MODE_SAME_ORIGIN,
FETCH_CREDENTIALS_MODE_INCLUDE,
FETCH_CREDENTIALS_MODE_LAST = FETCH_CREDENTIALS_MODE_INCLUDE
};
// Indicates how the service worker handled a fetch event.
enum ServiceWorkerFetchEventResult {
// Browser should fallback to native fetch.
SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK,
// Service worker provided a ServiceWorkerResponse.
SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
SERVICE_WORKER_FETCH_EVENT_LAST = SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE
};
struct ServiceWorkerCaseInsensitiveCompare {
bool operator()(const std::string& lhs, const std::string& rhs) const {
return base::strcasecmp(lhs.c_str(), rhs.c_str()) < 0;
}
};
typedef std::map<std::string, std::string, ServiceWorkerCaseInsensitiveCompare>
ServiceWorkerHeaderMap;
// To dispatch fetch request from browser to child process.
struct CONTENT_EXPORT ServiceWorkerFetchRequest {
ServiceWorkerFetchRequest();
ServiceWorkerFetchRequest(const GURL& url,
const std::string& method,
const ServiceWorkerHeaderMap& headers,
const GURL& referrer,
bool is_reload);
~ServiceWorkerFetchRequest();
FetchRequestMode mode;
RequestContextType request_context_type;
RequestContextFrameType frame_type;
GURL url;
std::string method;
ServiceWorkerHeaderMap headers;
std::string blob_uuid;
uint64 blob_size;
GURL referrer;
FetchCredentialsMode credentials_mode;
bool is_reload;
};
// Represents a response to a fetch.
struct CONTENT_EXPORT ServiceWorkerResponse {
ServiceWorkerResponse();
ServiceWorkerResponse(const GURL& url,
int status_code,
const std::string& status_text,
blink::WebServiceWorkerResponseType response_type,
const ServiceWorkerHeaderMap& headers,
const std::string& blob_uuid,
uint64 blob_size);
~ServiceWorkerResponse();
GURL url;
int status_code;
std::string status_text;
blink::WebServiceWorkerResponseType response_type;
ServiceWorkerHeaderMap headers;
std::string blob_uuid;
uint64 blob_size;
};
// Controls how requests are matched in the Cache API.
struct CONTENT_EXPORT ServiceWorkerCacheQueryParams {
ServiceWorkerCacheQueryParams();
bool ignore_search;
bool ignore_method;
bool ignore_vary;
bool prefix_match;
};
// The type of a single batch operation in the Cache API.
enum ServiceWorkerCacheOperationType {
SERVICE_WORKER_CACHE_OPERATION_TYPE_UNDEFINED,
SERVICE_WORKER_CACHE_OPERATION_TYPE_PUT,
SERVICE_WORKER_CACHE_OPERATION_TYPE_DELETE,
SERVICE_WORKER_CACHE_OPERATION_TYPE_LAST =
SERVICE_WORKER_CACHE_OPERATION_TYPE_DELETE
};
// A single batch operation for the Cache API.
struct CONTENT_EXPORT ServiceWorkerBatchOperation {
ServiceWorkerBatchOperation();
ServiceWorkerCacheOperationType operation_type;
ServiceWorkerFetchRequest request;
ServiceWorkerResponse response;
ServiceWorkerCacheQueryParams match_params;
};
// Represents initialization info for a WebServiceWorker object.
struct CONTENT_EXPORT ServiceWorkerObjectInfo {
ServiceWorkerObjectInfo();
int handle_id;
GURL scope;
GURL url;
blink::WebServiceWorkerState state;
};
struct ServiceWorkerRegistrationObjectInfo {
ServiceWorkerRegistrationObjectInfo();
int handle_id;
GURL scope;
};
struct ServiceWorkerVersionAttributes {
ServiceWorkerObjectInfo installing;
ServiceWorkerObjectInfo waiting;
ServiceWorkerObjectInfo active;
};
class ChangedVersionAttributesMask {
public:
enum {
INSTALLING_VERSION = 1 << 0,
WAITING_VERSION = 1 << 1,
ACTIVE_VERSION = 1 << 2,
CONTROLLING_VERSION = 1 << 3,
};
ChangedVersionAttributesMask() : changed_(0) {}
explicit ChangedVersionAttributesMask(int changed) : changed_(changed) {}
int changed() const { return changed_; }
void add(int changed_versions) { changed_ |= changed_versions; }
bool installing_changed() const { return !!(changed_ & INSTALLING_VERSION); }
bool waiting_changed() const { return !!(changed_ & WAITING_VERSION); }
bool active_changed() const { return !!(changed_ & ACTIVE_VERSION); }
bool controller_changed() const { return !!(changed_ & CONTROLLING_VERSION); }
private:
int changed_;
};
} // namespace content
#endif // CONTENT_COMMON_SERVICE_WORKER_SERVICE_WORKER_TYPES_H_