1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_CONSOLE_LOGGER_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_CONSOLE_LOGGER_H_
#include <optional>
#include "third_party/blink/public/mojom/devtools/console_message.mojom-blink-forward.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/heap/member.h"
#include "third_party/blink/renderer/platform/heap/visitor.h"
#include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/blink/renderer/platform/wtf/forward.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
class ConsoleMessage;
// A pure virtual interface for console logging.
// Retaining an instance of ConsoleLogger may be dangerous because after the
// associated fetcher is detached it leads to a leak. Use
// DetachableConsoleLogger in such a case.
class PLATFORM_EXPORT ConsoleLogger : public GarbageCollectedMixin {
public:
ConsoleLogger() = default;
virtual ~ConsoleLogger() = default;
void AddConsoleMessage(mojom::blink::ConsoleMessageSource source,
mojom::blink::ConsoleMessageLevel level,
const String& message,
bool discard_duplicates = false,
std::optional<mojom::blink::ConsoleMessageCategory>
category = std::nullopt) {
AddConsoleMessageImpl(source, level, message, discard_duplicates, category);
}
void AddConsoleMessage(ConsoleMessage* message,
bool discard_duplicates = false) {
AddConsoleMessageImpl(message, discard_duplicates);
}
private:
virtual void AddConsoleMessageImpl(
mojom::blink::ConsoleMessageSource,
mojom::blink::ConsoleMessageLevel,
const String& message,
bool discard_duplicates,
std::optional<mojom::blink::ConsoleMessageCategory> category) = 0;
virtual void AddConsoleMessageImpl(ConsoleMessage* message,
bool discard_duplicates) = 0;
};
// A ConsoleLogger subclass which has Detach() method. An instance of
// DetachableConsoleLogger can be kept even when the associated fetcher is
// detached.
class PLATFORM_EXPORT DetachableConsoleLogger final
: public GarbageCollected<DetachableConsoleLogger>,
public ConsoleLogger {
public:
DetachableConsoleLogger() : DetachableConsoleLogger(nullptr) {}
DetachableConsoleLogger(ConsoleLogger* logger) : logger_(logger) {}
// Detaches |logger_|. After this function is called AddConsoleMessage will
// be no-op.
void Detach() { logger_ = nullptr; }
void Trace(Visitor* visitor) const override {
visitor->Trace(logger_);
ConsoleLogger::Trace(visitor);
}
Member<ConsoleLogger> logger_;
private:
void AddConsoleMessageImpl(
mojom::blink::ConsoleMessageSource source,
mojom::blink::ConsoleMessageLevel level,
const String& message,
bool discard_duplicates,
std::optional<mojom::blink::ConsoleMessageCategory> category) override {
if (!logger_) {
return;
}
logger_->AddConsoleMessage(source, level, message, discard_duplicates,
category);
}
void AddConsoleMessageImpl(ConsoleMessage* message,
bool discard_duplicates) override {
if (!logger_) {
return;
}
logger_->AddConsoleMessage(message, discard_duplicates);
}
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_CONSOLE_LOGGER_H_
|