diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog
index abff750..2d6d32e 100644
--- a/Source/JavaScriptCore/ChangeLog
+++ b/Source/JavaScriptCore/ChangeLog
@@ -1,3 +1,38 @@
+2019-10-10  Yury Semikhatsky  <yurys@chromium.org>
+
+        Web Inspector: use more C++ keywords for defining agents
+        https://bugs.webkit.org/show_bug.cgi?id=200959
+        <rdar://problem/54735374>
+
+        Reviewed by Joseph Pecoraro.
+
+        Add override annotation to overrided virtual methods in inspector code. This
+        change is automatically generated by the following command:
+        clang-tidy -checks='-*,modernize-use-override' -header-filter='.*inspector.*' -fix -p WebKitBuild/Release/
+            WebKitBuild/Release/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-84c9f43f-*.cpp
+            WebKitBuild/Release/DerivedSources/WebCore/unified-sources/UnifiedSource-84c9f43f-*.cpp
+
+        * inspector/InjectedScript.h:
+        * inspector/InjectedScriptModule.h:
+        * inspector/JSGlobalObjectConsoleClient.h:
+        * inspector/JSGlobalObjectInspectorController.h:
+        * inspector/JSGlobalObjectScriptDebugServer.h:
+        * inspector/JSInjectedScriptHost.cpp:
+        * inspector/ScriptDebugServer.h:
+        * inspector/agents/InspectorAgent.h:
+        * inspector/agents/InspectorAuditAgent.h:
+        * inspector/agents/InspectorConsoleAgent.h:
+        * inspector/agents/InspectorDebuggerAgent.h:
+        * inspector/agents/InspectorHeapAgent.h:
+        * inspector/agents/InspectorRuntimeAgent.h:
+        * inspector/agents/InspectorScriptProfilerAgent.h:
+        * inspector/agents/InspectorTargetAgent.h:
+        * inspector/agents/JSGlobalObjectAuditAgent.h:
+        * inspector/agents/JSGlobalObjectDebuggerAgent.h:
+        * inspector/agents/JSGlobalObjectRuntimeAgent.h:
+        * inspector/remote/RemoteAutomationTarget.h:
+        * inspector/remote/RemoteConnectionToTarget.h:
+
 2019-10-10  Basuke Suzuki  <Basuke.Suzuki@sony.com>
 
         [WinCairo] Move remote communication handling from RemoteInspectorServer to RemoteInspector.
diff --git a/Source/JavaScriptCore/inspector/InjectedScript.h b/Source/JavaScriptCore/inspector/InjectedScript.h
index 0bf2c92..e53cc60 100644
--- a/Source/JavaScriptCore/inspector/InjectedScript.h
+++ b/Source/JavaScriptCore/inspector/InjectedScript.h
@@ -49,7 +49,7 @@
 public:
     InjectedScript();
     InjectedScript(Deprecated::ScriptObject, InspectorEnvironment*);
-    virtual ~InjectedScript();
+    ~InjectedScript() override;
 
     struct ExecuteOptions {
         String objectGroup;
diff --git a/Source/JavaScriptCore/inspector/InjectedScriptModule.h b/Source/JavaScriptCore/inspector/InjectedScriptModule.h
index 1efc0ac..5816f53 100644
--- a/Source/JavaScriptCore/inspector/InjectedScriptModule.h
+++ b/Source/JavaScriptCore/inspector/InjectedScriptModule.h
@@ -45,7 +45,7 @@
 
 class JS_EXPORT_PRIVATE InjectedScriptModule : public InjectedScriptBase {
 public:
-    virtual ~InjectedScriptModule();
+    ~InjectedScriptModule() override;
     virtual String source() const = 0;
     virtual JSC::JSValue host(InjectedScriptManager*, JSC::ExecState*) const = 0;
 
diff --git a/Source/JavaScriptCore/inspector/JSGlobalObjectConsoleClient.h b/Source/JavaScriptCore/inspector/JSGlobalObjectConsoleClient.h
index 4113d60..90690c8 100644
--- a/Source/JavaScriptCore/inspector/JSGlobalObjectConsoleClient.h
+++ b/Source/JavaScriptCore/inspector/JSGlobalObjectConsoleClient.h
@@ -39,7 +39,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit JSGlobalObjectConsoleClient(InspectorConsoleAgent*);
-    virtual ~JSGlobalObjectConsoleClient() { }
+    ~JSGlobalObjectConsoleClient() override { }
 
     static bool logToSystemConsole();
     static void setLogToSystemConsole(bool);
diff --git a/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.h b/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.h
index 23787ea..44f1f46 100644
--- a/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.h
+++ b/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.h
@@ -68,7 +68,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     JSGlobalObjectInspectorController(JSC::JSGlobalObject&);
-    ~JSGlobalObjectInspectorController();
+    ~JSGlobalObjectInspectorController() override;
 
     void connectFrontend(FrontendChannel&, bool isAutomaticInspection, bool immediatelyPause);
     void disconnectFrontend(FrontendChannel&);
diff --git a/Source/JavaScriptCore/inspector/JSGlobalObjectScriptDebugServer.h b/Source/JavaScriptCore/inspector/JSGlobalObjectScriptDebugServer.h
index 6ff98d1..431ddcd9 100644
--- a/Source/JavaScriptCore/inspector/JSGlobalObjectScriptDebugServer.h
+++ b/Source/JavaScriptCore/inspector/JSGlobalObjectScriptDebugServer.h
@@ -34,7 +34,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     JSGlobalObjectScriptDebugServer(JSC::JSGlobalObject&);
-    virtual ~JSGlobalObjectScriptDebugServer() { }
+    ~JSGlobalObjectScriptDebugServer() override { }
 
     JSC::JSGlobalObject& globalObject() const { return m_globalObject; }
 
diff --git a/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp b/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp
index d1eabf0..6d7b92d 100644
--- a/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp
+++ b/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp
@@ -786,7 +786,7 @@
 
     HashSet<JSCell*>& holders() { return m_holders; }
 
-    void analyzeEdge(JSCell* from, JSCell* to, SlotVisitor::RootMarkReason reason)
+    void analyzeEdge(JSCell* from, JSCell* to, SlotVisitor::RootMarkReason reason) override
     {
         ASSERT(to);
         ASSERT(to->vm().heapProfiler()->activeHeapAnalyzer() == this);
@@ -811,14 +811,14 @@
         else if (!from || reason != SlotVisitor::RootMarkReason::None)
             m_rootsToInclude.add(to);
     }
-    void analyzePropertyNameEdge(JSCell* from, JSCell* to, UniquedStringImpl*) { analyzeEdge(from, to, SlotVisitor::RootMarkReason::None); }
-    void analyzeVariableNameEdge(JSCell* from, JSCell* to, UniquedStringImpl*) { analyzeEdge(from, to, SlotVisitor::RootMarkReason::None); }
-    void analyzeIndexEdge(JSCell* from, JSCell* to, uint32_t) { analyzeEdge(from, to, SlotVisitor::RootMarkReason::None); }
+    void analyzePropertyNameEdge(JSCell* from, JSCell* to, UniquedStringImpl*) override { analyzeEdge(from, to, SlotVisitor::RootMarkReason::None); }
+    void analyzeVariableNameEdge(JSCell* from, JSCell* to, UniquedStringImpl*) override { analyzeEdge(from, to, SlotVisitor::RootMarkReason::None); }
+    void analyzeIndexEdge(JSCell* from, JSCell* to, uint32_t) override { analyzeEdge(from, to, SlotVisitor::RootMarkReason::None); }
 
-    void analyzeNode(JSCell*) { }
-    void setOpaqueRootReachabilityReasonForCell(JSCell*, const char*) { }
-    void setWrappedObjectForCell(JSCell*, void*) { }
-    void setLabelForCell(JSCell*, const String&) { }
+    void analyzeNode(JSCell*) override { }
+    void setOpaqueRootReachabilityReasonForCell(JSCell*, const char*) override { }
+    void setWrappedObjectForCell(JSCell*, void*) override { }
+    void setLabelForCell(JSCell*, const String&) override { }
 
 #ifndef NDEBUG
     void dump(PrintStream& out) const
diff --git a/Source/JavaScriptCore/inspector/ScriptDebugServer.h b/Source/JavaScriptCore/inspector/ScriptDebugServer.h
index 7ea2f9c..b9cf9fd 100644
--- a/Source/JavaScriptCore/inspector/ScriptDebugServer.h
+++ b/Source/JavaScriptCore/inspector/ScriptDebugServer.h
@@ -63,7 +63,7 @@
 
 protected:
     ScriptDebugServer(JSC::VM&);
-    ~ScriptDebugServer();
+    ~ScriptDebugServer() override;
 
     virtual void attachDebugger() = 0;
     virtual void detachDebugger(bool isBeingDestroyed) = 0;
diff --git a/Source/JavaScriptCore/inspector/agents/InspectorAgent.h b/Source/JavaScriptCore/inspector/agents/InspectorAgent.h
index 8c4f8cc..a21a589 100644
--- a/Source/JavaScriptCore/inspector/agents/InspectorAgent.h
+++ b/Source/JavaScriptCore/inspector/agents/InspectorAgent.h
@@ -47,16 +47,16 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorAgent(AgentContext&);
-    virtual ~InspectorAgent();
+    ~InspectorAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*);
-    void willDestroyFrontendAndBackend(DisconnectReason);
+    void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(DisconnectReason) override;
 
     // InspectorBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void initialized(ErrorString&);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void initialized(ErrorString&) override;
 
     // CommandLineAPI
     void inspect(RefPtr<Protocol::Runtime::RemoteObject>&& objectToInspect, RefPtr<JSON::Object>&& hints);
diff --git a/Source/JavaScriptCore/inspector/agents/InspectorAuditAgent.h b/Source/JavaScriptCore/inspector/agents/InspectorAuditAgent.h
index a5614c5..e1ac3cb 100644
--- a/Source/JavaScriptCore/inspector/agents/InspectorAuditAgent.h
+++ b/Source/JavaScriptCore/inspector/agents/InspectorAuditAgent.h
@@ -43,7 +43,7 @@
     WTF_MAKE_NONCOPYABLE(InspectorAuditAgent);
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    virtual ~InspectorAuditAgent();
+    ~InspectorAuditAgent() override;
 
     // InspectorAgentBase
     void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) final;
diff --git a/Source/JavaScriptCore/inspector/agents/InspectorConsoleAgent.h b/Source/JavaScriptCore/inspector/agents/InspectorConsoleAgent.h
index bbf18b5..d351000 100644
--- a/Source/JavaScriptCore/inspector/agents/InspectorConsoleAgent.h
+++ b/Source/JavaScriptCore/inspector/agents/InspectorConsoleAgent.h
@@ -54,7 +54,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorConsoleAgent(AgentContext&);
-    virtual ~InspectorConsoleAgent();
+    ~InspectorConsoleAgent() override;
 
     // InspectorAgentBase
     void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) final;
diff --git a/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h b/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h
index 16f4bf8..9246d6c 100644
--- a/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h
+++ b/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h
@@ -53,7 +53,7 @@
     WTF_MAKE_NONCOPYABLE(InspectorDebuggerAgent);
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    virtual ~InspectorDebuggerAgent();
+    ~InspectorDebuggerAgent() override;
 
     static const char* backtraceObjectGroup;
 
diff --git a/Source/JavaScriptCore/inspector/agents/InspectorHeapAgent.h b/Source/JavaScriptCore/inspector/agents/InspectorHeapAgent.h
index 9c93667..def6acd 100644
--- a/Source/JavaScriptCore/inspector/agents/InspectorHeapAgent.h
+++ b/Source/JavaScriptCore/inspector/agents/InspectorHeapAgent.h
@@ -47,7 +47,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorHeapAgent(AgentContext&);
-    virtual ~InspectorHeapAgent();
+    ~InspectorHeapAgent() override;
 
     // InspectorAgentBase
     void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) final;
diff --git a/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h b/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h
index 71731bd..7d45054 100644
--- a/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h
+++ b/Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h
@@ -51,7 +51,7 @@
     WTF_MAKE_NONCOPYABLE(InspectorRuntimeAgent);
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    virtual ~InspectorRuntimeAgent();
+    ~InspectorRuntimeAgent() override;
 
     // InspectorAgentBase
     void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) final;
diff --git a/Source/JavaScriptCore/inspector/agents/InspectorScriptProfilerAgent.h b/Source/JavaScriptCore/inspector/agents/InspectorScriptProfilerAgent.h
index 6d4327f..9791056 100644
--- a/Source/JavaScriptCore/inspector/agents/InspectorScriptProfilerAgent.h
+++ b/Source/JavaScriptCore/inspector/agents/InspectorScriptProfilerAgent.h
@@ -44,20 +44,20 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorScriptProfilerAgent(AgentContext&);
-    virtual ~InspectorScriptProfilerAgent();
+    ~InspectorScriptProfilerAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*);
-    void willDestroyFrontendAndBackend(DisconnectReason);
+    void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(DisconnectReason) override;
 
     // ScriptProfilerBackendDispatcherHandler
-    void startTracking(ErrorString&, const bool* includeSamples);
-    void stopTracking(ErrorString&);
+    void startTracking(ErrorString&, const bool* includeSamples) override;
+    void stopTracking(ErrorString&) override;
 
     // JSC::Debugger::ProfilingClient
-    bool isAlreadyProfiling() const;
-    Seconds willEvaluateScript();
-    void didEvaluateScript(Seconds, JSC::ProfilingReason);
+    bool isAlreadyProfiling() const override;
+    Seconds willEvaluateScript() override;
+    void didEvaluateScript(Seconds, JSC::ProfilingReason) override;
 
 private:
     void addEvent(Seconds startTime, Seconds endTime, JSC::ProfilingReason);
diff --git a/Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.h b/Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.h
index 00fc3b0..312eb60 100644
--- a/Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.h
+++ b/Source/JavaScriptCore/inspector/agents/InspectorTargetAgent.h
@@ -40,7 +40,7 @@
     WTF_MAKE_NONCOPYABLE(InspectorTargetAgent);
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    virtual ~InspectorTargetAgent();
+    ~InspectorTargetAgent() override;
 
     // InspectorAgentBase
     void didCreateFrontendAndBackend(FrontendRouter*, BackendDispatcher*) final;
diff --git a/Source/JavaScriptCore/inspector/agents/JSGlobalObjectAuditAgent.h b/Source/JavaScriptCore/inspector/agents/JSGlobalObjectAuditAgent.h
index c7da193..4921d33 100644
--- a/Source/JavaScriptCore/inspector/agents/JSGlobalObjectAuditAgent.h
+++ b/Source/JavaScriptCore/inspector/agents/JSGlobalObjectAuditAgent.h
@@ -38,10 +38,10 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     JSGlobalObjectAuditAgent(JSAgentContext&);
-    virtual ~JSGlobalObjectAuditAgent();
+    ~JSGlobalObjectAuditAgent() override;
 
 private:
-    InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId);
+    InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) override;
 
     JSC::JSGlobalObject& m_globalObject;
 };
diff --git a/Source/JavaScriptCore/inspector/agents/JSGlobalObjectDebuggerAgent.h b/Source/JavaScriptCore/inspector/agents/JSGlobalObjectDebuggerAgent.h
index a46b76a..3545f18 100644
--- a/Source/JavaScriptCore/inspector/agents/JSGlobalObjectDebuggerAgent.h
+++ b/Source/JavaScriptCore/inspector/agents/JSGlobalObjectDebuggerAgent.h
@@ -36,18 +36,18 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     JSGlobalObjectDebuggerAgent(JSAgentContext&, InspectorConsoleAgent*);
-    virtual ~JSGlobalObjectDebuggerAgent();
+    ~JSGlobalObjectDebuggerAgent() override;
 
     // ScriptDebugListener
-    void breakpointActionLog(JSC::ExecState&, const String&);
+    void breakpointActionLog(JSC::ExecState&, const String&) override;
 
 private:
-    InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId);
+    InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) override;
 
     // NOTE: JavaScript inspector does not yet need to mute a console because no messages
     // are sent to the console outside of the API boundary or console object.
-    void muteConsole() { }
-    void unmuteConsole() { }
+    void muteConsole() override { }
+    void unmuteConsole() override { }
 
     InspectorConsoleAgent* m_consoleAgent { nullptr };
 };
diff --git a/Source/JavaScriptCore/inspector/agents/JSGlobalObjectRuntimeAgent.h b/Source/JavaScriptCore/inspector/agents/JSGlobalObjectRuntimeAgent.h
index ea8574e..a347de4 100644
--- a/Source/JavaScriptCore/inspector/agents/JSGlobalObjectRuntimeAgent.h
+++ b/Source/JavaScriptCore/inspector/agents/JSGlobalObjectRuntimeAgent.h
@@ -39,15 +39,15 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     JSGlobalObjectRuntimeAgent(JSAgentContext&);
-    virtual ~JSGlobalObjectRuntimeAgent();
+    ~JSGlobalObjectRuntimeAgent() override;
 
 private:
-    InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId);
+    InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) override;
 
     // NOTE: JavaScript inspector does not yet need to mute a console because no messages
     // are sent to the console outside of the API boundary or console object.
-    void muteConsole() { }
-    void unmuteConsole() { }
+    void muteConsole() override { }
+    void unmuteConsole() override { }
 
     std::unique_ptr<RuntimeFrontendDispatcher> m_frontendDispatcher;
     RefPtr<RuntimeBackendDispatcher> m_backendDispatcher;
diff --git a/Source/JavaScriptCore/inspector/remote/RemoteAutomationTarget.h b/Source/JavaScriptCore/inspector/remote/RemoteAutomationTarget.h
index cec5288..5c74fd4 100644
--- a/Source/JavaScriptCore/inspector/remote/RemoteAutomationTarget.h
+++ b/Source/JavaScriptCore/inspector/remote/RemoteAutomationTarget.h
@@ -36,7 +36,7 @@
 
 class JS_EXPORT_PRIVATE RemoteAutomationTarget : public RemoteControllableTarget {
 public:
-    virtual ~RemoteAutomationTarget();
+    ~RemoteAutomationTarget() override;
 
     bool isPaired() const { return m_paired; }
     void setIsPaired(bool);
diff --git a/Source/JavaScriptCore/inspector/remote/RemoteConnectionToTarget.h b/Source/JavaScriptCore/inspector/remote/RemoteConnectionToTarget.h
index eecea0d..c85b64a 100644
--- a/Source/JavaScriptCore/inspector/remote/RemoteConnectionToTarget.h
+++ b/Source/JavaScriptCore/inspector/remote/RemoteConnectionToTarget.h
@@ -54,7 +54,7 @@
 #else
     RemoteConnectionToTarget(RemoteControllableTarget&);
 #endif
-    virtual ~RemoteConnectionToTarget();
+    ~RemoteConnectionToTarget() override;
 
     // Main API.
     bool setup(bool isAutomaticInspection = false, bool automaticallyPause = false);
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index c6335bc..e235154 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,62 @@
+2019-10-10  Yury Semikhatsky  <yurys@chromium.org>
+
+        Web Inspector: use more C++ keywords for defining agents
+        https://bugs.webkit.org/show_bug.cgi?id=200959
+        <rdar://problem/54735374>
+
+        Reviewed by Joseph Pecoraro.
+
+        Add override annotation to overrided virtual methods in inspector code. This
+        change is automatically generated by the following command:
+        clang-tidy -checks='-*,modernize-use-override' -header-filter='.*inspector.*' -fix -p WebKitBuild/Release/
+            WebKitBuild/Release/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-84c9f43f-*.cpp
+            WebKitBuild/Release/DerivedSources/WebCore/unified-sources/UnifiedSource-84c9f43f-*.cpp
+
+        No new tests. No behavior changes.
+
+        * inspector/InspectorController.h:
+        * inspector/InspectorFrontendClientLocal.h:
+        * inspector/InspectorFrontendHost.cpp:
+        * inspector/PageScriptDebugServer.h:
+        * inspector/WebInjectedScriptManager.h:
+        * inspector/WorkerInspectorController.h:
+        * inspector/WorkerScriptDebugServer.h:
+        * inspector/WorkerToPageFrontendChannel.h:
+        * inspector/agents/InspectorApplicationCacheAgent.h:
+        * inspector/agents/InspectorCPUProfilerAgent.h:
+        * inspector/agents/InspectorCSSAgent.h:
+        * inspector/agents/InspectorCanvasAgent.h:
+        * inspector/agents/InspectorDOMAgent.h:
+        * inspector/agents/InspectorDOMDebuggerAgent.h:
+        * inspector/agents/InspectorDOMStorageAgent.h:
+        * inspector/agents/InspectorDatabaseAgent.h:
+        * inspector/agents/InspectorIndexedDBAgent.cpp:
+        * inspector/agents/InspectorIndexedDBAgent.h:
+        * inspector/agents/InspectorLayerTreeAgent.h:
+        * inspector/agents/InspectorMemoryAgent.h:
+        * inspector/agents/InspectorNetworkAgent.cpp:
+        * inspector/agents/InspectorNetworkAgent.h:
+        * inspector/agents/InspectorPageAgent.h:
+        * inspector/agents/InspectorTimelineAgent.h:
+        * inspector/agents/InspectorWorkerAgent.h:
+        * inspector/agents/WebConsoleAgent.h:
+        * inspector/agents/WebDebuggerAgent.h:
+        * inspector/agents/WebHeapAgent.h:
+        * inspector/agents/page/PageAuditAgent.h:
+        * inspector/agents/page/PageConsoleAgent.h:
+        * inspector/agents/page/PageDOMDebuggerAgent.h:
+        * inspector/agents/page/PageDebuggerAgent.h:
+        * inspector/agents/page/PageHeapAgent.h:
+        * inspector/agents/page/PageNetworkAgent.h:
+        * inspector/agents/page/PageRuntimeAgent.h:
+        * inspector/agents/worker/ServiceWorkerAgent.h:
+        * inspector/agents/worker/WorkerAuditAgent.h:
+        * inspector/agents/worker/WorkerConsoleAgent.h:
+        * inspector/agents/worker/WorkerDOMDebuggerAgent.h:
+        * inspector/agents/worker/WorkerDebuggerAgent.h:
+        * inspector/agents/worker/WorkerNetworkAgent.h:
+        * inspector/agents/worker/WorkerRuntimeAgent.h:
+
 2019-10-10  Tim Horton  <timothy_horton@apple.com>
 
         Use HAVE(IOSURFACE_RGB10) instead of PLATFORM(IOS_FAMILY) where appropriate
diff --git a/Source/WebCore/inspector/InspectorController.h b/Source/WebCore/inspector/InspectorController.h
index 4bea432..5186d57 100644
--- a/Source/WebCore/inspector/InspectorController.h
+++ b/Source/WebCore/inspector/InspectorController.h
@@ -67,7 +67,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorController(Page&, InspectorClient*);
-    virtual ~InspectorController();
+    ~InspectorController() override;
 
     void inspectedPageDestroyed();
 
diff --git a/Source/WebCore/inspector/InspectorFrontendClientLocal.h b/Source/WebCore/inspector/InspectorFrontendClientLocal.h
index 6c1b51a..1725068 100644
--- a/Source/WebCore/inspector/InspectorFrontendClientLocal.h
+++ b/Source/WebCore/inspector/InspectorFrontendClientLocal.h
@@ -60,7 +60,7 @@
     };
 
     WEBCORE_EXPORT InspectorFrontendClientLocal(InspectorController* inspectedPageController, Page* frontendPage, std::unique_ptr<Settings>);
-    WEBCORE_EXPORT virtual ~InspectorFrontendClientLocal();
+    WEBCORE_EXPORT ~InspectorFrontendClientLocal() override;
 
     WEBCORE_EXPORT void resetState() override;
 
diff --git a/Source/WebCore/inspector/InspectorFrontendHost.cpp b/Source/WebCore/inspector/InspectorFrontendHost.cpp
index a0fd765..5a93f3b 100644
--- a/Source/WebCore/inspector/InspectorFrontendHost.cpp
+++ b/Source/WebCore/inspector/InspectorFrontendHost.cpp
@@ -86,7 +86,7 @@
     {
     }
 
-    virtual ~FrontendMenuProvider()
+    ~FrontendMenuProvider() override
     {
         contextMenuCleared();
     }
diff --git a/Source/WebCore/inspector/PageScriptDebugServer.h b/Source/WebCore/inspector/PageScriptDebugServer.h
index 853f534..f895301 100644
--- a/Source/WebCore/inspector/PageScriptDebugServer.h
+++ b/Source/WebCore/inspector/PageScriptDebugServer.h
@@ -39,7 +39,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     PageScriptDebugServer(Page&);
-    virtual ~PageScriptDebugServer() = default;
+    ~PageScriptDebugServer() override = default;
 
     void recompileAllJSFunctions() override;
 
diff --git a/Source/WebCore/inspector/WebInjectedScriptManager.h b/Source/WebCore/inspector/WebInjectedScriptManager.h
index 5945f8e..cad9989 100644
--- a/Source/WebCore/inspector/WebInjectedScriptManager.h
+++ b/Source/WebCore/inspector/WebInjectedScriptManager.h
@@ -38,7 +38,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     WebInjectedScriptManager(Inspector::InspectorEnvironment&, Ref<Inspector::InjectedScriptHost>&&);
-    virtual ~WebInjectedScriptManager() = default;
+    ~WebInjectedScriptManager() override = default;
 
     const RefPtr<CommandLineAPIHost>& commandLineAPIHost() const { return m_commandLineAPIHost; }
 
diff --git a/Source/WebCore/inspector/WorkerInspectorController.h b/Source/WebCore/inspector/WorkerInspectorController.h
index 421acbb..408fc22 100644
--- a/Source/WebCore/inspector/WorkerInspectorController.h
+++ b/Source/WebCore/inspector/WorkerInspectorController.h
@@ -49,7 +49,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit WorkerInspectorController(WorkerGlobalScope&);
-    virtual ~WorkerInspectorController();
+    ~WorkerInspectorController() override;
 
     void workerTerminating();
 
diff --git a/Source/WebCore/inspector/WorkerScriptDebugServer.h b/Source/WebCore/inspector/WorkerScriptDebugServer.h
index e33feee..4508271 100644
--- a/Source/WebCore/inspector/WorkerScriptDebugServer.h
+++ b/Source/WebCore/inspector/WorkerScriptDebugServer.h
@@ -42,7 +42,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     WorkerScriptDebugServer(WorkerGlobalScope&);
-    ~WorkerScriptDebugServer() = default;
+    ~WorkerScriptDebugServer() override = default;
 
     void recompileAllJSFunctions() override;
 
diff --git a/Source/WebCore/inspector/WorkerToPageFrontendChannel.h b/Source/WebCore/inspector/WorkerToPageFrontendChannel.h
index 5e616eb..c026211 100644
--- a/Source/WebCore/inspector/WorkerToPageFrontendChannel.h
+++ b/Source/WebCore/inspector/WorkerToPageFrontendChannel.h
@@ -39,7 +39,7 @@
         : m_workerGlobalScope(workerGlobalScope)
     {
     }
-    ~WorkerToPageFrontendChannel() = default;
+    ~WorkerToPageFrontendChannel() override = default;
 
 private:
     ConnectionType connectionType() const override { return ConnectionType::Local; }
diff --git a/Source/WebCore/inspector/agents/InspectorApplicationCacheAgent.h b/Source/WebCore/inspector/agents/InspectorApplicationCacheAgent.h
index f16184f..51988f6 100644
--- a/Source/WebCore/inspector/agents/InspectorApplicationCacheAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorApplicationCacheAgent.h
@@ -46,18 +46,18 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorApplicationCacheAgent(PageAgentContext&);
-    virtual ~InspectorApplicationCacheAgent();
+    ~InspectorApplicationCacheAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // ApplicationCacheBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void getFramesWithManifests(ErrorString&, RefPtr<JSON::ArrayOf<Inspector::Protocol::ApplicationCache::FrameWithManifest>>& result);
-    void getManifestForFrame(ErrorString&, const String& frameId, String* manifestURL);
-    void getApplicationCacheForFrame(ErrorString&, const String& frameId, RefPtr<Inspector::Protocol::ApplicationCache::ApplicationCache>&);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void getFramesWithManifests(ErrorString&, RefPtr<JSON::ArrayOf<Inspector::Protocol::ApplicationCache::FrameWithManifest>>& result) override;
+    void getManifestForFrame(ErrorString&, const String& frameId, String* manifestURL) override;
+    void getApplicationCacheForFrame(ErrorString&, const String& frameId, RefPtr<Inspector::Protocol::ApplicationCache::ApplicationCache>&) override;
 
     // InspectorInstrumentation
     void updateApplicationCacheStatus(Frame*);
diff --git a/Source/WebCore/inspector/agents/InspectorCPUProfilerAgent.h b/Source/WebCore/inspector/agents/InspectorCPUProfilerAgent.h
index 5bfabfa..4ee8e97 100644
--- a/Source/WebCore/inspector/agents/InspectorCPUProfilerAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorCPUProfilerAgent.h
@@ -41,15 +41,15 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorCPUProfilerAgent(PageAgentContext&);
-    virtual ~InspectorCPUProfilerAgent();
+    ~InspectorCPUProfilerAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // CPUProfilerBackendDispatcherHandler
-    void startTracking(ErrorString&);
-    void stopTracking(ErrorString&);
+    void startTracking(ErrorString&) override;
+    void stopTracking(ErrorString&) override;
 
 private:
     void collectSample(const ResourceUsageData&);
diff --git a/Source/WebCore/inspector/agents/InspectorCSSAgent.h b/Source/WebCore/inspector/agents/InspectorCSSAgent.h
index 56dcfa3..e43cb5b 100644
--- a/Source/WebCore/inspector/agents/InspectorCSSAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorCSSAgent.h
@@ -58,7 +58,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorCSSAgent(WebAgentContext&);
-    virtual ~InspectorCSSAgent();
+    ~InspectorCSSAgent() override;
 
     class InlineStyleOverrideScope {
     public:
@@ -80,29 +80,29 @@
     static CSSStyleRule* asCSSStyleRule(CSSRule&);
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // CSSBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void getComputedStyleForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::CSSComputedStyleProperty>>&);
-    void getInlineStylesForNode(ErrorString&, int nodeId, RefPtr<Inspector::Protocol::CSS::CSSStyle>& inlineStyle, RefPtr<Inspector::Protocol::CSS::CSSStyle>& attributes);
-    void getMatchedStylesForNode(ErrorString&, int nodeId, const bool* includePseudo, const bool* includeInherited, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::RuleMatch>>& matchedCSSRules, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::PseudoIdMatches>>&, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::InheritedStyleEntry>>& inheritedEntries);
-    void getAllStyleSheets(ErrorString&, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::CSSStyleSheetHeader>>& styleSheetInfos);
-    void getStyleSheet(ErrorString&, const String& styleSheetId, RefPtr<Inspector::Protocol::CSS::CSSStyleSheetBody>& result);
-    void getStyleSheetText(ErrorString&, const String& styleSheetId, String* result);
-    void setStyleSheetText(ErrorString&, const String& styleSheetId, const String& text);
-    void setStyleText(ErrorString&, const JSON::Object& styleId, const String& text, RefPtr<Inspector::Protocol::CSS::CSSStyle>& result);
-    void setRuleSelector(ErrorString&, const JSON::Object& ruleId, const String& selector, RefPtr<Inspector::Protocol::CSS::CSSRule>& result);
-    void createStyleSheet(ErrorString&, const String& frameId, String* styleSheetId);
-    void addRule(ErrorString&, const String& styleSheetId, const String& selector, RefPtr<Inspector::Protocol::CSS::CSSRule>& result);
-    void getSupportedCSSProperties(ErrorString&, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::CSSPropertyInfo>>& result);
-    void getSupportedSystemFontFamilyNames(ErrorString&, RefPtr<JSON::ArrayOf<String>>& result);
-    void forcePseudoState(ErrorString&, int nodeId, const JSON::Array& forcedPseudoClasses);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void getComputedStyleForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::CSSComputedStyleProperty>>&) override;
+    void getInlineStylesForNode(ErrorString&, int nodeId, RefPtr<Inspector::Protocol::CSS::CSSStyle>& inlineStyle, RefPtr<Inspector::Protocol::CSS::CSSStyle>& attributes) override;
+    void getMatchedStylesForNode(ErrorString&, int nodeId, const bool* includePseudo, const bool* includeInherited, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::RuleMatch>>& matchedCSSRules, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::PseudoIdMatches>>&, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::InheritedStyleEntry>>& inheritedEntries) override;
+    void getAllStyleSheets(ErrorString&, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::CSSStyleSheetHeader>>& styleSheetInfos) override;
+    void getStyleSheet(ErrorString&, const String& styleSheetId, RefPtr<Inspector::Protocol::CSS::CSSStyleSheetBody>& result) override;
+    void getStyleSheetText(ErrorString&, const String& styleSheetId, String* result) override;
+    void setStyleSheetText(ErrorString&, const String& styleSheetId, const String& text) override;
+    void setStyleText(ErrorString&, const JSON::Object& styleId, const String& text, RefPtr<Inspector::Protocol::CSS::CSSStyle>& result) override;
+    void setRuleSelector(ErrorString&, const JSON::Object& ruleId, const String& selector, RefPtr<Inspector::Protocol::CSS::CSSRule>& result) override;
+    void createStyleSheet(ErrorString&, const String& frameId, String* styleSheetId) override;
+    void addRule(ErrorString&, const String& styleSheetId, const String& selector, RefPtr<Inspector::Protocol::CSS::CSSRule>& result) override;
+    void getSupportedCSSProperties(ErrorString&, RefPtr<JSON::ArrayOf<Inspector::Protocol::CSS::CSSPropertyInfo>>& result) override;
+    void getSupportedSystemFontFamilyNames(ErrorString&, RefPtr<JSON::ArrayOf<String>>& result) override;
+    void forcePseudoState(ErrorString&, int nodeId, const JSON::Array& forcedPseudoClasses) override;
 
     // InspectorStyleSheet::Listener
-    void styleSheetChanged(InspectorStyleSheet*);
+    void styleSheetChanged(InspectorStyleSheet*) override;
 
     // InspectorInstrumentation
     void documentDetached(Document&);
diff --git a/Source/WebCore/inspector/agents/InspectorCanvasAgent.h b/Source/WebCore/inspector/agents/InspectorCanvasAgent.h
index 60c56e9..a30c7fc 100644
--- a/Source/WebCore/inspector/agents/InspectorCanvasAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorCanvasAgent.h
@@ -61,32 +61,32 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorCanvasAgent(PageAgentContext&);
-    virtual ~InspectorCanvasAgent();
+    ~InspectorCanvasAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
-    void discardAgent();
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
+    void discardAgent() override;
 
     // CanvasBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void requestNode(ErrorString&, const String& canvasId, int* nodeId);
-    void requestContent(ErrorString&, const String& canvasId, String* content);
-    void requestClientNodes(ErrorString&, const String& canvasId, RefPtr<JSON::ArrayOf<int>>&);
-    void resolveContext(ErrorString&, const String& canvasId, const String* objectGroup, RefPtr<Inspector::Protocol::Runtime::RemoteObject>&);
-    void setRecordingAutoCaptureFrameCount(ErrorString&, int count);
-    void startRecording(ErrorString&, const String& canvasId, const int* frameCount, const int* memoryLimit);
-    void stopRecording(ErrorString&, const String& canvasId);
-    void requestShaderSource(ErrorString&, const String& programId, const String& shaderType, String* source);
-    void updateShader(ErrorString&, const String& programId, const String& shaderType, const String& source);
-    void setShaderProgramDisabled(ErrorString&, const String& programId, bool disabled);
-    void setShaderProgramHighlighted(ErrorString&, const String& programId, bool highlighted);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void requestNode(ErrorString&, const String& canvasId, int* nodeId) override;
+    void requestContent(ErrorString&, const String& canvasId, String* content) override;
+    void requestClientNodes(ErrorString&, const String& canvasId, RefPtr<JSON::ArrayOf<int>>&) override;
+    void resolveContext(ErrorString&, const String& canvasId, const String* objectGroup, RefPtr<Inspector::Protocol::Runtime::RemoteObject>&) override;
+    void setRecordingAutoCaptureFrameCount(ErrorString&, int count) override;
+    void startRecording(ErrorString&, const String& canvasId, const int* frameCount, const int* memoryLimit) override;
+    void stopRecording(ErrorString&, const String& canvasId) override;
+    void requestShaderSource(ErrorString&, const String& programId, const String& shaderType, String* source) override;
+    void updateShader(ErrorString&, const String& programId, const String& shaderType, const String& source) override;
+    void setShaderProgramDisabled(ErrorString&, const String& programId, bool disabled) override;
+    void setShaderProgramHighlighted(ErrorString&, const String& programId, bool highlighted) override;
 
     // CanvasObserver
-    void canvasChanged(CanvasBase&, const FloatRect&);
-    void canvasResized(CanvasBase&) { }
-    void canvasDestroyed(CanvasBase&);
+    void canvasChanged(CanvasBase&, const FloatRect&) override;
+    void canvasResized(CanvasBase&) override { }
+    void canvasDestroyed(CanvasBase&) override;
 
     // InspectorInstrumentation
     void frameNavigated(Frame&);
diff --git a/Source/WebCore/inspector/agents/InspectorDOMAgent.h b/Source/WebCore/inspector/agents/InspectorDOMAgent.h
index 034e1ef..f34994e 100644
--- a/Source/WebCore/inspector/agents/InspectorDOMAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorDOMAgent.h
@@ -83,7 +83,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorDOMAgent(PageAgentContext&, InspectorOverlay*);
-    virtual ~InspectorDOMAgent();
+    ~InspectorDOMAgent() override;
 
     static String toErrorString(ExceptionCode);
     static String toErrorString(Exception&&);
@@ -102,52 +102,52 @@
     static JSC::JSValue nodeAsScriptValue(JSC::ExecState&, Node*);
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // DOMBackendDispatcherHandler
-    void querySelector(ErrorString&, int nodeId, const String& selectors, int* elementId);
-    void querySelectorAll(ErrorString&, int nodeId, const String& selectors, RefPtr<JSON::ArrayOf<int>>& result);
-    void getDocument(ErrorString&, RefPtr<Inspector::Protocol::DOM::Node>& root);
-    void requestChildNodes(ErrorString&, int nodeId, const int* depth);
-    void setAttributeValue(ErrorString&, int elementId, const String& name, const String& value);
-    void setAttributesAsText(ErrorString&, int elementId, const String& text, const String* name);
-    void removeAttribute(ErrorString&, int elementId, const String& name);
-    void removeNode(ErrorString&, int nodeId);
-    void setNodeName(ErrorString&, int nodeId, const String& name, int* newId);
-    void getOuterHTML(ErrorString&, int nodeId, WTF::String* outerHTML);
-    void setOuterHTML(ErrorString&, int nodeId, const String& outerHTML);
-    void insertAdjacentHTML(ErrorString&, int nodeId, const String& position, const String& html);
-    void setNodeValue(ErrorString&, int nodeId, const String& value);
-    void getSupportedEventNames(ErrorString&, RefPtr<JSON::ArrayOf<String>>& eventNames);
-    void getDataBindingsForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::DOM::DataBinding>>& dataArray);
-    void getAssociatedDataForNode(ErrorString&, int nodeId, Optional<String>& associatedData);
-    void getEventListenersForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::DOM::EventListener>>& listenersArray);
-    void setEventListenerDisabled(ErrorString&, int eventListenerId, bool disabled);
-    void setBreakpointForEventListener(ErrorString&, int eventListenerId);
-    void removeBreakpointForEventListener(ErrorString&, int eventListenerId);
-    void getAccessibilityPropertiesForNode(ErrorString&, int nodeId, RefPtr<Inspector::Protocol::DOM::AccessibilityProperties>& axProperties);
-    void performSearch(ErrorString&, const String& query, const JSON::Array* nodeIds, const bool* caseSensitive, String* searchId, int* resultCount);
-    void getSearchResults(ErrorString&, const String& searchId, int fromIndex, int toIndex, RefPtr<JSON::ArrayOf<int>>&);
-    void discardSearchResults(ErrorString&, const String& searchId);
-    void resolveNode(ErrorString&, int nodeId, const String* objectGroup, RefPtr<Inspector::Protocol::Runtime::RemoteObject>& result);
-    void getAttributes(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<String>>& result);
-    void setInspectModeEnabled(ErrorString&, bool enabled, const JSON::Object* highlightConfig, const bool* showRulers);
-    void requestNode(ErrorString&, const String& objectId, int* nodeId);
-    void pushNodeByPathToFrontend(ErrorString&, const String& path, int* nodeId);
-    void hideHighlight(ErrorString&);
-    void highlightRect(ErrorString&, int x, int y, int width, int height, const JSON::Object* color, const JSON::Object* outlineColor, const bool* usePageCoordinates);
-    void highlightQuad(ErrorString&, const JSON::Array& quad, const JSON::Object* color, const JSON::Object* outlineColor, const bool* usePageCoordinates);
-    void highlightSelector(ErrorString&, const JSON::Object& highlightConfig, const String& selectorString, const String* frameId);
-    void highlightNode(ErrorString&, const JSON::Object& highlightConfig, const int* nodeId, const String* objectId);
-    void highlightNodeList(ErrorString&, const JSON::Array& nodeIds, const JSON::Object& highlightConfig);
-    void highlightFrame(ErrorString&, const String& frameId, const JSON::Object* color, const JSON::Object* outlineColor);
-    void moveTo(ErrorString&, int nodeId, int targetNodeId, const int* anchorNodeId, int* newNodeId);
-    void undo(ErrorString&);
-    void redo(ErrorString&);
-    void markUndoableState(ErrorString&);
-    void focus(ErrorString&, int nodeId);
-    void setInspectedNode(ErrorString&, int nodeId);
+    void querySelector(ErrorString&, int nodeId, const String& selectors, int* elementId) override;
+    void querySelectorAll(ErrorString&, int nodeId, const String& selectors, RefPtr<JSON::ArrayOf<int>>& result) override;
+    void getDocument(ErrorString&, RefPtr<Inspector::Protocol::DOM::Node>& root) override;
+    void requestChildNodes(ErrorString&, int nodeId, const int* depth) override;
+    void setAttributeValue(ErrorString&, int elementId, const String& name, const String& value) override;
+    void setAttributesAsText(ErrorString&, int elementId, const String& text, const String* name) override;
+    void removeAttribute(ErrorString&, int elementId, const String& name) override;
+    void removeNode(ErrorString&, int nodeId) override;
+    void setNodeName(ErrorString&, int nodeId, const String& name, int* newId) override;
+    void getOuterHTML(ErrorString&, int nodeId, WTF::String* outerHTML) override;
+    void setOuterHTML(ErrorString&, int nodeId, const String& outerHTML) override;
+    void insertAdjacentHTML(ErrorString&, int nodeId, const String& position, const String& html) override;
+    void setNodeValue(ErrorString&, int nodeId, const String& value) override;
+    void getSupportedEventNames(ErrorString&, RefPtr<JSON::ArrayOf<String>>& eventNames) override;
+    void getDataBindingsForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::DOM::DataBinding>>& dataArray) override;
+    void getAssociatedDataForNode(ErrorString&, int nodeId, Optional<String>& associatedData) override;
+    void getEventListenersForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::DOM::EventListener>>& listenersArray) override;
+    void setEventListenerDisabled(ErrorString&, int eventListenerId, bool disabled) override;
+    void setBreakpointForEventListener(ErrorString&, int eventListenerId) override;
+    void removeBreakpointForEventListener(ErrorString&, int eventListenerId) override;
+    void getAccessibilityPropertiesForNode(ErrorString&, int nodeId, RefPtr<Inspector::Protocol::DOM::AccessibilityProperties>& axProperties) override;
+    void performSearch(ErrorString&, const String& query, const JSON::Array* nodeIds, const bool* caseSensitive, String* searchId, int* resultCount) override;
+    void getSearchResults(ErrorString&, const String& searchId, int fromIndex, int toIndex, RefPtr<JSON::ArrayOf<int>>&) override;
+    void discardSearchResults(ErrorString&, const String& searchId) override;
+    void resolveNode(ErrorString&, int nodeId, const String* objectGroup, RefPtr<Inspector::Protocol::Runtime::RemoteObject>& result) override;
+    void getAttributes(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<String>>& result) override;
+    void setInspectModeEnabled(ErrorString&, bool enabled, const JSON::Object* highlightConfig, const bool* showRulers) override;
+    void requestNode(ErrorString&, const String& objectId, int* nodeId) override;
+    void pushNodeByPathToFrontend(ErrorString&, const String& path, int* nodeId) override;
+    void hideHighlight(ErrorString&) override;
+    void highlightRect(ErrorString&, int x, int y, int width, int height, const JSON::Object* color, const JSON::Object* outlineColor, const bool* usePageCoordinates) override;
+    void highlightQuad(ErrorString&, const JSON::Array& quad, const JSON::Object* color, const JSON::Object* outlineColor, const bool* usePageCoordinates) override;
+    void highlightSelector(ErrorString&, const JSON::Object& highlightConfig, const String& selectorString, const String* frameId) override;
+    void highlightNode(ErrorString&, const JSON::Object& highlightConfig, const int* nodeId, const String* objectId) override;
+    void highlightNodeList(ErrorString&, const JSON::Array& nodeIds, const JSON::Object& highlightConfig) override;
+    void highlightFrame(ErrorString&, const String& frameId, const JSON::Object* color, const JSON::Object* outlineColor) override;
+    void moveTo(ErrorString&, int nodeId, int targetNodeId, const int* anchorNodeId, int* newNodeId) override;
+    void undo(ErrorString&) override;
+    void redo(ErrorString&) override;
+    void markUndoableState(ErrorString&) override;
+    void focus(ErrorString&, int nodeId) override;
+    void setInspectedNode(ErrorString&, int nodeId) override;
 
     // InspectorInstrumentation
     int identifierForNode(Node&);
diff --git a/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.h b/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.h
index 37e67e4..01e3bdc 100644
--- a/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.h
@@ -53,12 +53,12 @@
     WTF_MAKE_NONCOPYABLE(InspectorDOMDebuggerAgent);
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    virtual ~InspectorDOMDebuggerAgent();
+    ~InspectorDOMDebuggerAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
-    void discardAgent();
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
+    void discardAgent() override;
     virtual bool enabled() const;
 
     // DOMDebuggerBackendDispatcherHandler
@@ -68,8 +68,8 @@
     void removeEventBreakpoint(ErrorString&, const String& breakpointType, const String* eventName) final;
 
     // InspectorDebuggerAgent::Listener
-    void debuggerWasEnabled();
-    void debuggerWasDisabled();
+    void debuggerWasEnabled() override;
+    void debuggerWasDisabled() override;
 
     // InspectorInstrumentation
     void willSendXMLHttpRequest(const String& url);
diff --git a/Source/WebCore/inspector/agents/InspectorDOMStorageAgent.h b/Source/WebCore/inspector/agents/InspectorDOMStorageAgent.h
index dc1a99a..b578660 100644
--- a/Source/WebCore/inspector/agents/InspectorDOMStorageAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorDOMStorageAgent.h
@@ -52,18 +52,18 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorDOMStorageAgent(PageAgentContext&);
-    virtual ~InspectorDOMStorageAgent();
+    ~InspectorDOMStorageAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // DOMStorageBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void getDOMStorageItems(ErrorString&, const JSON::Object& storageId, RefPtr<JSON::ArrayOf<JSON::ArrayOf<String>>>& items);
-    void setDOMStorageItem(ErrorString&, const JSON::Object& storageId, const String& key, const String& value);
-    void removeDOMStorageItem(ErrorString&, const JSON::Object& storageId, const String& key);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void getDOMStorageItems(ErrorString&, const JSON::Object& storageId, RefPtr<JSON::ArrayOf<JSON::ArrayOf<String>>>& items) override;
+    void setDOMStorageItem(ErrorString&, const JSON::Object& storageId, const String& key, const String& value) override;
+    void removeDOMStorageItem(ErrorString&, const JSON::Object& storageId, const String& key) override;
 
     // InspectorInstrumentation
     void didDispatchDOMStorageEvent(const String& key, const String& oldValue, const String& newValue, StorageType, SecurityOrigin*);
diff --git a/Source/WebCore/inspector/agents/InspectorDatabaseAgent.h b/Source/WebCore/inspector/agents/InspectorDatabaseAgent.h
index 2deba31..4305031 100644
--- a/Source/WebCore/inspector/agents/InspectorDatabaseAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorDatabaseAgent.h
@@ -48,17 +48,17 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorDatabaseAgent(WebAgentContext&);
-    virtual ~InspectorDatabaseAgent();
+    ~InspectorDatabaseAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // DatabaseBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void getDatabaseTableNames(ErrorString&, const String& databaseId, RefPtr<JSON::ArrayOf<String>>& names);
-    void executeSQL(const String& databaseId, const String& query, Ref<ExecuteSQLCallback>&&);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void getDatabaseTableNames(ErrorString&, const String& databaseId, RefPtr<JSON::ArrayOf<String>>& names) override;
+    void executeSQL(const String& databaseId, const String& query, Ref<ExecuteSQLCallback>&&) override;
 
     // InspectorInstrumentation
     void didCommitLoad();
diff --git a/Source/WebCore/inspector/agents/InspectorIndexedDBAgent.cpp b/Source/WebCore/inspector/agents/InspectorIndexedDBAgent.cpp
index 9fdf90b..bdae55d 100644
--- a/Source/WebCore/inspector/agents/InspectorIndexedDBAgent.cpp
+++ b/Source/WebCore/inspector/agents/InspectorIndexedDBAgent.cpp
@@ -222,7 +222,7 @@
         return adoptRef(*new DatabaseLoader(context, WTFMove(requestCallback)));
     }
 
-    virtual ~DatabaseLoader() = default;
+    ~DatabaseLoader() override = default;
 
     void execute(IDBDatabase& database) override
     {
@@ -356,7 +356,7 @@
         return adoptRef(*new OpenCursorCallback(injectedScript, WTFMove(requestCallback), skipCount, pageSize));
     }
 
-    virtual ~OpenCursorCallback() = default;
+    ~OpenCursorCallback() override = default;
 
     bool operator==(const EventListener& other) const override
     {
@@ -447,7 +447,7 @@
         return adoptRef(*new DataLoader(context, WTFMove(requestCallback), injectedScript, objectStoreName, indexName, WTFMove(idbKeyRange), skipCount, pageSize));
     }
 
-    virtual ~DataLoader() = default;
+    ~DataLoader() override = default;
 
     void execute(IDBDatabase& database) override
     {
@@ -651,7 +651,7 @@
         return adoptRef(*new ClearObjectStoreListener(WTFMove(requestCallback)));
     }
 
-    virtual ~ClearObjectStoreListener() = default;
+    ~ClearObjectStoreListener() override = default;
 
     bool operator==(const EventListener& other) const override
     {
diff --git a/Source/WebCore/inspector/agents/InspectorIndexedDBAgent.h b/Source/WebCore/inspector/agents/InspectorIndexedDBAgent.h
index b49e0c0..db297bd 100644
--- a/Source/WebCore/inspector/agents/InspectorIndexedDBAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorIndexedDBAgent.h
@@ -52,19 +52,19 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorIndexedDBAgent(PageAgentContext&);
-    virtual ~InspectorIndexedDBAgent();
+    ~InspectorIndexedDBAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // IndexedDBBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void requestDatabaseNames(const String& securityOrigin, Ref<RequestDatabaseNamesCallback>&&);
-    void requestDatabase(const String& securityOrigin, const String& databaseName, Ref<RequestDatabaseCallback>&&);
-    void requestData(const String& securityOrigin, const String& databaseName, const String& objectStoreName, const String& indexName, int skipCount, int pageSize, const JSON::Object* keyRange, Ref<RequestDataCallback>&&);
-    void clearObjectStore(const String& securityOrigin, const String& databaseName, const String& objectStoreName, Ref<ClearObjectStoreCallback>&&);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void requestDatabaseNames(const String& securityOrigin, Ref<RequestDatabaseNamesCallback>&&) override;
+    void requestDatabase(const String& securityOrigin, const String& databaseName, Ref<RequestDatabaseCallback>&&) override;
+    void requestData(const String& securityOrigin, const String& databaseName, const String& objectStoreName, const String& indexName, int skipCount, int pageSize, const JSON::Object* keyRange, Ref<RequestDataCallback>&&) override;
+    void clearObjectStore(const String& securityOrigin, const String& databaseName, const String& objectStoreName, Ref<ClearObjectStoreCallback>&&) override;
 
 private:
     Inspector::InjectedScriptManager& m_injectedScriptManager;
diff --git a/Source/WebCore/inspector/agents/InspectorLayerTreeAgent.h b/Source/WebCore/inspector/agents/InspectorLayerTreeAgent.h
index 3a06297..8723580 100644
--- a/Source/WebCore/inspector/agents/InspectorLayerTreeAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorLayerTreeAgent.h
@@ -49,17 +49,17 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorLayerTreeAgent(WebAgentContext&);
-    virtual ~InspectorLayerTreeAgent();
+    ~InspectorLayerTreeAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // LayerTreeBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void layersForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::LayerTree::Layer>>&);
-    void reasonsForCompositingLayer(ErrorString&, const String& layerId, RefPtr<Inspector::Protocol::LayerTree::CompositingReasons>&);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void layersForNode(ErrorString&, int nodeId, RefPtr<JSON::ArrayOf<Inspector::Protocol::LayerTree::Layer>>&) override;
+    void reasonsForCompositingLayer(ErrorString&, const String& layerId, RefPtr<Inspector::Protocol::LayerTree::CompositingReasons>&) override;
 
     // InspectorInstrumentation
     void layerTreeDidChange();
diff --git a/Source/WebCore/inspector/agents/InspectorMemoryAgent.h b/Source/WebCore/inspector/agents/InspectorMemoryAgent.h
index f312cfc..c44772d 100644
--- a/Source/WebCore/inspector/agents/InspectorMemoryAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorMemoryAgent.h
@@ -42,17 +42,17 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorMemoryAgent(PageAgentContext&);
-    virtual ~InspectorMemoryAgent();
+    ~InspectorMemoryAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // MemoryBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void startTracking(ErrorString&);
-    void stopTracking(ErrorString&);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void startTracking(ErrorString&) override;
+    void stopTracking(ErrorString&) override;
 
     // InspectorInstrumentation
     void didHandleMemoryPressure(Critical);
diff --git a/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp b/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
index 6aab3b2..e924b48 100644
--- a/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
+++ b/Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
@@ -105,7 +105,7 @@
     {
     }
 
-    virtual ~InspectorThreadableLoaderClient() = default;
+    ~InspectorThreadableLoaderClient() override = default;
 
     void didReceiveResponse(unsigned long, const ResourceResponse& response) override
     {
diff --git a/Source/WebCore/inspector/agents/InspectorNetworkAgent.h b/Source/WebCore/inspector/agents/InspectorNetworkAgent.h
index 0b9d9db..31ef5e3 100644
--- a/Source/WebCore/inspector/agents/InspectorNetworkAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorNetworkAgent.h
@@ -68,7 +68,7 @@
     WTF_MAKE_NONCOPYABLE(InspectorNetworkAgent);
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    virtual ~InspectorNetworkAgent();
+    ~InspectorNetworkAgent() override;
 
     static bool shouldTreatAsText(const String& mimeType);
     static Ref<TextResourceDecoder> createTextDecoder(const String& mimeType, const String& textEncodingName);
diff --git a/Source/WebCore/inspector/agents/InspectorPageAgent.h b/Source/WebCore/inspector/agents/InspectorPageAgent.h
index c460da1..8c786ec 100644
--- a/Source/WebCore/inspector/agents/InspectorPageAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorPageAgent.h
@@ -57,7 +57,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorPageAgent(PageAgentContext&, InspectorClient*, InspectorOverlay*);
-    virtual ~InspectorPageAgent();
+    ~InspectorPageAgent() override;
 
     enum ResourceType {
         DocumentResource,
@@ -89,31 +89,31 @@
     static DocumentLoader* assertDocumentLoader(ErrorString&, Frame*);
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // PageBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void reload(ErrorString&, const bool* optionalReloadFromOrigin, const bool* optionalRevalidateAllResources);
-    void navigate(ErrorString&, const String& url);
-    void overrideUserAgent(ErrorString&, const String* value);
-    void overrideSetting(ErrorString&, const String& setting, const bool* value);
-    void getCookies(ErrorString&, RefPtr<JSON::ArrayOf<Inspector::Protocol::Page::Cookie>>& cookies);
-    void deleteCookie(ErrorString&, const String& cookieName, const String& url);
-    void getResourceTree(ErrorString&, RefPtr<Inspector::Protocol::Page::FrameResourceTree>&);
-    void getResourceContent(ErrorString&, const String& frameId, const String& url, String* content, bool* base64Encoded);
-    void searchInResource(ErrorString&, const String& frameId, const String& url, const String& query, const bool* optionalCaseSensitive, const bool* optionalIsRegex, const String* optionalRequestId, RefPtr<JSON::ArrayOf<Inspector::Protocol::GenericTypes::SearchMatch>>&);
-    void searchInResources(ErrorString&, const String&, const bool* caseSensitive, const bool* isRegex, RefPtr<JSON::ArrayOf<Inspector::Protocol::Page::SearchResult>>&);
-    void setShowRulers(ErrorString&, bool);
-    void setShowPaintRects(ErrorString&, bool show);
-    void setEmulatedMedia(ErrorString&, const String&);
-    void setForcedAppearance(ErrorString&, const String&);
-    void getCompositingBordersVisible(ErrorString&, bool* out_param);
-    void setCompositingBordersVisible(ErrorString&, bool);
-    void snapshotNode(ErrorString&, int nodeId, String* outDataURL);
-    void snapshotRect(ErrorString&, int x, int y, int width, int height, const String& coordinateSystem, String* outDataURL);
-    void archive(ErrorString&, String* data);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void reload(ErrorString&, const bool* optionalReloadFromOrigin, const bool* optionalRevalidateAllResources) override;
+    void navigate(ErrorString&, const String& url) override;
+    void overrideUserAgent(ErrorString&, const String* value) override;
+    void overrideSetting(ErrorString&, const String& setting, const bool* value) override;
+    void getCookies(ErrorString&, RefPtr<JSON::ArrayOf<Inspector::Protocol::Page::Cookie>>& cookies) override;
+    void deleteCookie(ErrorString&, const String& cookieName, const String& url) override;
+    void getResourceTree(ErrorString&, RefPtr<Inspector::Protocol::Page::FrameResourceTree>&) override;
+    void getResourceContent(ErrorString&, const String& frameId, const String& url, String* content, bool* base64Encoded) override;
+    void searchInResource(ErrorString&, const String& frameId, const String& url, const String& query, const bool* optionalCaseSensitive, const bool* optionalIsRegex, const String* optionalRequestId, RefPtr<JSON::ArrayOf<Inspector::Protocol::GenericTypes::SearchMatch>>&) override;
+    void searchInResources(ErrorString&, const String&, const bool* caseSensitive, const bool* isRegex, RefPtr<JSON::ArrayOf<Inspector::Protocol::Page::SearchResult>>&) override;
+    void setShowRulers(ErrorString&, bool) override;
+    void setShowPaintRects(ErrorString&, bool show) override;
+    void setEmulatedMedia(ErrorString&, const String&) override;
+    void setForcedAppearance(ErrorString&, const String&) override;
+    void getCompositingBordersVisible(ErrorString&, bool* out_param) override;
+    void setCompositingBordersVisible(ErrorString&, bool) override;
+    void snapshotNode(ErrorString&, int nodeId, String* outDataURL) override;
+    void snapshotRect(ErrorString&, int x, int y, int width, int height, const String& coordinateSystem, String* outDataURL) override;
+    void archive(ErrorString&, String* data) override;
 
     // InspectorInstrumentation
     void domContentEventFired();
diff --git a/Source/WebCore/inspector/agents/InspectorTimelineAgent.h b/Source/WebCore/inspector/agents/InspectorTimelineAgent.h
index b4339a5..1398948 100644
--- a/Source/WebCore/inspector/agents/InspectorTimelineAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorTimelineAgent.h
@@ -86,30 +86,30 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorTimelineAgent(PageAgentContext&);
-    virtual ~InspectorTimelineAgent();
+    ~InspectorTimelineAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // TimelineBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void start(ErrorString&, const int* maxCallStackDepth = nullptr);
-    void stop(ErrorString&);
-    void setAutoCaptureEnabled(ErrorString&, bool);
-    void setInstruments(ErrorString&, const JSON::Array&);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void start(ErrorString&, const int* maxCallStackDepth = nullptr) override;
+    void stop(ErrorString&) override;
+    void setAutoCaptureEnabled(ErrorString&, bool) override;
+    void setInstruments(ErrorString&, const JSON::Array&) override;
 
     // ScriptDebugListener
-    void didParseSource(JSC::SourceID, const Script&) { }
-    void failedToParseSource(const String&, const String&, int, int, const String&) { }
-    void willRunMicrotask() { }
-    void didRunMicrotask() { }
-    void didPause(JSC::ExecState&, JSC::JSValue, JSC::JSValue) { }
-    void didContinue() { }
-    void breakpointActionLog(JSC::ExecState&, const String&) { }
-    void breakpointActionSound(int) { }
-    void breakpointActionProbe(JSC::ExecState&, const Inspector::ScriptBreakpointAction&, unsigned batchId, unsigned sampleId, JSC::JSValue result);
+    void didParseSource(JSC::SourceID, const Script&) override { }
+    void failedToParseSource(const String&, const String&, int, int, const String&) override { }
+    void willRunMicrotask() override { }
+    void didRunMicrotask() override { }
+    void didPause(JSC::ExecState&, JSC::JSValue, JSC::JSValue) override { }
+    void didContinue() override { }
+    void breakpointActionLog(JSC::ExecState&, const String&) override { }
+    void breakpointActionSound(int) override { }
+    void breakpointActionProbe(JSC::ExecState&, const Inspector::ScriptBreakpointAction&, unsigned batchId, unsigned sampleId, JSC::JSValue result) override;
 
     // InspectorInstrumentation
     void didInstallTimer(int timerId, Seconds timeout, bool singleShot, Frame*);
diff --git a/Source/WebCore/inspector/agents/InspectorWorkerAgent.h b/Source/WebCore/inspector/agents/InspectorWorkerAgent.h
index 2211b3b..9447493 100644
--- a/Source/WebCore/inspector/agents/InspectorWorkerAgent.h
+++ b/Source/WebCore/inspector/agents/InspectorWorkerAgent.h
@@ -42,20 +42,20 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     InspectorWorkerAgent(PageAgentContext&);
-    virtual ~InspectorWorkerAgent();
+    ~InspectorWorkerAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // WorkerBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void initialized(ErrorString&, const String& workerId);
-    void sendMessageToWorker(ErrorString&, const String& workerId, const String& message);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void initialized(ErrorString&, const String& workerId) override;
+    void sendMessageToWorker(ErrorString&, const String& workerId, const String& message) override;
 
     // WorkerInspectorProxy::PageChannel
-    void sendMessageFromWorkerToFrontend(WorkerInspectorProxy*, const String& message);
+    void sendMessageFromWorkerToFrontend(WorkerInspectorProxy*, const String& message) override;
 
     // InspectorInstrumentation
     bool shouldWaitForDebuggerOnStart() const;
diff --git a/Source/WebCore/inspector/agents/WebConsoleAgent.h b/Source/WebCore/inspector/agents/WebConsoleAgent.h
index efaab77..f7d8278 100644
--- a/Source/WebCore/inspector/agents/WebConsoleAgent.h
+++ b/Source/WebCore/inspector/agents/WebConsoleAgent.h
@@ -40,7 +40,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     WebConsoleAgent(WebAgentContext&);
-    virtual ~WebConsoleAgent();
+    ~WebConsoleAgent() override;
 
     // InspectorInstrumentation
     void frameWindowDiscarded(DOMWindow*);
diff --git a/Source/WebCore/inspector/agents/WebDebuggerAgent.h b/Source/WebCore/inspector/agents/WebDebuggerAgent.h
index ff498fd..df9dabc 100644
--- a/Source/WebCore/inspector/agents/WebDebuggerAgent.h
+++ b/Source/WebCore/inspector/agents/WebDebuggerAgent.h
@@ -41,7 +41,7 @@
     WTF_MAKE_NONCOPYABLE(WebDebuggerAgent);
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    virtual ~WebDebuggerAgent();
+    ~WebDebuggerAgent() override;
     bool enabled() const override;
 
     // InspectorInstrumentation
diff --git a/Source/WebCore/inspector/agents/WebHeapAgent.h b/Source/WebCore/inspector/agents/WebHeapAgent.h
index 88ef45a..0bc8e64 100644
--- a/Source/WebCore/inspector/agents/WebHeapAgent.h
+++ b/Source/WebCore/inspector/agents/WebHeapAgent.h
@@ -41,7 +41,7 @@
     friend class SendGarbageCollectionEventsTask;
 public:
     WebHeapAgent(WebAgentContext&);
-    virtual ~WebHeapAgent();
+    ~WebHeapAgent() override;
 
     // HeapBackendDispatcherHandler
     void enable(ErrorString&) override;
diff --git a/Source/WebCore/inspector/agents/page/PageAuditAgent.h b/Source/WebCore/inspector/agents/page/PageAuditAgent.h
index 0d51414..751e2a7 100644
--- a/Source/WebCore/inspector/agents/page/PageAuditAgent.h
+++ b/Source/WebCore/inspector/agents/page/PageAuditAgent.h
@@ -37,16 +37,16 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     PageAuditAgent(PageAgentContext&);
-    virtual ~PageAuditAgent();
+    ~PageAuditAgent() override;
 
 private:
     Inspector::InjectedScript injectedScriptForEval(const int* executionContextId);
-    Inspector::InjectedScript injectedScriptForEval(Inspector::ErrorString&, const int* executionContextId);
+    Inspector::InjectedScript injectedScriptForEval(Inspector::ErrorString&, const int* executionContextId) override;
 
-    void populateAuditObject(JSC::ExecState*, JSC::Strong<JSC::JSObject>& auditObject);
+    void populateAuditObject(JSC::ExecState*, JSC::Strong<JSC::JSObject>& auditObject) override;
 
-    void muteConsole();
-    void unmuteConsole();
+    void muteConsole() override;
+    void unmuteConsole() override;
 
     Page& m_inspectedPage;
 };
diff --git a/Source/WebCore/inspector/agents/page/PageConsoleAgent.h b/Source/WebCore/inspector/agents/page/PageConsoleAgent.h
index ee47472..4c45f2d 100644
--- a/Source/WebCore/inspector/agents/page/PageConsoleAgent.h
+++ b/Source/WebCore/inspector/agents/page/PageConsoleAgent.h
@@ -41,12 +41,12 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     PageConsoleAgent(PageAgentContext&);
-    virtual ~PageConsoleAgent();
+    ~PageConsoleAgent() override;
 
     // ConsoleBackendDispatcherHandler
-    void clearMessages(ErrorString&);
-    void getLoggingChannels(ErrorString&, RefPtr<JSON::ArrayOf<Inspector::Protocol::Console::Channel>>&);
-    void setLoggingChannelLevel(ErrorString&, const String& channel, const String& level);
+    void clearMessages(ErrorString&) override;
+    void getLoggingChannels(ErrorString&, RefPtr<JSON::ArrayOf<Inspector::Protocol::Console::Channel>>&) override;
+    void setLoggingChannelLevel(ErrorString&, const String& channel, const String& level) override;
 
 private:
     InstrumentingAgents& m_instrumentingAgents;
diff --git a/Source/WebCore/inspector/agents/page/PageDOMDebuggerAgent.h b/Source/WebCore/inspector/agents/page/PageDOMDebuggerAgent.h
index 72357f1..77b1bbd 100644
--- a/Source/WebCore/inspector/agents/page/PageDOMDebuggerAgent.h
+++ b/Source/WebCore/inspector/agents/page/PageDOMDebuggerAgent.h
@@ -38,13 +38,13 @@
 class PageDOMDebuggerAgent final : public InspectorDOMDebuggerAgent {
 public:
     PageDOMDebuggerAgent(PageAgentContext&, Inspector::InspectorDebuggerAgent*);
-    virtual ~PageDOMDebuggerAgent();
+    ~PageDOMDebuggerAgent() override;
 
-    bool enabled() const;
+    bool enabled() const override;
 
     // DOMDebuggerBackendDispatcherHandler
-    void setDOMBreakpoint(ErrorString&, int nodeId, const String& type);
-    void removeDOMBreakpoint(ErrorString&, int nodeId, const String& type);
+    void setDOMBreakpoint(ErrorString&, int nodeId, const String& type) override;
+    void removeDOMBreakpoint(ErrorString&, int nodeId, const String& type) override;
 
     // InspectorInstrumentation
     void frameDocumentUpdated(Frame&);
@@ -57,10 +57,10 @@
     void willFireAnimationFrame();
 
 private:
-    void enable();
-    void disable();
+    void enable() override;
+    void disable() override;
 
-    void setAnimationFrameBreakpoint(ErrorString&, bool enabled);
+    void setAnimationFrameBreakpoint(ErrorString&, bool enabled) override;
 
     void descriptionForDOMEvent(Node&, int breakpointType, bool insertion, JSON::Object& description);
     void updateSubtreeBreakpoints(Node*, uint32_t rootMask, bool set);
diff --git a/Source/WebCore/inspector/agents/page/PageDebuggerAgent.h b/Source/WebCore/inspector/agents/page/PageDebuggerAgent.h
index 3bd2a48..11598df 100644
--- a/Source/WebCore/inspector/agents/page/PageDebuggerAgent.h
+++ b/Source/WebCore/inspector/agents/page/PageDebuggerAgent.h
@@ -43,14 +43,14 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     PageDebuggerAgent(PageAgentContext&);
-    virtual ~PageDebuggerAgent();
+    ~PageDebuggerAgent() override;
     bool enabled() const final;
 
     // DebuggerBackendDispatcherHandler
-    void evaluateOnCallFrame(ErrorString&, const String& callFrameId, const String& expression, const String* objectGroup, const bool* includeCommandLineAPI, const bool* doNotPauseOnExceptionsAndMuteConsole, const bool* returnByValue, const bool* generatePreview, const bool* saveResult, const bool* emulateUserGesture, RefPtr<Inspector::Protocol::Runtime::RemoteObject>& result, Optional<bool>& wasThrown, Optional<int>& savedResultIndex);
+    void evaluateOnCallFrame(ErrorString&, const String& callFrameId, const String& expression, const String* objectGroup, const bool* includeCommandLineAPI, const bool* doNotPauseOnExceptionsAndMuteConsole, const bool* returnByValue, const bool* generatePreview, const bool* saveResult, const bool* emulateUserGesture, RefPtr<Inspector::Protocol::Runtime::RemoteObject>& result, Optional<bool>& wasThrown, Optional<int>& savedResultIndex) override;
 
     // ScriptDebugListener
-    void breakpointActionLog(JSC::ExecState&, const String&);
+    void breakpointActionLog(JSC::ExecState&, const String&) override;
 
     // InspectorInstrumentation
     void didClearMainFrameWindowObject();
@@ -62,15 +62,15 @@
     void didCancelAnimationFrame(int callbackId);
 
 private:
-    void enable();
-    void disable(bool isBeingDestroyed);
+    void enable() override;
+    void disable(bool isBeingDestroyed) override;
 
-    String sourceMapURLForScript(const Script&);
+    String sourceMapURLForScript(const Script&) override;
 
-    void muteConsole();
-    void unmuteConsole();
+    void muteConsole() override;
+    void unmuteConsole() override;
 
-    Inspector::InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId);
+    Inspector::InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) override;
 
     Page& m_inspectedPage;
 };
diff --git a/Source/WebCore/inspector/agents/page/PageHeapAgent.h b/Source/WebCore/inspector/agents/page/PageHeapAgent.h
index 756fca0..1bd6ca0 100644
--- a/Source/WebCore/inspector/agents/page/PageHeapAgent.h
+++ b/Source/WebCore/inspector/agents/page/PageHeapAgent.h
@@ -38,11 +38,11 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     PageHeapAgent(PageAgentContext&);
-    virtual ~PageHeapAgent();
+    ~PageHeapAgent() override;
 
     // HeapBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
 
     // InspectorInstrumentation
     void mainFrameNavigated();
diff --git a/Source/WebCore/inspector/agents/page/PageNetworkAgent.h b/Source/WebCore/inspector/agents/page/PageNetworkAgent.h
index 4e8f541..bedce3e 100644
--- a/Source/WebCore/inspector/agents/page/PageNetworkAgent.h
+++ b/Source/WebCore/inspector/agents/page/PageNetworkAgent.h
@@ -36,15 +36,15 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     PageNetworkAgent(PageAgentContext&);
-    virtual ~PageNetworkAgent();
+    ~PageNetworkAgent() override;
 
 private:
-    String loaderIdentifier(DocumentLoader*);
-    String frameIdentifier(DocumentLoader*);
-    Vector<WebSocket*> activeWebSockets(const LockHolder&);
-    void setResourceCachingDisabled(bool);
-    ScriptExecutionContext* scriptExecutionContext(ErrorString&, const String& frameId);
-    bool shouldForceBufferingNetworkResourceData() const { return false; }
+    String loaderIdentifier(DocumentLoader*) override;
+    String frameIdentifier(DocumentLoader*) override;
+    Vector<WebSocket*> activeWebSockets(const LockHolder&) override;
+    void setResourceCachingDisabled(bool) override;
+    ScriptExecutionContext* scriptExecutionContext(ErrorString&, const String& frameId) override;
+    bool shouldForceBufferingNetworkResourceData() const override { return false; }
 
     Page& m_inspectedPage;
 };
diff --git a/Source/WebCore/inspector/agents/page/PageRuntimeAgent.h b/Source/WebCore/inspector/agents/page/PageRuntimeAgent.h
index 1487b13..322a4cb 100644
--- a/Source/WebCore/inspector/agents/page/PageRuntimeAgent.h
+++ b/Source/WebCore/inspector/agents/page/PageRuntimeAgent.h
@@ -52,20 +52,20 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     PageRuntimeAgent(PageAgentContext&);
-    virtual ~PageRuntimeAgent();
+    ~PageRuntimeAgent() override;
 
     // RuntimeBackendDispatcherHandler
-    void enable(ErrorString&);
-    void disable(ErrorString&);
-    void evaluate(ErrorString&, const String& expression, const String* objectGroup, const bool* includeCommandLineAPI, const bool* doNotPauseOnExceptionsAndMuteConsole, const int* executionContextId, const bool* returnByValue, const bool* generatePreview, const bool* saveResult, const bool* emulateUserGesture, RefPtr<Inspector::Protocol::Runtime::RemoteObject>& result, Optional<bool>& wasThrown, Optional<int>& savedResultIndex);
+    void enable(ErrorString&) override;
+    void disable(ErrorString&) override;
+    void evaluate(ErrorString&, const String& expression, const String* objectGroup, const bool* includeCommandLineAPI, const bool* doNotPauseOnExceptionsAndMuteConsole, const int* executionContextId, const bool* returnByValue, const bool* generatePreview, const bool* saveResult, const bool* emulateUserGesture, RefPtr<Inspector::Protocol::Runtime::RemoteObject>& result, Optional<bool>& wasThrown, Optional<int>& savedResultIndex) override;
 
     // InspectorInstrumentation
     void didCreateMainWorldContext(Frame&);
 
 private:
-    Inspector::InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId);
-    void muteConsole();
-    void unmuteConsole();
+    Inspector::InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) override;
+    void muteConsole() override;
+    void unmuteConsole() override;
     void reportExecutionContextCreation();
     void notifyContextCreated(const String& frameId, JSC::ExecState*, SecurityOrigin*, bool isPageContext);
 
diff --git a/Source/WebCore/inspector/agents/worker/ServiceWorkerAgent.h b/Source/WebCore/inspector/agents/worker/ServiceWorkerAgent.h
index 092de8f..8149ff3 100644
--- a/Source/WebCore/inspector/agents/worker/ServiceWorkerAgent.h
+++ b/Source/WebCore/inspector/agents/worker/ServiceWorkerAgent.h
@@ -41,14 +41,14 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     ServiceWorkerAgent(WorkerAgentContext&);
-    virtual ~ServiceWorkerAgent();
+    ~ServiceWorkerAgent() override;
 
     // InspectorAgentBase
-    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*);
-    void willDestroyFrontendAndBackend(Inspector::DisconnectReason);
+    void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
+    void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
 
     // ServiceWorkerBackendDispatcherHandler
-    void getInitializationInfo(ErrorString&, RefPtr<Inspector::Protocol::ServiceWorker::Configuration>&);
+    void getInitializationInfo(ErrorString&, RefPtr<Inspector::Protocol::ServiceWorker::Configuration>&) override;
 
 private:
     ServiceWorkerGlobalScope& m_serviceWorkerGlobalScope;
diff --git a/Source/WebCore/inspector/agents/worker/WorkerAuditAgent.h b/Source/WebCore/inspector/agents/worker/WorkerAuditAgent.h
index e46bf5f..d6acdc0 100644
--- a/Source/WebCore/inspector/agents/worker/WorkerAuditAgent.h
+++ b/Source/WebCore/inspector/agents/worker/WorkerAuditAgent.h
@@ -37,10 +37,10 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     WorkerAuditAgent(WorkerAgentContext&);
-    virtual ~WorkerAuditAgent();
+    ~WorkerAuditAgent() override;
 
 private:
-    Inspector::InjectedScript injectedScriptForEval(Inspector::ErrorString&, const int* executionContextId);
+    Inspector::InjectedScript injectedScriptForEval(Inspector::ErrorString&, const int* executionContextId) override;
 
     WorkerGlobalScope& m_workerGlobalScope;
 };
diff --git a/Source/WebCore/inspector/agents/worker/WorkerConsoleAgent.h b/Source/WebCore/inspector/agents/worker/WorkerConsoleAgent.h
index a227adc..b7b55d0 100644
--- a/Source/WebCore/inspector/agents/worker/WorkerConsoleAgent.h
+++ b/Source/WebCore/inspector/agents/worker/WorkerConsoleAgent.h
@@ -35,7 +35,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     WorkerConsoleAgent(WorkerAgentContext&);
-    virtual ~WorkerConsoleAgent();
+    ~WorkerConsoleAgent() override;
 };
 
 } // namespace WebCore
diff --git a/Source/WebCore/inspector/agents/worker/WorkerDOMDebuggerAgent.h b/Source/WebCore/inspector/agents/worker/WorkerDOMDebuggerAgent.h
index 64affde..b11285e 100644
--- a/Source/WebCore/inspector/agents/worker/WorkerDOMDebuggerAgent.h
+++ b/Source/WebCore/inspector/agents/worker/WorkerDOMDebuggerAgent.h
@@ -34,14 +34,14 @@
 class WorkerDOMDebuggerAgent final : public InspectorDOMDebuggerAgent {
 public:
     WorkerDOMDebuggerAgent(WorkerAgentContext&, Inspector::InspectorDebuggerAgent*);
-    virtual ~WorkerDOMDebuggerAgent();
+    ~WorkerDOMDebuggerAgent() override;
 
     // DOMDebuggerBackendDispatcherHandler
-    void setDOMBreakpoint(ErrorString&, int nodeId, const String& type);
-    void removeDOMBreakpoint(ErrorString&, int nodeId, const String& type);
+    void setDOMBreakpoint(ErrorString&, int nodeId, const String& type) override;
+    void removeDOMBreakpoint(ErrorString&, int nodeId, const String& type) override;
 
 private:
-    void setAnimationFrameBreakpoint(ErrorString&, bool enabled);
+    void setAnimationFrameBreakpoint(ErrorString&, bool enabled) override;
 };
 
 } // namespace WebCore
diff --git a/Source/WebCore/inspector/agents/worker/WorkerDebuggerAgent.h b/Source/WebCore/inspector/agents/worker/WorkerDebuggerAgent.h
index b259bb4..890ac42 100644
--- a/Source/WebCore/inspector/agents/worker/WorkerDebuggerAgent.h
+++ b/Source/WebCore/inspector/agents/worker/WorkerDebuggerAgent.h
@@ -36,17 +36,17 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     WorkerDebuggerAgent(WorkerAgentContext&);
-    virtual ~WorkerDebuggerAgent();
+    ~WorkerDebuggerAgent() override;
 
     // ScriptDebugListener
-    void breakpointActionLog(JSC::ExecState&, const String&);
+    void breakpointActionLog(JSC::ExecState&, const String&) override;
 
 private:
     // We don't need to mute console for workers.
-    void muteConsole() { }
-    void unmuteConsole() { }
+    void muteConsole() override { }
+    void unmuteConsole() override { }
 
-    Inspector::InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId);
+    Inspector::InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) override;
 
     WorkerGlobalScope& m_workerGlobalScope;
 };
diff --git a/Source/WebCore/inspector/agents/worker/WorkerNetworkAgent.h b/Source/WebCore/inspector/agents/worker/WorkerNetworkAgent.h
index c3a8669..899f0a5 100644
--- a/Source/WebCore/inspector/agents/worker/WorkerNetworkAgent.h
+++ b/Source/WebCore/inspector/agents/worker/WorkerNetworkAgent.h
@@ -34,15 +34,15 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     WorkerNetworkAgent(WorkerAgentContext&);
-    virtual ~WorkerNetworkAgent();
+    ~WorkerNetworkAgent() override;
 
 private:
-    String loaderIdentifier(DocumentLoader*);
-    String frameIdentifier(DocumentLoader*);
-    Vector<WebSocket*> activeWebSockets(const LockHolder&);
-    void setResourceCachingDisabled(bool);
-    ScriptExecutionContext* scriptExecutionContext(ErrorString&, const String& frameId);
-    bool shouldForceBufferingNetworkResourceData() const { return true; }
+    String loaderIdentifier(DocumentLoader*) override;
+    String frameIdentifier(DocumentLoader*) override;
+    Vector<WebSocket*> activeWebSockets(const LockHolder&) override;
+    void setResourceCachingDisabled(bool) override;
+    ScriptExecutionContext* scriptExecutionContext(ErrorString&, const String& frameId) override;
+    bool shouldForceBufferingNetworkResourceData() const override { return true; }
 
     WorkerGlobalScope& m_workerGlobalScope;
 };
diff --git a/Source/WebCore/inspector/agents/worker/WorkerRuntimeAgent.h b/Source/WebCore/inspector/agents/worker/WorkerRuntimeAgent.h
index e2923b9..5308eb4 100644
--- a/Source/WebCore/inspector/agents/worker/WorkerRuntimeAgent.h
+++ b/Source/WebCore/inspector/agents/worker/WorkerRuntimeAgent.h
@@ -44,14 +44,14 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     WorkerRuntimeAgent(WorkerAgentContext&);
-    virtual ~WorkerRuntimeAgent();
+    ~WorkerRuntimeAgent() override;
 
 private:
-    Inspector::InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId);
+    Inspector::InjectedScript injectedScriptForEval(ErrorString&, const int* executionContextId) override;
 
     // We don't need to mute console for workers.
-    void muteConsole() { }
-    void unmuteConsole() { }
+    void muteConsole() override { }
+    void unmuteConsole() override { }
 
     RefPtr<Inspector::RuntimeBackendDispatcher> m_backendDispatcher;
     WorkerGlobalScope& m_workerGlobalScope;
