Chromium Code Reviews| Index: Source/core/page/FormatConsoleMessage.cpp |
| diff --git a/Source/modules/crypto/Algorithm.cpp b/Source/core/page/FormatConsoleMessage.cpp |
| similarity index 52% |
| copy from Source/modules/crypto/Algorithm.cpp |
| copy to Source/core/page/FormatConsoleMessage.cpp |
| index a6b3637691cf0e3085570899520038e788ce7d73..33ca1594555fd52ecdb291dbf77bcbec057f591e 100644 |
| --- a/Source/modules/crypto/Algorithm.cpp |
| +++ b/Source/core/page/FormatConsoleMessage.cpp |
| @@ -29,46 +29,44 @@ |
| */ |
| #include "config.h" |
| -#include "modules/crypto/Algorithm.h" |
| +#include "core/page/FormatConsoleMessage.h" |
| -#include "modules/crypto/AesCbcParams.h" |
| -#include "modules/crypto/AesKeyGenParams.h" |
| -#include "modules/crypto/HmacParams.h" |
| -#include "modules/crypto/RsaKeyGenParams.h" |
| -#include "modules/crypto/RsaSsaParams.h" |
| +#include "core/inspector/ScriptCallFrame.h" |
| +#include "core/inspector/ScriptCallStack.h" |
| +#include "wtf/NotFound.h" |
| #include "wtf/text/WTFString.h" |
| namespace WebCore { |
| -PassRefPtr<Algorithm> Algorithm::create(const WebKit::WebCryptoAlgorithm& algorithm) |
| +// If there is already a callstack in the message (which can happen when we execute internal code with try-catch and error reporting), we don't want to include another. |
| +static bool containsStackTrace(const String& message) |
| { |
| - switch (algorithm.paramsType()) { |
| - case WebKit::WebCryptoAlgorithmParamsTypeNone: |
| - return adoptRef(new Algorithm(algorithm)); |
| - case WebKit::WebCryptoAlgorithmParamsTypeAesCbcParams: |
| - return AesCbcParams::create(algorithm); |
| - case WebKit::WebCryptoAlgorithmParamsTypeAesKeyGenParams: |
| - return AesKeyGenParams::create(algorithm); |
| - case WebKit::WebCryptoAlgorithmParamsTypeHmacParams: |
| - return HmacParams::create(algorithm); |
| - case WebKit::WebCryptoAlgorithmParamsTypeRsaSsaParams: |
| - return RsaSsaParams::create(algorithm); |
| - case WebKit::WebCryptoAlgorithmParamsTypeRsaKeyGenParams: |
| - return RsaKeyGenParams::create(algorithm); |
| - } |
| - ASSERT_NOT_REACHED(); |
| - return 0; |
| + return message.find("\n at ") != WTF::notFound; |
|
pfeldman
2013/08/14 09:53:00
This looks like a very fragile heuristic.
Devlin
2013/08/14 17:00:40
It is fragile, but there's not really a solution (
|
| } |
| -Algorithm::Algorithm(const WebKit::WebCryptoAlgorithm& algorithm) |
| - : m_algorithm(algorithm) |
| +String formatConsoleMessage(const String& originalMessage, PassRefPtr<ScriptCallStack> callStack) |
| { |
| - ScriptWrappable::init(this); |
| + String formattedMessage = originalMessage; |
| + if (containsStackTrace(formattedMessage)) |
| + return formattedMessage; |
| + |
| + for (size_t i = 0; i < callStack->size(); ++i) { |
| + const ScriptCallFrame& frame = callStack->at(i); |
| + formattedMessage.append("\n at " + (frame.functionName().length() ? frame.functionName() : String("(anonymous function)")) + " (" + frame.sourceURL() + ":" + String::number(frame.lineNumber()) + ":" + String::number(frame.columnNumber()) + ")"); |
| + } |
| + |
| + return formattedMessage; |
| } |
| -String Algorithm::name() |
| +String formatConsoleMessage(const WTF::String& originalMessage, const WTF::String& url, unsigned lineNumber, unsigned columnNumber) |
|
pfeldman
2013/08/14 09:53:00
Console message already has url, line number and c
Devlin
2013/08/14 17:00:40
Mostly it was for completeness purposes - this way
|
| { |
| - return m_algorithm.name(); |
| + String formattedMessage = originalMessage; |
| + if (containsStackTrace(formattedMessage)) |
| + return formattedMessage; |
| + |
| + formattedMessage.append("\n at (anonymous function) (" + url + ":" + String::number(lineNumber) + ":" + String::number(columnNumber) + ")"); |
| + |
| + return formattedMessage; |
| } |
| } // namespace WebCore |