mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Persist DevTools preferences with CefSettings.persist_user_preferences (issue #2077)
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#include "libcef/browser/browser_context.h"
|
||||||
#include "libcef/browser/devtools_manager_delegate.h"
|
#include "libcef/browser/devtools_manager_delegate.h"
|
||||||
#include "libcef/browser/net/devtools_scheme_handler.h"
|
#include "libcef/browser/net/devtools_scheme_handler.h"
|
||||||
|
|
||||||
@@ -17,6 +18,8 @@
|
|||||||
#include "base/strings/stringprintf.h"
|
#include "base/strings/stringprintf.h"
|
||||||
#include "base/strings/utf_string_conversions.h"
|
#include "base/strings/utf_string_conversions.h"
|
||||||
#include "base/values.h"
|
#include "base/values.h"
|
||||||
|
#include "chrome/common/pref_names.h"
|
||||||
|
#include "components/prefs/scoped_user_pref_update.h"
|
||||||
#include "content/public/browser/browser_context.h"
|
#include "content/public/browser/browser_context.h"
|
||||||
#include "content/public/browser/browser_thread.h"
|
#include "content/public/browser/browser_thread.h"
|
||||||
#include "content/public/browser/render_frame_host.h"
|
#include "content/public/browser/render_frame_host.h"
|
||||||
@@ -222,17 +225,19 @@ void CefDevToolsFrontend::WebContentsDestroyed() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CefDevToolsFrontend::SetPreferences(const std::string& json) {
|
void CefDevToolsFrontend::SetPreferences(const std::string& json) {
|
||||||
preferences_.Clear();
|
|
||||||
if (json.empty())
|
if (json.empty())
|
||||||
return;
|
return;
|
||||||
base::DictionaryValue* dict = nullptr;
|
base::DictionaryValue* dict = nullptr;
|
||||||
std::unique_ptr<base::Value> parsed = base::JSONReader::Read(json);
|
std::unique_ptr<base::Value> parsed = base::JSONReader::Read(json);
|
||||||
if (!parsed || !parsed->GetAsDictionary(&dict))
|
if (!parsed || !parsed->GetAsDictionary(&dict))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
DictionaryPrefUpdate update(GetPrefs(), prefs::kDevToolsPreferences);
|
||||||
for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) {
|
for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) {
|
||||||
if (!it.value().IsType(base::Value::Type::STRING))
|
if (!it.value().IsType(base::Value::Type::STRING))
|
||||||
continue;
|
continue;
|
||||||
preferences_.SetWithoutPathExpansion(it.key(), it.value().CreateDeepCopy());
|
update.Get()->SetWithoutPathExpansion(it.key(),
|
||||||
|
it.value().CreateDeepCopy());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,7 +301,8 @@ void CefDevToolsFrontend::HandleMessageFromDevToolsFrontend(
|
|||||||
fetcher->Start();
|
fetcher->Start();
|
||||||
return;
|
return;
|
||||||
} else if (method == "getPreferences") {
|
} else if (method == "getPreferences") {
|
||||||
SendMessageAck(request_id, &preferences_);
|
SendMessageAck(request_id,
|
||||||
|
GetPrefs()->GetDictionary(prefs::kDevToolsPreferences));
|
||||||
return;
|
return;
|
||||||
} else if (method == "setPreference") {
|
} else if (method == "setPreference") {
|
||||||
std::string name;
|
std::string name;
|
||||||
@@ -305,12 +311,14 @@ void CefDevToolsFrontend::HandleMessageFromDevToolsFrontend(
|
|||||||
!params->GetString(1, &value)) {
|
!params->GetString(1, &value)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
preferences_.SetStringWithoutPathExpansion(name, value);
|
DictionaryPrefUpdate update(GetPrefs(), prefs::kDevToolsPreferences);
|
||||||
|
update.Get()->SetStringWithoutPathExpansion(name, value);
|
||||||
} else if (method == "removePreference") {
|
} else if (method == "removePreference") {
|
||||||
std::string name;
|
std::string name;
|
||||||
if (!params->GetString(0, &name))
|
if (!params->GetString(0, &name))
|
||||||
return;
|
return;
|
||||||
preferences_.RemoveWithoutPathExpansion(name, nullptr);
|
DictionaryPrefUpdate update(GetPrefs(), prefs::kDevToolsPreferences);
|
||||||
|
update.Get()->RemoveWithoutPathExpansion(name, nullptr);
|
||||||
} else if (method == "requestFileSystems") {
|
} else if (method == "requestFileSystems") {
|
||||||
web_contents()->GetMainFrame()->ExecuteJavaScriptForTests(
|
web_contents()->GetMainFrame()->ExecuteJavaScriptForTests(
|
||||||
base::ASCIIToUTF16("DevToolsAPI.fileSystemsLoaded([]);"));
|
base::ASCIIToUTF16("DevToolsAPI.fileSystemsLoaded([]);"));
|
||||||
@@ -407,3 +415,8 @@ void CefDevToolsFrontend::AgentHostClosed(
|
|||||||
agent_host_ = nullptr;
|
agent_host_ = nullptr;
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PrefService* CefDevToolsFrontend::GetPrefs() const {
|
||||||
|
return static_cast<CefBrowserContext*>(
|
||||||
|
frontend_browser_->web_contents()->GetBrowserContext())->GetPrefs();
|
||||||
|
}
|
||||||
|
@@ -28,6 +28,8 @@ class RenderViewHost;
|
|||||||
class WebContents;
|
class WebContents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class PrefService;
|
||||||
|
|
||||||
class CefDevToolsFrontend : public content::WebContentsObserver,
|
class CefDevToolsFrontend : public content::WebContentsObserver,
|
||||||
public content::DevToolsAgentHostClient,
|
public content::DevToolsAgentHostClient,
|
||||||
public net::URLFetcherDelegate {
|
public net::URLFetcherDelegate {
|
||||||
@@ -81,6 +83,8 @@ class CefDevToolsFrontend : public content::WebContentsObserver,
|
|||||||
void SendMessageAck(int request_id,
|
void SendMessageAck(int request_id,
|
||||||
const base::Value* arg1);
|
const base::Value* arg1);
|
||||||
|
|
||||||
|
PrefService* GetPrefs() const;
|
||||||
|
|
||||||
CefRefPtr<CefBrowserHostImpl> frontend_browser_;
|
CefRefPtr<CefBrowserHostImpl> frontend_browser_;
|
||||||
content::WebContents* inspected_contents_;
|
content::WebContents* inspected_contents_;
|
||||||
scoped_refptr<content::DevToolsAgentHost> agent_host_;
|
scoped_refptr<content::DevToolsAgentHost> agent_host_;
|
||||||
@@ -88,7 +92,6 @@ class CefDevToolsFrontend : public content::WebContentsObserver,
|
|||||||
std::unique_ptr<content::DevToolsFrontendHost> frontend_host_;
|
std::unique_ptr<content::DevToolsFrontendHost> frontend_host_;
|
||||||
using PendingRequestsMap = std::map<const net::URLFetcher*, int>;
|
using PendingRequestsMap = std::map<const net::URLFetcher*, int>;
|
||||||
PendingRequestsMap pending_requests_;
|
PendingRequestsMap pending_requests_;
|
||||||
base::DictionaryValue preferences_;
|
|
||||||
base::WeakPtrFactory<CefDevToolsFrontend> weak_factory_;
|
base::WeakPtrFactory<CefDevToolsFrontend> weak_factory_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(CefDevToolsFrontend);
|
DISALLOW_COPY_AND_ASSIGN(CefDevToolsFrontend);
|
||||||
|
@@ -234,6 +234,10 @@ std::unique_ptr<PrefService> CreatePrefService(
|
|||||||
// Based on chrome/browser/ui/browser_ui_prefs.cc RegisterBrowserPrefs.
|
// Based on chrome/browser/ui/browser_ui_prefs.cc RegisterBrowserPrefs.
|
||||||
registry->RegisterBooleanPref(prefs::kAllowFileSelectionDialogs, true);
|
registry->RegisterBooleanPref(prefs::kAllowFileSelectionDialogs, true);
|
||||||
|
|
||||||
|
// DevTools preferences.
|
||||||
|
// Based on DevToolsWindow::RegisterProfilePrefs.
|
||||||
|
registry->RegisterDictionaryPref(prefs::kDevToolsPreferences);
|
||||||
|
|
||||||
if (command_line->HasSwitch(switches::kEnablePreferenceTesting)) {
|
if (command_line->HasSwitch(switches::kEnablePreferenceTesting)) {
|
||||||
// Preferences used with unit tests.
|
// Preferences used with unit tests.
|
||||||
registry->RegisterBooleanPref("test.bool", true);
|
registry->RegisterBooleanPref("test.bool", true);
|
||||||
|
Reference in New Issue
Block a user