diff --git a/libcef/browser_devtools_scheme_handler.cc b/libcef/browser_devtools_scheme_handler.cc index 629a71b59..80bb0393e 100644 --- a/libcef/browser_devtools_scheme_handler.cc +++ b/libcef/browser_devtools_scheme_handler.cc @@ -118,9 +118,10 @@ public: } // namespace // Register the DevTools scheme handler. -void RegisterDevToolsSchemeHandler() +void RegisterDevToolsSchemeHandler(bool firstTime) { - CefRegisterCustomScheme(kChromeDevToolsScheme, true, false, true); + if (firstTime) + CefRegisterCustomScheme(kChromeDevToolsScheme, true, false, true); CefRegisterSchemeHandlerFactory(kChromeDevToolsScheme, kChromeDevToolsHost, new DevToolsSchemeHandlerFactory()); } diff --git a/libcef/browser_devtools_scheme_handler.h b/libcef/browser_devtools_scheme_handler.h index 59c3ced4a..e433e0bb0 100644 --- a/libcef/browser_devtools_scheme_handler.h +++ b/libcef/browser_devtools_scheme_handler.h @@ -10,6 +10,6 @@ extern const char kChromeDevToolsHost[]; extern const char kChromeDevToolsURL[]; // Register the DevTools scheme handler. -void RegisterDevToolsSchemeHandler(); +void RegisterDevToolsSchemeHandler(bool firstTime); #endif // _CEF_BROWSER_DEVTOOLS_SCHEME_HANDLER_H diff --git a/libcef/cef_context.cc b/libcef/cef_context.cc index 6a16a0345..e71c54f8b 100644 --- a/libcef/cef_context.cc +++ b/libcef/cef_context.cc @@ -753,7 +753,7 @@ bool CefContext::Initialize(const CefSettings& settings) // Perform DevTools scheme registration when CEF initialization is complete. CefThread::PostTask(CefThread::UI, FROM_HERE, - base::Bind(&RegisterDevToolsSchemeHandler)); + base::Bind(&RegisterDevToolsSchemeHandler, true)); return true; } diff --git a/libcef/scheme_impl.cc b/libcef/scheme_impl.cc index 6e33fec52..517953345 100644 --- a/libcef/scheme_impl.cc +++ b/libcef/scheme_impl.cc @@ -4,6 +4,7 @@ // found in the LICENSE file. #include "include/cef.h" +#include "browser_devtools_scheme_handler.h" #include "browser_resource_loader_bridge.h" #include "cef_context.h" #include "cef_thread.h" @@ -560,8 +561,10 @@ private: job = GetBuiltinSchemeRequestJob(request, scheme); } +#ifndef NDEBUG if (job) DLOG(INFO) << "CefUrlRequestManager hit for " << request->url().spec(); +#endif return job; } @@ -597,7 +600,7 @@ bool CefRegisterCustomScheme(const CefString& scheme_name, { // Verify that the context is in a valid state. if (!CONTEXT_STATE_VALID()) { - NOTREACHED(); + NOTREACHED() << "context not valid"; return false; } @@ -625,7 +628,7 @@ bool CefRegisterSchemeHandlerFactory(const CefString& scheme_name, { // Verify that the context is in a valid state. if (!CONTEXT_STATE_VALID()) { - NOTREACHED(); + NOTREACHED() << "context not valid"; return false; } @@ -645,12 +648,15 @@ bool CefClearSchemeHandlerFactories() { // Verify that the context is in a valid state. if (!CONTEXT_STATE_VALID()) { - NOTREACHED(); + NOTREACHED() << "context not valid"; return false; } if (CefThread::CurrentlyOn(CefThread::IO)) { CefUrlRequestManager::GetInstance()->ClearFactories(); + + // Re-register the DevTools scheme handler. + RegisterDevToolsSchemeHandler(false); } else { CefThread::PostTask(CefThread::IO, FROM_HERE, NewRunnableFunction(&CefClearSchemeHandlerFactories));