| Index: Source/core/dom/SandboxFlags.cpp | 
| diff --git a/Source/core/dom/SandboxFlags.cpp b/Source/core/dom/SandboxFlags.cpp | 
| index 8d8e01c2f7971c60a5cb31dd3e1df6f1aa0d0f6c..c6b531c627fc60efde69e3a94782ca91aaabc9de 100644 | 
| --- a/Source/core/dom/SandboxFlags.cpp | 
| +++ b/Source/core/dom/SandboxFlags.cpp | 
| @@ -91,4 +91,43 @@ SandboxFlags parseSandboxPolicy(const String& policy, String& invalidTokensError | 
| return flags; | 
| } | 
|  | 
| +String parseSuboriginName(const String& policy, String& invalidTokensErrorMessage) | 
| +{ | 
| +    // Parse the name of the suborigin (no spaces, single string) | 
| +    unsigned length = policy.length(); | 
| +    unsigned start = 0; | 
| +    while (start < length && isHTMLSpace<UChar>(policy[start])) | 
| +        ++start; | 
| + | 
| +    if (start >= length) { | 
| +        invalidTokensErrorMessage = "No suborigin name specified."; | 
| +        return ""; | 
| +    } | 
| + | 
| +    unsigned end = start + 1; | 
| +    while (end < length && !isHTMLSpace<UChar>(policy[end])) { | 
| +        if (!isASCIIAlphanumeric<UChar>(policy[end])) { | 
| +            invalidTokensErrorMessage = "Invalid character \'" + policy.substring(end, 1) + "\' in suborigin."; | 
| +        } | 
| +        ++end; | 
| +    } | 
| + | 
| +    if (start >= end) { | 
| +        invalidTokensErrorMessage = "Empty suborigin name specified."; | 
| +        return ""; | 
| +    } | 
| + | 
| +    unsigned finalSpaces = end + 1; | 
| +    // Make sure there is nothing else specified after the final space. | 
| +    while (finalSpaces < length && isHTMLSpace<UChar>(policy[finalSpaces])) | 
| +        ++finalSpaces; | 
| + | 
| +    if (finalSpaces < length) { | 
| +        invalidTokensErrorMessage = "There cannot be any spaces in the suborigin name."; | 
| +        return ""; | 
| +    } | 
| + | 
| +    return policy.substring(start, end - start); | 
| +} | 
| + | 
| } | 
|  |