Title: [161838] trunk/Source/WebCore
Revision
161838
Author
[email protected]
Date
2014-01-12 14:07:44 -0800 (Sun, 12 Jan 2014)

Log Message

Simplify creation of XMLHttpRequestStaticData
https://bugs.webkit.org/show_bug.cgi?id=126852

Reviewed by Sam Weinig.

Add a staticData() getter that does the initialization and get rid of the explicit
calls to initializeXMLHttpRequestStaticData().

* xml/XMLHttpRequest.cpp:
(WebCore::XMLHttpRequestStaticData::XMLHttpRequestStaticData):
(WebCore::staticData):
(WebCore::XMLHttpRequest::XMLHttpRequest):
(WebCore::XMLHttpRequest::isAllowedHTTPHeader):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (161837 => 161838)


--- trunk/Source/WebCore/ChangeLog	2014-01-12 21:38:12 UTC (rev 161837)
+++ trunk/Source/WebCore/ChangeLog	2014-01-12 22:07:44 UTC (rev 161838)
@@ -1,3 +1,19 @@
+2014-01-12  Anders Carlsson  <[email protected]>
+
+        Simplify creation of XMLHttpRequestStaticData
+        https://bugs.webkit.org/show_bug.cgi?id=126852
+
+        Reviewed by Sam Weinig.
+
+        Add a staticData() getter that does the initialization and get rid of the explicit
+        calls to initializeXMLHttpRequestStaticData().
+
+        * xml/XMLHttpRequest.cpp:
+        (WebCore::XMLHttpRequestStaticData::XMLHttpRequestStaticData):
+        (WebCore::staticData):
+        (WebCore::XMLHttpRequest::XMLHttpRequest):
+        (WebCore::XMLHttpRequest::isAllowedHTTPHeader):
+
 2014-01-12  Simon Fraser  <[email protected]>
 
         Final WebCore link error: update a symbol in WebCoreSystemInterfaceIOS.mm.

Modified: trunk/Source/WebCore/xml/XMLHttpRequest.cpp (161837 => 161838)


--- trunk/Source/WebCore/xml/XMLHttpRequest.cpp	2014-01-12 21:38:12 UTC (rev 161837)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.cpp	2014-01-12 22:07:44 UTC (rev 161838)
@@ -55,6 +55,7 @@
 #include "XMLHttpRequestUpload.h"
 #include "markup.h"
 #include <heap/Strong.h>
+#include <mutex>
 #include <runtime/ArrayBuffer.h>
 #include <runtime/ArrayBufferView.h>
 #include <runtime/JSLock.h>
@@ -83,38 +84,52 @@
     WTF_MAKE_NONCOPYABLE(XMLHttpRequestStaticData); WTF_MAKE_FAST_ALLOCATED;
 public:
     XMLHttpRequestStaticData();
-    String m_proxyHeaderPrefix;
-    String m_secHeaderPrefix;
-    HashSet<String, CaseFoldingHash> m_forbiddenRequestHeaders;
+    const String m_proxyHeaderPrefix;
+    const String m_secHeaderPrefix;
+    const HashSet<String, CaseFoldingHash> m_forbiddenRequestHeaders;
 };
 
 XMLHttpRequestStaticData::XMLHttpRequestStaticData()
     : m_proxyHeaderPrefix("proxy-")
     , m_secHeaderPrefix("sec-")
+    , m_forbiddenRequestHeaders({
+        "accept-charset",
+        "accept-encoding",
+        "access-control-request-headers",
+        "access-control-request-method",
+        "connection",
+        "content-length",
+        "content-transfer-encoding",
+        "cookie",
+        "cookie2",
+        "date",
+        "expect",
+        "host",
+        "keep-alive",
+        "origin",
+        "referer",
+        "te",
+        "trailer",
+        "transfer-encoding",
+        "upgrade",
+        "user-agent",
+        "via",
+    })
 {
-    m_forbiddenRequestHeaders.add("accept-charset");
-    m_forbiddenRequestHeaders.add("accept-encoding");
-    m_forbiddenRequestHeaders.add("access-control-request-headers");
-    m_forbiddenRequestHeaders.add("access-control-request-method");
-    m_forbiddenRequestHeaders.add("connection");
-    m_forbiddenRequestHeaders.add("content-length");
-    m_forbiddenRequestHeaders.add("content-transfer-encoding");
-    m_forbiddenRequestHeaders.add("cookie");
-    m_forbiddenRequestHeaders.add("cookie2");
-    m_forbiddenRequestHeaders.add("date");
-    m_forbiddenRequestHeaders.add("expect");
-    m_forbiddenRequestHeaders.add("host");
-    m_forbiddenRequestHeaders.add("keep-alive");
-    m_forbiddenRequestHeaders.add("origin");
-    m_forbiddenRequestHeaders.add("referer");
-    m_forbiddenRequestHeaders.add("te");
-    m_forbiddenRequestHeaders.add("trailer");
-    m_forbiddenRequestHeaders.add("transfer-encoding");
-    m_forbiddenRequestHeaders.add("upgrade");
-    m_forbiddenRequestHeaders.add("user-agent");
-    m_forbiddenRequestHeaders.add("via");
 }
 
+static const XMLHttpRequestStaticData& staticData()
+{
+    std::once_flag onceFlag;
+    static const XMLHttpRequestStaticData* staticData;
+
+    std::call_once(onceFlag, [] {
+        staticData = std::make_unique<XMLHttpRequestStaticData>().release();
+    });
+
+    return *staticData;
+}
+
 static bool isSetCookieHeader(const AtomicString& name)
 {
     return equalIgnoringCase(name, "set-cookie") || equalIgnoringCase(name, "set-cookie2");
@@ -139,21 +154,6 @@
     }
 }
 
-static const XMLHttpRequestStaticData* staticData = 0;
-
-static const XMLHttpRequestStaticData* createXMLHttpRequestStaticData()
-{
-    staticData = new XMLHttpRequestStaticData;
-    return staticData;
-}
-
-static const XMLHttpRequestStaticData* initializeXMLHttpRequestStaticData()
-{
-    // Uses dummy to avoid warnings about an unused variable.
-    AtomicallyInitializedStatic(const XMLHttpRequestStaticData*, dummy = createXMLHttpRequestStaticData());
-    return dummy;
-}
-
 static void logConsoleError(ScriptExecutionContext* context, const String& message)
 {
     if (!context)
@@ -192,7 +192,6 @@
     , m_responseTypeCode(ResponseTypeDefault)
     , m_responseCacheIsValid(false)
 {
-    initializeXMLHttpRequestStaticData();
 #ifndef NDEBUG
     xmlHttpRequestCounter.increment();
 #endif
@@ -474,9 +473,8 @@
 
 bool XMLHttpRequest::isAllowedHTTPHeader(const String& name)
 {
-    initializeXMLHttpRequestStaticData();
-    return !staticData->m_forbiddenRequestHeaders.contains(name) && !name.startsWith(staticData->m_proxyHeaderPrefix, false)
-        && !name.startsWith(staticData->m_secHeaderPrefix, false);
+    return !staticData().m_forbiddenRequestHeaders.contains(name) && !name.startsWith(staticData().m_proxyHeaderPrefix, false)
+        && !name.startsWith(staticData().m_secHeaderPrefix, false);
 }
 
 void XMLHttpRequest::open(const String& method, const URL& url, ExceptionCode& ec)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to