Chromium Code Reviews| 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 f4f37fdba24811f0ecf2c555529aede3030cabc1..f0f933f0f8cdda963bd43e8f84aa8fea66b604b9 100644 |
| --- a/third_party/WebKit/Source/core/origin_trials/OriginTrialContext.cpp |
| +++ b/third_party/WebKit/Source/core/origin_trials/OriginTrialContext.cpp |
| @@ -87,10 +87,10 @@ const char* OriginTrialContext::supplementName() |
| } |
| // static |
| -OriginTrialContext* OriginTrialContext::from(ExecutionContext* host) |
| +OriginTrialContext* OriginTrialContext::from(ExecutionContext* host, bool create) |
| { |
| OriginTrialContext* originTrials = static_cast<OriginTrialContext*>(Supplement<ExecutionContext>::from(host, supplementName())); |
| - if (!originTrials) { |
| + if (!originTrials && create) { |
| originTrials = new OriginTrialContext(host); |
| Supplement<ExecutionContext>::provideTo(*host, supplementName(), originTrials); |
| } |
| @@ -122,18 +122,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, false); |
|
kinuko
2016/04/29 09:43:05
nit: add comment to note this doesn't create a new
Marijn Kruisselbrink
2016/05/02 23:19:31
Changed it to enum.
|
| + 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()) { |