servo/components/script
bors-servo 5ec725488f
Auto merge of #22923 - peterjoel:issue_8539_prefs_refactor, r=jdm
#8539 Config preferences backend restructure

<!-- Please describe your changes on the following line: -->

A procedural macro for generating static structures for use as the backend for config preferences, as well a mapping from string names to accessors.

Preferences can be accessed and updated via a map-like interface with `String` keys, and now also via a convenience macro: `get_pref!(path.to.pref)`. Various `serde`-compatible field attributes are also supported, including renaming the string keys. This could be useful when changing the backend structure without breaking existing usages.

I have added the choice to use `i64` as well as `f64` for storing numbers. As it turns out, none of the existing preferences used non-integer values. Setting a floating point value from a command-line argument requires a decimal point in order to parse correctly.

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #8539

<!-- Either: -->
- [X] There are tests for these changes OR
- [ ] These changes do not require tests because ___

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

-----

I have a few outstanding problems or questions:

1. I am unable to get rid of this warning:
    ```
    warning: unnecessary path disambiguator
       --> components/config/prefs.rs:130:51
        |
    130 |         accessor_type = crate::pref_util::Accessor::<Prefs, crate::pref_util::PrefValue>,
        |                                                   ^^ try removing `::`
    ```
    See: https://stackoverflow.com/questions/54710797/how-to-disable-unnecessary-path-disambiguator-warning
2. Several of the preferences in use were not represented in `prefs.json`. Some of these may be in error, but it is hard to tell. For example `js.offthread_compilation.enabled` vs `js.ion.offthread_compilation.enabled` could be different preferences or could be intended to have the same value.
3. Previously, several pieces of code provided default values when accessing a preference that may not be present. For example:
    ```Rust
    let DBL_CLICK_TIMEOUT = Duration::from_millis(
        PREFS
            .get("dom.document.dblclick_timeout")
            .as_u64()
            .unwrap_or(300),
    );
    ```
    Fallback values don't really make sense now and I've added these defaults to `prefs.json`. Does this sound right?
4. I have kept `PrefValue::Missing`, though it doesn't seem very useful any more. An error might be more appropriate now for an incorrect preference key. I've kept this partly because [`webdriver_server` uses it](https://github.com/servo/servo/blob/master/components/webdriver_server/lib.rs#L224).

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/22923)
<!-- Reviewable:end -->
2019-03-20 14:33:37 -04:00
..
docs Replace http with https in docs 2018-11-06 11:39:09 +01:00
dom Auto merge of #22923 - peterjoel:issue_8539_prefs_refactor, r=jdm 2019-03-20 14:33:37 -04:00
task_source Update MPL license to https (part 3) 2018-11-19 14:47:12 +01:00
body.rs Update MPL license to https (part 3) 2018-11-19 14:47:12 +01:00
build.rs Update MPL license to https (part 3) 2018-11-19 14:47:12 +01:00
Cargo.toml Remove offscreen_gl_context dependency from canvas_traits and script. 2019-03-07 09:27:36 -05:00
clipboard_provider.rs Update MPL license to https (part 3) 2018-11-19 14:47:12 +01:00
CMakeLists.txt build(cmake): detect python binary for specified version 2018-03-13 09:25:06 -07:00
devtools.rs Fix servo build. 2019-02-10 07:23:51 +01:00
document_loader.rs ran ./mach fmt 2019-03-14 14:10:29 -05:00
fetch.rs Remove foreign service-workers mode 2018-12-23 01:48:45 +08:00
image_listener.rs Implement HTMLMediaElement poster attribute 2019-01-11 17:11:11 +01:00
layout_image.rs Add url for LayoutImageContext 2019-03-16 12:26:31 -03:00
lib.rs Implement CDATASection interface and createCDATASection method 2019-03-14 21:41:02 +02:00
mem.rs Update MPL license to https (part 3) 2018-11-19 14:47:12 +01:00
microtask.rs Update MPL license to https (part 3) 2018-11-19 14:47:12 +01:00
network_listener.rs refactored performance timing to align with updated spec 2018-11-20 16:21:32 +00:00
script_runtime.rs #8539 Config preferences backend restructure 2019-03-20 15:01:26 +00:00
script_thread.rs ran ./mach fmt 2019-03-14 14:10:29 -05:00
serviceworker_manager.rs #8539 Config preferences backend restructure 2019-03-20 15:01:26 +00:00
serviceworkerjob.rs Update MPL license to https (part 3) 2018-11-19 14:47:12 +01:00
stylesheet_loader.rs refactored performance timing to align with updated spec 2018-11-20 16:21:32 +00:00
task.rs Update MPL license to https (part 3) 2018-11-19 14:47:12 +01:00
task_manager.rs Update MPL license to https (part 3) 2018-11-19 14:47:12 +01:00
task_queue.rs in BC event-loop, only run tasks related to fully-active documents 2019-03-06 14:18:18 +08:00
test.rs Update MPL license to https (part 3) 2018-11-19 14:47:12 +01:00
textinput.rs Fixed bug in textinput::adjust_vertical concerning selection_origin update 2018-12-22 17:50:24 +01:00
timers.rs #8539 Config preferences backend restructure 2019-03-20 15:01:26 +00:00
unpremultiplytable.rs Update MPL license to https (part 3) 2018-11-19 14:47:12 +01:00
webdriver_handlers.rs Implement WebDriver FindElementFromElement command 2019-03-09 16:56:51 +02:00