+2009-12-03 Pavel Feldman <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>
+
+ Reviewed by Timothy Hatcher.
+
+ Web Inspector: Simplify the settings support in inspector controller.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32076
+
+ * inspector/settings-set-get-expected.txt: Added.
+ * inspector/settings-set-get.html: Added.
+
2009-12-03 Oliver Hunt <oliver@apple.com>
Reviewed by Maciej Stachowiak.
--- /dev/null
+Tests front-end settings read/write.
+
+Setting should have 'bar' value, was: 'bar'
+Setting should have 'baz' value, was: 'baz'
+
--- /dev/null
+<html>
+<head>
+<script src="inspector-test.js"></script>
+<script>
+
+function doit()
+{
+ evaluateInWebInspector("frontend_setSetting('foo', 'bar')");
+ function callback(result)
+ {
+ output("Setting should have 'bar' value, was: '" + result + "'");
+ }
+ evaluateInWebInspector("frontend_setting('foo')", callback);
+
+ evaluateInWebInspector("frontend_setSetting('foo', 'baz')");
+ function callback2(result)
+ {
+ output("Setting should have 'baz' value, was: '" + result + "'");
+ notifyDone();
+ }
+ evaluateInWebInspector("frontend_setting('foo')", callback2);
+}
+
+// Frontend functions.
+
+function frontend_setSetting(key, value)
+{
+ InspectorFrontendHost.setSetting(key, value);
+}
+
+function frontend_setting(key)
+{
+ return InspectorFrontendHost.setting(key);
+}
+
+</script>
+</head>
+
+<body onload="onload()">
+<p id="test-topic">
+Tests front-end settings read/write.
+</p>
+
+</body>
+</html>
+2009-12-03 Pavel Feldman <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>
+
+ Reviewed by Timothy Hatcher.
+
+ Web Inspector: Simplify the settings support in inspector controller.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32076
+
+ Test: inspector/settings-set-get.html
+
+ * WebCore.Inspector.exp:
+ * bindings/js/JSInspectorFrontendHostCustom.cpp:
+ * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
+ * inspector/InspectorClient.h:
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::~InspectorController):
+ (WebCore::InspectorController::setting):
+ (WebCore::InspectorController::setSetting):
+ (WebCore::InspectorController::setWindowVisible):
+ (WebCore::InspectorController::attachWindow):
+ (WebCore::InspectorController::setAttachedWindowHeight):
+ (WebCore::InspectorController::storeLastActivePanel):
+ (WebCore::InspectorController::scriptObjectReady):
+ (WebCore::InspectorController::showWindow):
+ (WebCore::InspectorController::enableResourceTracking):
+ (WebCore::InspectorController::disableResourceTracking):
+ (WebCore::InspectorController::ensureResourceTrackingSettingsLoaded):
+ (WebCore::InspectorController::enableProfiler):
+ (WebCore::InspectorController::disableProfiler):
+ (WebCore::InspectorController::enableDebuggerFromFrontend):
+ (WebCore::InspectorController::disableDebugger):
+ * inspector/InspectorController.h:
+ * inspector/InspectorFrontendHost.cpp:
+ (WebCore::InspectorFrontendHost::setting):
+ (WebCore::InspectorFrontendHost::setSetting):
+ * inspector/InspectorFrontendHost.h:
+ * inspector/InspectorFrontendHost.idl:
+ * loader/EmptyClients.h:
+ (WebCore::EmptyInspectorClient::populateSetting):
+ (WebCore::EmptyInspectorClient::storeSetting):
+
2009-12-03 Ben Murdoch <benm@google.com>
Reviewed by Brady Eidson.
-__ZN7WebCore19InspectorController10setSettingERKNS_6StringERKNS0_7SettingE
+__ZN7WebCore19InspectorController10setSettingERKNS_6StringES3_
__ZN7WebCore19InspectorController12attachWindowEv
__ZN7WebCore19InspectorController12detachWindowEv
__ZN7WebCore19InspectorController14enableDebuggerEv
return constructArray(exec, result);
}
-JSValue JSInspectorFrontendHost::setting(ExecState* exec, const ArgList& args)
-{
- if (args.size() < 1)
- return jsUndefined();
-
- String key = args.at(0).toString(exec);
- if (exec->hadException())
- return jsUndefined();
-
- InspectorController* ic = impl()->inspectorController();
- if (!ic)
- return jsUndefined();
- const InspectorController::Setting& setting = ic->setting(key);
-
- switch (setting.type()) {
- default:
- case InspectorController::Setting::NoType:
- return jsUndefined();
- case InspectorController::Setting::StringType:
- return jsString(exec, setting.string());
- case InspectorController::Setting::DoubleType:
- return jsNumber(exec, setting.doubleValue());
- case InspectorController::Setting::IntegerType:
- return jsNumber(exec, setting.integerValue());
- case InspectorController::Setting::BooleanType:
- return jsBoolean(setting.booleanValue());
- case InspectorController::Setting::StringVectorType: {
- MarkedArgumentBuffer stringsArray;
- const Vector<String>& strings = setting.stringVector();
- const unsigned length = strings.size();
- for (unsigned i = 0; i < length; ++i)
- stringsArray.append(jsString(exec, strings[i]));
- return constructArray(exec, stringsArray);
- }
- }
-}
-
-JSValue JSInspectorFrontendHost::setSetting(ExecState* exec, const ArgList& args)
-{
- if (args.size() < 2)
- return jsUndefined();
-
- String key = args.at(0).toString(exec);
- if (exec->hadException())
- return jsUndefined();
-
- InspectorController::Setting setting;
-
- JSValue value = args.at(1);
- if (value.isUndefined() || value.isNull()) {
- // Do nothing. The setting is already NoType.
- ASSERT(setting.type() == InspectorController::Setting::NoType);
- } else if (value.isString())
- setting.set(value.toString(exec));
- else if (value.isNumber())
- setting.set(value.toNumber(exec));
- else if (value.isBoolean())
- setting.set(value.toBoolean(exec));
- else {
- JSArray* jsArray = asArray(value);
- if (!jsArray)
- return jsUndefined();
- Vector<String> strings;
- for (unsigned i = 0; i < jsArray->length(); ++i) {
- String item = jsArray->get(exec, i).toString(exec);
- if (exec->hadException())
- return jsUndefined();
- strings.append(item);
- }
- setting.set(strings);
- }
-
- if (exec->hadException())
- return jsUndefined();
-
- InspectorController* ic = impl()->inspectorController();
- if (ic)
- ic->setSetting(key, setting);
-
- return jsUndefined();
-}
-
} // namespace WebCore
#endif // ENABLE(INSPECTOR)
return result;
}
-CALLBACK_FUNC_DECL(InspectorFrontendHostSetting)
-{
- INC_STATS("InspectorFrontendHost.setting()");
-
- if (args.Length() < 1)
- return v8::Undefined();
-
- String key = toWebCoreStringWithNullCheck(args[0]);
- if (key.isEmpty())
- return v8::Undefined();
-
- InspectorFrontendHost* inspectorHost = V8DOMWrapper::convertToNativeObject<InspectorFrontendHost>(V8ClassIndex::INSPECTORFRONTENDHOST, args.Holder());
- InspectorController* ic = inspectorHost->inspectorController();
- if (!ic)
- return v8::Undefined();
- const InspectorController::Setting& setting = ic->setting(key);
-
- switch (setting.type()) {
- default:
- case InspectorController::Setting::NoType:
- return v8::Undefined();
- case InspectorController::Setting::StringType:
- return v8String(setting.string());
- case InspectorController::Setting::DoubleType:
- return v8::Number::New(setting.doubleValue());
- case InspectorController::Setting::IntegerType:
- return v8::Number::New(setting.integerValue());
- case InspectorController::Setting::BooleanType:
- return v8Boolean(setting.booleanValue());
- case InspectorController::Setting::StringVectorType: {
- const Vector<String>& strings = setting.stringVector();
- v8::Local<v8::Array> stringsArray = v8::Array::New(strings.size());
- const unsigned length = strings.size();
- for (unsigned i = 0; i < length; ++i)
- stringsArray->Set(v8::Number::New(i), v8String(strings[i]));
- return stringsArray;
- }
- }
-}
-
-CALLBACK_FUNC_DECL(InspectorFrontendHostSetSetting)
-{
- INC_STATS("InspectorFrontendHost.setSetting()");
- if (args.Length() < 2)
- return v8::Undefined();
-
- String key = toWebCoreStringWithNullCheck(args[0]);
- if (key.isEmpty())
- return v8::Undefined();
-
- InspectorController::Setting setting;
-
- v8::Local<v8::Value> value = args[1];
- if (value->IsUndefined() || value->IsNull()) {
- // Do nothing. The setting is already NoType.
- ASSERT(setting.type() == InspectorController::Setting::NoType);
- } else if (value->IsString())
- setting.set(toWebCoreStringWithNullCheck(value));
- else if (value->IsNumber())
- setting.set(value->NumberValue());
- else if (value->IsBoolean())
- setting.set(value->BooleanValue());
- else if (value->IsArray()) {
- v8::Local<v8::Array> v8Array = v8::Local<v8::Array>::Cast(value);
- Vector<String> strings;
- for (unsigned i = 0; i < v8Array->Length(); ++i) {
- String item = toWebCoreString(v8Array->Get(v8::Integer::New(i)));
- if (item.isEmpty())
- return v8::Undefined();
- strings.append(item);
- }
- setting.set(strings);
- } else
- return v8::Undefined();
-
- InspectorFrontendHost* inspectorHost = V8DOMWrapper::convertToNativeObject<InspectorFrontendHost>(V8ClassIndex::INSPECTORFRONTENDHOST, args.Holder());
- InspectorController* ic = inspectorHost->inspectorController();
- if (ic)
- inspectorHost->inspectorController()->setSetting(key, setting);
-
- return v8::Undefined();
-}
-
} // namespace WebCore
virtual void inspectedURLChanged(const String& newURL) = 0;
- virtual void populateSetting(const String& key, InspectorController::Setting&) = 0;
- virtual void storeSetting(const String& key, const InspectorController::Setting&) = 0;
- virtual void removeSetting(const String& key) = 0;
+ virtual void populateSetting(const String& key, String* value) = 0;
+ virtual void storeSetting(const String& key, const String& value) = 0;
virtual void inspectorWindowObjectCleared() = 0;
};
static const float maximumAttachedHeightRatio = 0.75f;
static unsigned s_inspectorControllerCount;
-static HashMap<String, InspectorController::Setting*>* s_settingCache;
InspectorController::InspectorController(Page* page, InspectorClient* client)
: m_inspectedPage(page)
ASSERT(s_inspectorControllerCount);
--s_inspectorControllerCount;
- if (!s_inspectorControllerCount && s_settingCache) {
- deleteAllValues(*s_settingCache);
- delete s_settingCache;
- s_settingCache = 0;
- }
-
releaseDOMAgent();
m_inspectorBackend->disconnectController();
return m_inspectedPage->settings()->developerExtrasEnabled();
}
-const InspectorController::Setting& InspectorController::setting(const String& key) const
+String InspectorController::setting(const String& key) const
{
- if (!s_settingCache)
- s_settingCache = new HashMap<String, Setting*>;
-
- if (Setting* cachedSetting = s_settingCache->get(key))
- return *cachedSetting;
-
- Setting* newSetting = new Setting;
- s_settingCache->set(key, newSetting);
-
- m_client->populateSetting(key, *newSetting);
+ Settings::iterator it = m_settings.find(key);
+ if (it != m_settings.end())
+ return it->second;
- return *newSetting;
+ String value;
+ m_client->populateSetting(key, &value);
+ m_settings.set(key, value);
+ return value;
}
-void InspectorController::setSetting(const String& key, const Setting& setting)
+void InspectorController::setSetting(const String& key, const String& value)
{
- if (setting.type() == Setting::NoType) {
- if (s_settingCache) {
- Setting* cachedSetting = s_settingCache->get(key);
- if (cachedSetting) {
- s_settingCache->remove(key);
- delete cachedSetting;
- }
- }
-
- m_client->removeSetting(key);
- return;
- }
-
- if (!s_settingCache)
- s_settingCache = new HashMap<String, Setting*>;
-
- if (Setting* cachedSetting = s_settingCache->get(key))
- *cachedSetting = setting;
- else
- s_settingCache->set(key, new Setting(setting));
-
- m_client->storeSetting(key, setting);
+ m_settings.set(key, value);
+ m_client->storeSetting(key, value);
}
// Trying to inspect something in a frame with JavaScript disabled would later lead to
populateScriptObjects();
if (m_showAfterVisible == CurrentPanel) {
- Setting lastActivePanelSetting = setting(lastActivePanelSettingName);
- if (lastActivePanelSetting.type() == Setting::StringType)
- m_showAfterVisible = specialPanelForJSName(lastActivePanelSetting.string());
- else
- m_showAfterVisible = ElementsPanel;
+ String lastActivePanelSetting = setting(lastActivePanelSettingName);
+ m_showAfterVisible = specialPanelForJSName(lastActivePanelSetting);
}
if (m_nodeToFocus)
m_client->attachWindow();
- Setting attachedHeight = setting(inspectorAttachedHeightName);
- unsigned preferredHeight = attachedHeight.type() == Setting::IntegerType ? attachedHeight.integerValue() : defaultAttachedHeight;
+ String attachedHeight = setting(inspectorAttachedHeightName);
+ bool success = true;
+ int height = attachedHeight.toInt(&success);
+ unsigned preferredHeight = success ? height : defaultAttachedHeight;
// We need to constrain the window height here in case the user has resized the inspected page's window so that
// the user's preferred height would be too big to display.
unsigned totalHeight = m_page->mainFrame()->view()->visibleHeight() + m_inspectedPage->mainFrame()->view()->visibleHeight();
unsigned attachedHeight = constrainedAttachedWindowHeight(height, totalHeight);
- setSetting(inspectorAttachedHeightName, Setting(attachedHeight));
+ setSetting(inspectorAttachedHeightName, String::number(attachedHeight));
m_client->setAttachedWindowHeight(attachedHeight);
}
void InspectorController::storeLastActivePanel(const String& panelName)
{
- setSetting(lastActivePanelSettingName, Setting(panelName));
+ setSetting(lastActivePanelSettingName, panelName);
}
void InspectorController::toggleSearchForNodeInPage()
setFrontendProxyObject(m_scriptState, webInspectorObj, injectedScriptObj);
#if ENABLE(JAVASCRIPT_DEBUGGER)
- Setting debuggerEnabled = setting(debuggerEnabledSettingName);
- if (debuggerEnabled.type() == Setting::BooleanType && debuggerEnabled.booleanValue())
+ String debuggerEnabled = setting(debuggerEnabledSettingName);
+ if (debuggerEnabled == "true")
enableDebugger();
- Setting profilerEnabled = setting(profilerEnabledSettingName);
- if (profilerEnabled.type() == Setting::BooleanType && profilerEnabled.booleanValue())
+ String profilerEnabled = setting(profilerEnabledSettingName);
+ if (profilerEnabled == "true")
enableProfiler();
#endif
m_client->showWindow();
- Setting attachedHeight = setting(inspectorAttachedHeightName);
- unsigned preferredHeight = attachedHeight.type() == Setting::IntegerType ? attachedHeight.integerValue() : defaultAttachedHeight;
+ String attachedHeight = setting(inspectorAttachedHeightName);
+ bool success = true;
+ int height = attachedHeight.toInt(&success);
+ unsigned preferredHeight = success ? height : defaultAttachedHeight;
// This call might not go through (if the window starts out detached), but if the window is initially created attached,
// InspectorController::attachWindow is never called, so we need to make sure to set the attachedWindowHeight.
return;
if (always)
- setSetting(resourceTrackingEnabledSettingName, Setting(true));
+ setSetting(resourceTrackingEnabledSettingName, "true");
if (m_resourceTrackingEnabled)
return;
return;
if (always)
- setSetting(resourceTrackingEnabledSettingName, Setting(false));
+ setSetting(resourceTrackingEnabledSettingName, "false");
ASSERT(m_inspectedPage);
m_resourceTrackingEnabled = false;
return;
m_resourceTrackingSettingsLoaded = true;
- Setting resourceTracking = setting(resourceTrackingEnabledSettingName);
- if (resourceTracking.type() == Setting::BooleanType && resourceTracking.booleanValue())
+ String resourceTracking = setting(resourceTrackingEnabledSettingName);
+ if (resourceTracking == "true")
m_resourceTrackingEnabled = true;
}
void InspectorController::enableProfiler(bool always, bool skipRecompile)
{
if (always)
- setSetting(profilerEnabledSettingName, Setting(true));
+ setSetting(profilerEnabledSettingName, "true");
if (m_profilerEnabled)
return;
void InspectorController::disableProfiler(bool always)
{
if (always)
- setSetting(profilerEnabledSettingName, Setting(false));
+ setSetting(profilerEnabledSettingName, "false");
if (!m_profilerEnabled)
return;
void InspectorController::enableDebuggerFromFrontend(bool always)
{
if (always)
- setSetting(debuggerEnabledSettingName, Setting(true));
+ setSetting(debuggerEnabledSettingName, "true");
ASSERT(m_inspectedPage);
return;
if (always)
- setSetting(debuggerEnabledSettingName, Setting(false));
+ setSetting(debuggerEnabledSettingName, "false");
ASSERT(m_inspectedPage);
StoragePanel
} SpecialPanels;
- struct Setting {
- enum Type {
- NoType, StringType, StringVectorType, DoubleType, IntegerType, BooleanType
- };
-
- Setting()
- : m_type(NoType)
- {
- }
-
- explicit Setting(bool value)
- : m_type(BooleanType)
- {
- m_simpleContent.m_boolean = value;
- }
-
- explicit Setting(unsigned value)
- : m_type(IntegerType)
- {
- m_simpleContent.m_integer = value;
- }
-
- explicit Setting(const String& value)
- : m_type(StringType)
- {
- m_string = value;
- }
-
- Type type() const { return m_type; }
-
- String string() const { ASSERT(m_type == StringType); return m_string; }
- const Vector<String>& stringVector() const { ASSERT(m_type == StringVectorType); return m_stringVector; }
- double doubleValue() const { ASSERT(m_type == DoubleType); return m_simpleContent.m_double; }
- long integerValue() const { ASSERT(m_type == IntegerType); return m_simpleContent.m_integer; }
- bool booleanValue() const { ASSERT(m_type == BooleanType); return m_simpleContent.m_boolean; }
-
- void set(const String& value) { m_type = StringType; m_string = value; }
- void set(const Vector<String>& value) { m_type = StringVectorType; m_stringVector = value; }
- void set(double value) { m_type = DoubleType; m_simpleContent.m_double = value; }
- void set(long value) { m_type = IntegerType; m_simpleContent.m_integer = value; }
- void set(bool value) { m_type = BooleanType; m_simpleContent.m_boolean = value; }
-
- private:
- Type m_type;
-
- String m_string;
- Vector<String> m_stringVector;
-
- union {
- double m_double;
- long m_integer;
- bool m_boolean;
- } m_simpleContent;
- };
InspectorController(Page*, InspectorClient*);
~InspectorController();
Page* inspectedPage() const { return m_inspectedPage; }
- const Setting& setting(const String& key) const;
- void setSetting(const String& key, const Setting&);
+ String setting(const String& key) const;
+ void setSetting(const String& key, const String& value);
void inspect(Node*);
void highlight(Node*);
RefPtr<InjectedScriptHost> m_injectedScriptHost;
HashMap<String, ScriptValue> m_idToWrappedObject;
ObjectGroupsMap m_objectGroups;
-
long m_lastBoundObjectId;
+
+ typedef HashMap<String, String> Settings;
+ mutable Settings m_settings;
+
Vector<pair<long, String> > m_pendingEvaluateTestCommands;
#if ENABLE(JAVASCRIPT_DEBUGGER)
bool m_debuggerEnabled;
return true;
}
+String InspectorFrontendHost::setting(const String& key)
+{
+ return m_inspectorController ? m_inspectorController->setting(key) : "";
+}
+
+void InspectorFrontendHost::setSetting(const String& key, const String& value)
+{
+ if (m_inspectorController)
+ m_inspectorController->setSetting(key, value);
+}
+
} // namespace WebCore
#endif // ENABLE(INSPECTOR)
void addResourceSourceToFrame(long identifier, Node* frame);
bool addSourceToFrame(const String& mimeType, const String& source, Node* frame);
+ String setting(const String& key);
+ void setSetting(const String& key, const String& value);
+
private:
InspectorFrontendHost(InspectorController* inspectorController, InspectorClient* client);
void addResourceSourceToFrame(in long identifier, in Node frame);
boolean addSourceToFrame(in DOMString mimeType, in DOMString sourceValue, in Node frame);
+ DOMString setting(in DOMString key);
+ void setSetting(in DOMString key, in DOMString value);
+
[Custom] void search(in Node node, in DOMString query);
- [Custom] DOMObject setting(in DOMString key);
- [Custom] void setSetting(in DOMString key, in DOMObject value);
};
}
virtual void hideHighlight() { }
virtual void inspectedURLChanged(const String&) { }
- virtual void populateSetting(const String&, InspectorController::Setting&) { }
- virtual void storeSetting(const String&, const InspectorController::Setting&) { }
- virtual void removeSetting(const String&) { }
+ virtual void populateSetting(const String&, String*) { }
+ virtual void storeSetting(const String&, const String&) { }
virtual void inspectorWindowObjectCleared() { }
};
+2009-12-03 Pavel Feldman <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>
+
+ Reviewed by Timothy Hatcher.
+
+ Web Inspector: Simplify the settings support in inspector controller.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32076
+
+ * WebCoreSupport/WebInspectorClientCF.cpp:
+ (WebInspectorClient::populateSetting):
+ (WebInspectorClient::storeSetting):
+
2009-04-20 Steve Falkenburg <sfalken@apple.com>
Separate JavaScriptCore.dll from WebKit.dll.
return CFStringCreateWithFormat(0, 0, CFSTR("WebKit Web Inspector Setting - %@"), keyCFString.get());
}
-void WebInspectorClient::populateSetting(const String& key, InspectorController::Setting& setting)
+void WebInspectorClient::populateSetting(const String& key, String* setting)
{
RetainPtr<CFStringRef> preferencesKey(AdoptCF, createKeyForPreferences(key));
RetainPtr<CFPropertyListRef> value(AdoptCF, CFPreferencesCopyAppValue(preferencesKey.get(), kCFPreferencesCurrentApplication));
CFTypeID type = CFGetTypeID(value.get());
if (type == CFStringGetTypeID())
- setting.set(static_cast<String>(static_cast<CFStringRef>(value.get())));
+ *setting = static_cast<String>(static_cast<CFStringRef>(value.get()));
else if (type == CFBooleanGetTypeID())
- setting.set(static_cast<bool>(CFBooleanGetValue(static_cast<CFBooleanRef>(value.get()))));
- else if (type == CFNumberGetTypeID()) {
- CFNumberRef number = static_cast<CFNumberRef>(value.get());
- if (CFNumberIsFloatType(number)) {
- double doubleNumber = 0.0;
- CFNumberGetValue(static_cast<CFNumberRef>(value.get()), kCFNumberDoubleType, &doubleNumber);
- setting.set(doubleNumber);
- } else {
- long longNumber = 0;
- CFNumberGetValue(static_cast<CFNumberRef>(value.get()), kCFNumberLongType, &longNumber);
- setting.set(longNumber);
- }
- } else if (type == CFArrayGetTypeID()) {
- Vector<String> strings;
-
- CFArrayRef array = static_cast<CFArrayRef>(value.get());
- unsigned length = CFArrayGetCount(array);
- for (unsigned i = 0; i < length; ++i) {
- CFStringRef string = static_cast<CFStringRef>(CFArrayGetValueAtIndex(array, i));
- if (CFGetTypeID(string) == CFStringGetTypeID())
- strings.append(static_cast<String>(static_cast<CFStringRef>(string)));
- }
-
- setting.set(strings);
- } else
- ASSERT_NOT_REACHED();
+ *setting = static_cast<bool>(CFBooleanGetValue(static_cast<CFBooleanRef>(value.get()))) ? "true" : "false";
+ else
+ *setting = "";
}
-void WebInspectorClient::storeSetting(const String& key, const InspectorController::Setting& setting)
+void WebInspectorClient::storeSetting(const String& key, const String& setting)
{
RetainPtr<CFPropertyListRef> objectToStore;
-
- switch (setting.type()) {
- default:
- case InspectorController::Setting::NoType:
- ASSERT_NOT_REACHED();
- break;
- case InspectorController::Setting::StringType:
- objectToStore.adoptCF(setting.string().createCFString());
- break;
- case InspectorController::Setting::BooleanType:
- objectToStore = (setting.booleanValue() ? kCFBooleanTrue : kCFBooleanFalse);
- break;
-
- case InspectorController::Setting::DoubleType: {
- double value = setting.doubleValue();
- objectToStore.adoptCF(CFNumberCreate(0, kCFNumberDoubleType, &value));
- break;
- }
-
- case InspectorController::Setting::IntegerType: {
- long value = setting.integerValue();
- objectToStore.adoptCF(CFNumberCreate(0, kCFNumberLongType, &value));
- break;
- }
-
- case InspectorController::Setting::StringVectorType: {
- const Vector<String>& strings = setting.stringVector();
- const unsigned length = strings.size();
-
- RetainPtr<CFMutableArrayRef> array(AdoptCF, CFArrayCreateMutable(0, length, &kCFTypeArrayCallBacks));
-
- for (unsigned i = 0; i < length; ++i) {
- RetainPtr<CFStringRef> string(AdoptCF, strings[i].createCFString());
- CFArraySetValueAtIndex(array.get(), i, string.get());
- }
-
- objectToStore = array;
- break;
- }
- }
-
+ objectToStore.adoptCF(setting.createCFString());
ASSERT(objectToStore);
RetainPtr<CFStringRef> preferencesKey(AdoptCF, createKeyForPreferences(key));
CFPreferencesSetAppValue(preferencesKey.get(), objectToStore.get(), kCFPreferencesCurrentApplication);
}
-
-void WebInspectorClient::removeSetting(const String& key)
-{
- RetainPtr<CFStringRef> preferencesKey(AdoptCF, createKeyForPreferences(key));
- CFPreferencesSetAppValue(preferencesKey.get(), 0, kCFPreferencesCurrentApplication);
-}
+2009-12-03 Pavel Feldman <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>
+
+ Reviewed by Timothy Hatcher.
+
+ Web Inspector: Simplify the settings support in inspector controller.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32076
+
+ * src/InspectorClientImpl.cpp:
+ (WebKit::InspectorClientImpl::hiddenPanels):
+ (WebKit::InspectorClientImpl::populateSetting):
+ (WebKit::InspectorClientImpl::storeSetting):
+ (WebKit::InspectorClientImpl::loadSettings):
+ (WebKit::InspectorClientImpl::saveSettings):
+ * src/InspectorClientImpl.h:
+
2009-12-03 Ben Murdoch <benm@google.com>
Reviewed by Brady Eidson.
String InspectorClientImpl::hiddenPanels()
{
- // Enumerate tabs that are currently disabled.
- return "scripts,profiles,databases";
+ notImplemented();
+ return "";
}
-void InspectorClientImpl::populateSetting(const String& key, InspectorController::Setting& setting)
+void InspectorClientImpl::populateSetting(const String& key, String* value)
{
loadSettings();
if (m_settings->contains(key))
- setting = m_settings->get(key);
-}
-
-void InspectorClientImpl::storeSetting(const String& key, const InspectorController::Setting& setting)
-{
- loadSettings();
- m_settings->set(key, setting);
- saveSettings();
+ *value = m_settings->get(key);
}
-void InspectorClientImpl::removeSetting(const String& key)
+void InspectorClientImpl::storeSetting(const String& key, const String& value)
{
loadSettings();
- m_settings->remove(key);
+ m_settings->set(key, value);
saveSettings();
}
String name = decodeURLEscapeSequences(tokens[0]);
String type = tokens[1];
- InspectorController::Setting setting;
- bool ok = true;
+ String setting;
if (type == "string")
- setting.set(decodeURLEscapeSequences(tokens[2]));
- else if (type == "double")
- setting.set(tokens[2].toDouble(&ok));
- else if (type == "integer")
- setting.set(static_cast<long>(tokens[2].toInt(&ok)));
+ setting = decodeURLEscapeSequences(tokens[2]);
else if (type == "boolean")
- setting.set(tokens[2] == "true");
+ setting = tokens[2];
else
continue;
- if (ok)
- m_settings->set(name, setting);
+ m_settings->set(name, setting);
}
}
{
String data;
for (SettingsMap::iterator it = m_settings->begin(); it != m_settings->end(); ++it) {
- String entry;
- InspectorController::Setting value = it->second;
String name = encodeWithURLEscapeSequences(it->first);
- switch (value.type()) {
- case InspectorController::Setting::StringType:
- entry = String::format(
- "%s:string:%s",
- name.utf8().data(),
- encodeWithURLEscapeSequences(value.string()).utf8().data());
- break;
- case InspectorController::Setting::DoubleType:
- entry = String::format(
- "%s:double:%f",
- name.utf8().data(),
- value.doubleValue());
- break;
- case InspectorController::Setting::IntegerType:
- entry = String::format(
- "%s:integer:%ld",
- name.utf8().data(),
- value.integerValue());
- break;
- case InspectorController::Setting::BooleanType:
- entry = String::format("%s:boolean:%s",
- name.utf8().data(),
- value.booleanValue() ? "true" : "false");
- break;
- case InspectorController::Setting::StringVectorType:
- notImplemented();
- break;
- default:
- ASSERT_NOT_REACHED();
- break;
- }
+ String value = it->second;
+ String entry = String::format(
+ "%s:string:%s",
+ name.utf8().data(),
+ encodeWithURLEscapeSequences(value).utf8().data());
data.append(entry);
data.append("\n");
}
virtual void inspectedURLChanged(const WebCore::String& newURL);
virtual void populateSetting(
const WebCore::String& key,
- WebCore::InspectorController::Setting&);
+ WebCore::String* value);
virtual void storeSetting(
const WebCore::String& key,
- const WebCore::InspectorController::Setting&);
- virtual void removeSetting(const WebCore::String& key);
+ const WebCore::String& value);
virtual void inspectorWindowObjectCleared();
private:
// The WebViewImpl of the page being inspected; gets passed to the constructor
WebViewImpl* m_inspectedWebView;
- typedef HashMap<WebCore::String, WebCore::InspectorController::Setting> SettingsMap;
+ typedef HashMap<WebCore::String, WebCore::String> SettingsMap;
OwnPtr<SettingsMap> m_settings;
};
+2009-12-03 Pavel Feldman <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>
+
+ Reviewed by Timothy Hatcher.
+
+ Web Inspector: Simplify the settings support in inspector controller.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32076
+
+ * WebCoreSupport/InspectorClientGtk.cpp:
+ (WebKit::InspectorClient::populateSetting):
+ (WebKit::InspectorClient::storeSetting):
+ * WebCoreSupport/InspectorClientGtk.h:
+
2009-12-03 Ben Murdoch <benm@google.com>
Reviewed by Brady Eidson.
notImplemented();
}
-
-void InspectorClient::populateSetting(const String& key, InspectorController::Setting& setting)
-{
- notImplemented();
-}
-
-void InspectorClient::storeSetting(const String& key, const InspectorController::Setting& setting)
+void InspectorClient::populateSetting(const String& key, String* value)
{
notImplemented();
}
-void InspectorClient::removeSetting(const String& key)
+void InspectorClient::storeSetting(const String& key, const String& value)
{
notImplemented();
}
virtual void hideHighlight();
virtual void inspectedURLChanged(const WebCore::String& newURL);
- virtual void populateSetting(const WebCore::String& key, WebCore::InspectorController::Setting&);
- virtual void storeSetting(const WebCore::String& key, const WebCore::InspectorController::Setting&);
- virtual void removeSetting(const WebCore::String& key);
+ virtual void populateSetting(const WebCore::String& key, WebCore::String* value);
+ virtual void storeSetting(const WebCore::String& key, const WebCore::String& value);
virtual void inspectorWindowObjectCleared();
+2009-12-03 Pavel Feldman <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>
+
+ Reviewed by Timothy Hatcher.
+
+ Web Inspector: Simplify the settings support in inspector controller.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32076
+
+ * WebCoreSupport/InspectorClientHaiku.cpp:
+ (WebCore::InspectorClientHaiku::populateSetting):
+ (WebCore::InspectorClientHaiku::storeSetting):
+ * WebCoreSupport/InspectorClientHaiku.h:
+
2009-12-03 Ben Murdoch <benm@google.com>
Reviewed by Brady Eidson.
notImplemented();
}
-void InspectorClientHaiku::populateSetting(const String& key, InspectorController::Setting&)
+void InspectorClientHaiku::populateSetting(const String& key, String* value)
{
notImplemented();
}
-void InspectorClientHaiku::storeSetting(const String& key, const InspectorController::Setting&)
-{
- notImplemented();
-}
-
-void InspectorClientHaiku::removeSetting(const String& key)
+void InspectorClientHaiku::storeSetting(const String& key, const String& value)
{
notImplemented();
}
virtual void inspectedURLChanged(const String& newURL);
- virtual void populateSetting(const String& key, InspectorController::Setting&);
- virtual void storeSetting(const String& key, const InspectorController::Setting&);
- virtual void removeSetting(const String& key);
+ virtual void populateSetting(const WebCore::String& key, WebCore::String* value);
+ virtual void storeSetting(const WebCore::String& key, const WebCore::String& value);
virtual void inspectorWindowObjectCleared();
};
+2009-12-03 Pavel Feldman <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>
+
+ Reviewed by Timothy Hatcher.
+
+ Web Inspector: Simplify the settings support in inspector controller.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32076
+
+ * WebCoreSupport/WebInspectorClient.h:
+ * WebCoreSupport/WebInspectorClient.mm:
+ (-[WebInspectorWindowController showWindow:]):
+ (-[WebInspectorWindowController attach]):
+ (-[WebInspectorWindowController detach]):
+
2009-12-03 Ben Murdoch <benm@google.com>
Reviewed by Brady Eidson.
virtual void hideHighlight();
virtual void inspectedURLChanged(const WebCore::String& newURL);
- virtual void populateSetting(const WebCore::String& key, WebCore::InspectorController::Setting&);
- virtual void storeSetting(const WebCore::String& key, const WebCore::InspectorController::Setting&);
- virtual void removeSetting(const WebCore::String& key);
+ virtual void populateSetting(const WebCore::String& key, WebCore::String* value);
+ virtual void storeSetting(const WebCore::String& key, const WebCore::String& value);
virtual void inspectorWindowObjectCleared();
_visible = YES;
// If no preference is set - default to an attached window. This is important for inspector LayoutTests.
- InspectorController::Setting shouldAttach = [_inspectedWebView page]->inspectorController()->setting(inspectorStartsAttachedName);
- _shouldAttach = (shouldAttach.type() == InspectorController::Setting::BooleanType) ? shouldAttach.booleanValue() : true;
+ String shouldAttach = [_inspectedWebView page]->inspectorController()->setting(inspectorStartsAttachedName);
+ _shouldAttach = shouldAttach != "false";
if (_shouldAttach) {
WebFrameView *frameView = [[_inspectedWebView mainFrame] frameView];
if (_attachedToInspectedWebView)
return;
- [_inspectedWebView page]->inspectorController()->setSetting(inspectorStartsAttachedName, InspectorController::Setting(true));
+ [_inspectedWebView page]->inspectorController()->setSetting(inspectorStartsAttachedName, "true");
_movingWindows = YES;
[self close];
if (!_attachedToInspectedWebView)
return;
- [_inspectedWebView page]->inspectorController()->setSetting(inspectorStartsAttachedName, InspectorController::Setting(false));
+ [_inspectedWebView page]->inspectorController()->setSetting(inspectorStartsAttachedName, "false");
_movingWindows = YES;
[self close];
+2009-12-03 Pavel Feldman <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>
+
+ Reviewed by Timothy Hatcher.
+
+ Web Inspector: Simplify the settings support in inspector controller.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32076
+
+ * WebCoreSupport/InspectorClientQt.cpp:
+ (WebCore::InspectorClientQt::populateSetting):
+ (WebCore::InspectorClientQt::storeSetting):
+ (WebCore::variantToSetting):
+ (WebCore::settingToVariant):
+ * WebCoreSupport/InspectorClientQt.h:
+
2009-12-03 Ben Murdoch <benm@google.com>
Reviewed by Brady Eidson.
static const QLatin1String settingStoragePrefix("Qt/QtWebKit/QWebInspector/");
static const QLatin1String settingStorageTypeSuffix(".type");
-static InspectorController::Setting variantToSetting(const QVariant& qvariant);
-static QVariant settingToVariant(const InspectorController::Setting& icSetting);
+static String variantToSetting(const QVariant& qvariant);
+static QVariant settingToVariant(const String& value);
class InspectorClientWebPage : public QWebPage {
Q_OBJECT
}
}
-void InspectorClientQt::populateSetting(const String& key, InspectorController::Setting& setting)
+void InspectorClientQt::populateSetting(const String& key, String* setting)
{
QSettings qsettings;
if (qsettings.status() == QSettings::AccessError) {
QString storedValueType = qsettings.value(settingKey + settingStorageTypeSuffix).toString();
QVariant storedValue = qsettings.value(settingKey);
storedValue.convert(QVariant::nameToType(storedValueType.toAscii().data()));
- setting = variantToSetting(storedValue);
+ *setting = variantToSetting(storedValue);
}
-void InspectorClientQt::storeSetting(const String& key, const InspectorController::Setting& setting)
+void InspectorClientQt::storeSetting(const String& key, const String& setting)
{
QSettings qsettings;
if (qsettings.status() == QSettings::AccessError) {
qsettings.setValue(settingKey + settingStorageTypeSuffix, QVariant::typeToName(valueToStore.type()));
}
-void InspectorClientQt::removeSetting(const String&)
+static String variantToSetting(const QVariant& qvariant)
{
- notImplemented();
-}
-
-static InspectorController::Setting variantToSetting(const QVariant& qvariant)
-{
- InspectorController::Setting retVal;
+ String retVal;
switch (qvariant.type()) {
case QVariant::Bool:
- retVal.set(qvariant.toBool());
- break;
- case QVariant::Double:
- retVal.set(qvariant.toDouble());
- break;
- case QVariant::Int:
- retVal.set((long)qvariant.toInt());
- break;
+ retVal = qvariant.toBool() ? "true" : "false";
case QVariant::String:
- retVal.set(qvariant.toString());
- break;
- case QVariant::StringList: {
- QStringList qsList = qvariant.toStringList();
- int listCount = qsList.count();
- Vector<String> vector(listCount);
- for (int i = 0; i < listCount; ++i)
- vector[i] = qsList[i];
- retVal.set(vector);
- break;
- }
+ retVal = qvariant.toString();
}
return retVal;
}
-static QVariant settingToVariant(const InspectorController::Setting& icSetting)
+static QVariant settingToVariant(const String& setting)
{
QVariant retVal;
-
- switch (icSetting.type()) {
- case InspectorController::Setting::StringType:
- retVal.setValue(static_cast<QString>(icSetting.string()));
- break;
- case InspectorController::Setting::StringVectorType: {
- const Vector<String>& vector = icSetting.stringVector();
- Vector<String>::const_iterator iter;
- QStringList qsList;
- for (iter = vector.begin(); iter != vector.end(); ++iter)
- qsList << *iter;
- retVal.setValue(qsList);
- break;
- }
- case InspectorController::Setting::DoubleType:
- retVal.setValue(icSetting.doubleValue());
- break;
- case InspectorController::Setting::IntegerType:
- retVal.setValue((int)icSetting.integerValue());
- break;
- case InspectorController::Setting::BooleanType:
- retVal.setValue(icSetting.booleanValue());
- break;
- }
-
+ retVal.setValue(static_cast<QString>(setting));
return retVal;
}
virtual void hideHighlight();
virtual void inspectedURLChanged(const String& newURL);
- virtual void populateSetting(const String& key, InspectorController::Setting&);
- virtual void storeSetting(const String& key, const InspectorController::Setting&);
- virtual void removeSetting(const String& key);
+ virtual void populateSetting(const String& key, String* value);
+ virtual void storeSetting(const String& key, const String& value);
virtual void inspectorWindowObjectCleared();
+2009-12-03 Pavel Feldman <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>
+
+ Reviewed by Timothy Hatcher.
+
+ Web Inspector: Simplify the settings support in inspector controller.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32076
+
+ * WebCoreSupport/WebInspectorClient.cpp:
+ (WebInspectorClient::attachWindow):
+ (WebInspectorClient::detachWindow):
+ (WebInspectorClient::showWindowWithoutNotifications):
+ * WebCoreSupport/WebInspectorClient.h:
+
2009-12-03 Ben Murdoch <benm@google.com>
Reviewed by Brady Eidson.
if (m_attached)
return;
- m_inspectedWebView->page()->inspectorController()->setSetting(inspectorStartsAttachedName, InspectorController::Setting(true));
+ m_inspectedWebView->page()->inspectorController()->setSetting(inspectorStartsAttachedName, "true");
closeWindowWithoutNotifications();
showWindowWithoutNotifications();
if (!m_attached)
return;
- m_inspectedWebView->page()->inspectorController()->setSetting(inspectorStartsAttachedName, InspectorController::Setting(false));
+ m_inspectedWebView->page()->inspectorController()->setSetting(inspectorStartsAttachedName, "false");
closeWindowWithoutNotifications();
showWindowWithoutNotifications();
ASSERT(m_inspectedWebViewHwnd);
// If no preference is set - default to an attached window. This is important for inspector LayoutTests.
- InspectorController::Setting shouldAttach = m_inspectedWebView->page()->inspectorController()->setting(inspectorStartsAttachedName);
- m_shouldAttachWhenShown = shouldAttach.type() == InspectorController::Setting::BooleanType ? shouldAttach.booleanValue() : true;
+ String shouldAttach = m_inspectedWebView->page()->inspectorController()->setting(inspectorStartsAttachedName);
+ m_shouldAttachWhenShown = shouldAttach != "false";
if (!m_shouldAttachWhenShown) {
// Put the Inspector's WebView inside our window and show it.
virtual void inspectedURLChanged(const WebCore::String& newURL);
- virtual void populateSetting(const WebCore::String& key, WebCore::InspectorController::Setting&);
- virtual void storeSetting(const WebCore::String& key, const WebCore::InspectorController::Setting&);
- virtual void removeSetting(const WebCore::String& key);
+ virtual void populateSetting(const WebCore::String& key, WebCore::String* value);
+ virtual void storeSetting(const WebCore::String& key, const WebCore::String& value);
virtual void inspectorWindowObjectCleared();
+2009-12-03 Pavel Feldman <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>
+
+ Reviewed by Timothy Hatcher.
+
+ Web Inspector: Simplify the settings support in inspector controller.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32076
+
+ * WebKitSupport/InspectorClientWx.cpp:
+ (WebCore::InspectorClientWx::populateSetting):
+ (WebCore::InspectorClientWx::storeSetting):
+ * WebKitSupport/InspectorClientWx.h:
+
2009-12-03 Ben Murdoch <benm@google.com>
Reviewed by Brady Eidson.
notImplemented();
}
-void InspectorClientWx::populateSetting(const String& key, InspectorController::Setting& setting)
+void InspectorClientWx::populateSetting(const String& key, String* setting)
{
notImplemented();
}
-void InspectorClientWx::storeSetting(const String& key, const InspectorController::Setting& setting)
-{
- notImplemented();
-}
-
-void InspectorClientWx::removeSetting(const String& key)
+void InspectorClientWx::storeSetting(const String& key, const String& setting)
{
notImplemented();
}
virtual void inspectedURLChanged(const String& newURL);
- virtual void populateSetting(const String& key, InspectorController::Setting&);
- virtual void storeSetting(const String& key, const InspectorController::Setting&);
- virtual void removeSetting(const String& key);
-
+ virtual void populateSetting(const String& key, String* value);
+ virtual void storeSetting(const String& key, const String& value);
+
virtual void inspectorWindowObjectCleared();
};