#include "core/page/ChromeClient.h"
#include "core/page/Page.h"
#include "core/workers/WorkerGlobalScopeProxy.h"
+#include "platform/network/ResourceError.h"
#include "platform/network/ResourceResponse.h"
#include "wtf/text/StringBuilder.h"
ExecutionContext* context = frame().document();
if (!context)
return;
+ if (!messageStorage())
+ return;
String messageURL;
unsigned lineNumber = 0;
ConsoleMessageStorage* FrameConsole::messageStorage()
{
- LocalFrame* curFrame = m_frame;
- Frame* topFrame = curFrame->tree().top();
- ASSERT(topFrame->isLocalFrame());
- LocalFrame* localTopFrame = toLocalFrame(topFrame);
- if (localTopFrame != curFrame)
- return localTopFrame->console().messageStorage();
- if (!m_consoleMessageStorage)
- m_consoleMessageStorage = ConsoleMessageStorage::createForFrame(m_frame);
- return m_consoleMessageStorage.get();
+ if (!m_frame->host())
+ return nullptr;
+ return &m_frame->host()->consoleMessageStorage();
}
void FrameConsole::clearMessages()
{
- messageStorage()->clear();
+ ConsoleMessageStorage* storage = messageStorage();
+ if (storage)
+ storage->clear();
}
void FrameConsole::adoptWorkerMessagesAfterTermination(WorkerGlobalScopeProxy* proxy)
{
- messageStorage()->adoptWorkerMessagesAfterTermination(proxy);
+ ConsoleMessageStorage* storage = messageStorage();
+ if (storage)
+ storage->adoptWorkerMessagesAfterTermination(proxy);
+}
+
+void FrameConsole::didFailLoading(unsigned long requestIdentifier, const ResourceError& error)
+{
+ if (error.isCancellation()) // Report failures only.
+ return;
+ ConsoleMessageStorage* storage = messageStorage();
+ if (!storage)
+ return;
+ StringBuilder message;
+ message.appendLiteral("Failed to load resource");
+ if (!error.localizedDescription().isEmpty()) {
+ message.appendLiteral(": ");
+ message.append(error.localizedDescription());
+ }
+ RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(NetworkMessageSource, ErrorMessageLevel, message.toString(), error.failingURL());
+ consoleMessage->setRequestIdentifier(requestIdentifier);
+ storage->reportMessage(consoleMessage.release());
}
void FrameConsole::trace(Visitor* visitor)
{
visitor->trace(m_frame);
- visitor->trace(m_consoleMessageStorage);
}
} // namespace blink