Fix Bug 22158: Would like to turn on WebCore logging channels via an environment...
authoraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Nov 2008 18:38:56 +0000 (18:38 +0000)
committeraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Nov 2008 18:38:56 +0000 (18:38 +0000)
WebCore:

        Fix Bug 22158: Would like to turn on WebCore logging channels via an
        environment variable

        <https://bugs.webkit.org/show_bug.cgi?id=22158>

        Logging channels can now be enabled by setting the WebCoreLogLevel
        environment variable to a hexadecimal number.

        Reviewed by Anders Carlsson.

        * WebCore.vcproj/WebCore.vcproj: Added LoggingWin.cpp.
        * platform/win/LoggingWin.cpp: Copied from WebCore/platform/mac/LoggingMac.mm.
        (WebCore::initializeWithUserDefault): Read in the WebCoreLogLevel
        environment variable, parse its value as a hexadecimal number, and
        turn the channel on/off based on whether the mask bit is set.
        (WebCore::InitializeLoggingChannelsIfNecessary): Initialize each
        logging channel in turn.

WebKit/win:

        Fix Bug 22158: Would like to turn on WebCore logging channels via an
        environment variable

        <https://bugs.webkit.org/show_bug.cgi?id=22158>

        Reviewed by Anders Carlsson.

        * WebView.cpp:
        (WebView::initWithFrame): Call WebCore's
        InitializeLoggingChannelsIfNecessary.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@38266 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/WebCore.vcproj/WebCore.vcproj
WebCore/platform/win/LoggingWin.cpp [new file with mode: 0644]
WebKit/win/ChangeLog
WebKit/win/WebView.cpp

index f6bc12b..53d03fa 100644 (file)
@@ -1,3 +1,23 @@
+2008-11-10  Adam Roben  <aroben@apple.com>
+
+        Fix Bug 22158: Would like to turn on WebCore logging channels via an
+        environment variable
+
+        <https://bugs.webkit.org/show_bug.cgi?id=22158>
+
+        Logging channels can now be enabled by setting the WebCoreLogLevel
+        environment variable to a hexadecimal number.
+
+        Reviewed by Anders Carlsson.
+
+        * WebCore.vcproj/WebCore.vcproj: Added LoggingWin.cpp.
+        * platform/win/LoggingWin.cpp: Copied from WebCore/platform/mac/LoggingMac.mm.
+        (WebCore::initializeWithUserDefault): Read in the WebCoreLogLevel
+        environment variable, parse its value as a hexadecimal number, and
+        turn the channel on/off based on whether the mask bit is set.
+        (WebCore::InitializeLoggingChannelsIfNecessary): Initialize each
+        logging channel in turn.
+
 2008-11-10  Darin Adler  <darin@apple.com>
 
         Reviewed by Adam Roben.
index 416a1e4..1b2ffe7 100644 (file)
                                        >\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\platform\win\LoggingWin.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\platform\win\MIMETypeRegistryWin.cpp"\r
                                        >\r
                                </File>\r
diff --git a/WebCore/platform/win/LoggingWin.cpp b/WebCore/platform/win/LoggingWin.cpp
new file mode 100644 (file)
index 0000000..bb0e4f4
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "Logging.h"
+
+#include "PlatformString.h"
+#include <wtf/OwnArrayPtr.h>
+
+namespace WebCore {
+
+static inline void initializeWithUserDefault(WTFLogChannel& channel)
+{
+    DWORD length = GetEnvironmentVariableA(channel.defaultName, 0, 0);
+    if (!length)
+        return;
+
+    OwnArrayPtr<char> buffer(new char[length]);
+
+    if (!GetEnvironmentVariableA(channel.defaultName, buffer.get(), length))
+        return;
+
+    String variableValue(buffer.get());
+
+    static const String& hexadecimalPrefix = *new String("0x");
+    if (variableValue.length() < 3 || !variableValue.startsWith(hexadecimalPrefix, false)) {
+        LOG_ERROR("Unable to parse hex value for %s (%s), logging is off", channel.defaultName, buffer.get());
+        return;
+    }
+
+    String unprefixedValue = variableValue.substring(2);
+
+    // Now parse the unprefixed string as a hexadecimal number.
+    bool parsedSuccessfully = false;
+    unsigned logLevel = unprefixedValue.toUIntStrict(&parsedSuccessfully, 16);
+
+    if (!parsedSuccessfully) {
+        LOG_ERROR("Unable to parse hex value for %s (%s), logging is off", channel.defaultName, buffer.get());
+        return;
+    }
+
+    if ((logLevel & channel.mask) == channel.mask)
+        channel.state = WTFLogChannelOn;
+    else
+        channel.state = WTFLogChannelOff;
+}
+
+void InitializeLoggingChannelsIfNecessary()
+{
+    static bool haveInitializedLoggingChannels = false;
+    if (haveInitializedLoggingChannels)
+        return;
+    haveInitializedLoggingChannels = true;
+
+    initializeWithUserDefault(LogNotYetImplemented);
+    initializeWithUserDefault(LogFrames);
+    initializeWithUserDefault(LogLoading);
+    initializeWithUserDefault(LogPopupBlocking);
+    initializeWithUserDefault(LogEvents);
+    initializeWithUserDefault(LogEditing);
+    initializeWithUserDefault(LogTextConversion);
+    initializeWithUserDefault(LogIconDatabase);
+    initializeWithUserDefault(LogSQLDatabase);
+    initializeWithUserDefault(LogSpellingAndGrammar);
+    initializeWithUserDefault(LogBackForward);
+    initializeWithUserDefault(LogHistory);
+    initializeWithUserDefault(LogPageCache);
+    initializeWithUserDefault(LogPlatformLeaks);
+    initializeWithUserDefault(LogNetwork);
+    initializeWithUserDefault(LogFTP);
+    initializeWithUserDefault(LogThreading);
+    initializeWithUserDefault(LogStorageAPI);
+    initializeWithUserDefault(LogMedia);
+    initializeWithUserDefault(LogPlugin);
+    initializeWithUserDefault(LogArchives);
+}
+
+} // namespace WebCore
index d171d6c..dd0abb7 100644 (file)
@@ -1,3 +1,16 @@
+2008-11-10  Adam Roben  <aroben@apple.com>
+
+        Fix Bug 22158: Would like to turn on WebCore logging channels via an
+        environment variable
+
+        <https://bugs.webkit.org/show_bug.cgi?id=22158>
+
+        Reviewed by Anders Carlsson.
+
+        * WebView.cpp:
+        (WebView::initWithFrame): Call WebCore's
+        InitializeLoggingChannelsIfNecessary.
+
 2008-11-08  Dan Bernstein  <mitz@apple.com>
 
         Reviewed by Darin Adler.
index 68e0c86..0003f58 100644 (file)
@@ -2146,6 +2146,7 @@ HRESULT STDMETHODCALLTYPE WebView::initWithFrame(
     sharedPreferences->willAddToWebView();
     m_preferences = sharedPreferences;
 
+    InitializeLoggingChannelsIfNecessary();
     WebKitSetWebDatabasesPathIfNecessary();
     WebKitSetApplicationCachePathIfNecessary();