// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_BASE_FORWARDING_NET_LOG_H_ #define NET_BASE_FORWARDING_NET_LOG_H_ #pragma once #include "base/basictypes.h" #include "net/base/net_log.h" class MessageLoop; namespace net { // ForwardingNetLog is a wrapper that can be called on any thread, and will // forward any calls to NetLog::AddEntry() over to |impl| on the specified // message loop. // // This allows using a non-threadsafe NetLog implementation from another // thread. // // TODO(eroman): Explore making NetLog threadsafe and obviating the need // for this class. class ForwardingNetLog : public NetLog { public: // Both |impl| and |loop| must outlive the lifetime of this instance. // |impl| will be operated only from |loop|. ForwardingNetLog(NetLog* impl, MessageLoop* loop); // On destruction any outstanding call to AddEntry() which didn't make // it to |loop| yet will be cancelled. ~ForwardingNetLog(); // NetLog methods: virtual void AddEntry(EventType type, const base::TimeTicks& time, const Source& source, EventPhase phase, EventParameters* params); virtual uint32 NextID(); virtual LogLevel GetLogLevel() const; private: class Core; scoped_refptr core_; DISALLOW_COPY_AND_ASSIGN(ForwardingNetLog); }; } // namespace net #endif // NET_BASE_FORWARDING_NET_LOG_H_