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

Unified Diff: third_party/WebKit/Source/core/origin_trials/OriginTrialContext.cpp

Issue 1828063002: Add support for origin trials in workers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@trial-token-in-header-blink-document
Patch Set: fix test flakyness Created 4 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/WebKit/Source/core/origin_trials/OriginTrialContext.cpp
diff --git a/third_party/WebKit/Source/core/origin_trials/OriginTrialContext.cpp b/third_party/WebKit/Source/core/origin_trials/OriginTrialContext.cpp
index 44c881ef347584212a45367a1eddbec7c7ede2d1..ce5bfcd5aff736e0beecd1f615a05419a401d853 100644
--- a/third_party/WebKit/Source/core/origin_trials/OriginTrialContext.cpp
+++ b/third_party/WebKit/Source/core/origin_trials/OriginTrialContext.cpp
@@ -174,10 +174,10 @@ const char* OriginTrialContext::supplementName()
}
// static
-OriginTrialContext* OriginTrialContext::from(ExecutionContext* host)
+OriginTrialContext* OriginTrialContext::from(ExecutionContext* host, CreateMode create)
{
OriginTrialContext* originTrials = static_cast<OriginTrialContext*>(Supplement<ExecutionContext>::from(host, supplementName()));
- if (!originTrials) {
+ if (!originTrials && create == CreateIfNotExists) {
originTrials = new OriginTrialContext(host);
Supplement<ExecutionContext>::provideTo(*host, supplementName(), originTrials);
}
@@ -209,18 +209,38 @@ void OriginTrialContext::addTokensFromHeader(ExecutionContext* host, const Strin
std::unique_ptr<Vector<String>> tokens(parseHeaderValue(headerValue));
if (!tokens)
return;
- OriginTrialContext* context = from(host);
- for (const String& token : *tokens) {
- context->addToken(token);
- }
+ addTokens(host, parseHeaderValue(headerValue).get());
+}
+
+// static
+void OriginTrialContext::addTokens(ExecutionContext* host, const Vector<String>* tokens)
+{
+ if (!tokens || tokens->isEmpty())
+ return;
+ from(host)->addTokens(*tokens);
+}
+
+// static
+std::unique_ptr<Vector<String>> OriginTrialContext::getTokens(ExecutionContext* host)
+{
+ OriginTrialContext* context = from(host, DontCreateIfNotExists);
+ if (!context || context->m_tokens.isEmpty())
+ return nullptr;
+ return std::unique_ptr<Vector<String>>(new Vector<String>(context->m_tokens));
}
+
void OriginTrialContext::addToken(const String& token)
{
if (!token.isEmpty())
m_tokens.append(token);
}
+void OriginTrialContext::addTokens(const Vector<String>& tokens)
+{
+ m_tokens.appendVector(tokens);
+}
+
bool OriginTrialContext::isFeatureEnabled(const String& featureName, String* errorMessage, WebTrialTokenValidator* validator)
{
if (!RuntimeEnabledFeatures::experimentalFrameworkEnabled()) {

Powered by Google App Engine
This is Rietveld 408576698