17242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
27242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Use of this source code is governed by a BSD-style license that can be
37242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// found in the LICENSE file.
47242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
57242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#ifndef ConsoleMessageStorage_h
67242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#define ConsoleMessageStorage_h
77242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
87242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/inspector/ConsoleMessage.h"
97242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/heap/Handle.h"
107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "wtf/Forward.h"
117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccinamespace blink {
137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass LocalDOMWindow;
157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass WorkerGlobalScopeProxy;
167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass ConsoleMessageStorage FINAL : public NoBaseWillBeGarbageCollected<ConsoleMessageStorage> {
187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    WTF_MAKE_NONCOPYABLE(ConsoleMessageStorage);
197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccipublic:
217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    static PassOwnPtrWillBeRawPtr<ConsoleMessageStorage> createForWorker(ExecutionContext* context)
227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    {
237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return adoptPtrWillBeNoop(new ConsoleMessageStorage(context));
247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    }
257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    static PassOwnPtrWillBeRawPtr<ConsoleMessageStorage> createForFrame(LocalFrame* frame)
277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    {
287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return adoptPtrWillBeNoop(new ConsoleMessageStorage(frame));
297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    }
307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void reportMessage(PassRefPtrWillBeRawPtr<ConsoleMessage>);
327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void clear();
337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Vector<unsigned> argumentCounts() const;
357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void adoptWorkerMessagesAfterTermination(WorkerGlobalScopeProxy*);
377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void frameWindowDiscarded(LocalDOMWindow*);
387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    size_t size() const;
407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ConsoleMessage* at(size_t index) const;
417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    int expiredCount() const;
437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void trace(Visitor*);
457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciprivate:
477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    explicit ConsoleMessageStorage(ExecutionContext*);
487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    explicit ConsoleMessageStorage(LocalFrame*);
497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ExecutionContext* executionContext() const;
517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    int m_expiredCount;
537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    WillBeHeapDeque<RefPtrWillBeMember<ConsoleMessage> > m_messages;
547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RawPtrWillBeMember<ExecutionContext> m_context;
557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RawPtrWillBeMember<LocalFrame> m_frame;
567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci};
577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink
597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif // ConsoleMessageStorage_h
61