Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upRewrite the parser to be fully incremental #68
Closed
+2,026
−1,546
Conversation
See bullet point two of: http://dev.w3.org/csswg/css-syntax/#changes-CR-20140220
See: http://dev.w3.org/csswg/css-syntax/#consume-a-declaration0 After consuming the colon token, it states the declaration's value is the consumption of every subsequent component value, until we reach an EOF token.
Identifiers may now begin with "--".
The semicolon token should not be respected.
Quoted URLs are now tokenized as functions
…05c' into incremental
The tokenizer is now fully incremental, rather than yielding a block/function at a time. The convention is now to take `&mut Parser` as input for parsing, and only consume as necessary.
This comment has been minimized.
This comment has been minimized.
|
The CSS Syntax spec was changed to enable CSS Variables / custom properties named e.g. |
Let’s assume that str::len() calls are optimized away.
This would help taking input incrementally (rather than having a single `&str`) if we want to do that.
Conflicts: Cargo.toml src/color.rs src/parser.rs src/serializer.rs src/tests.rs src/tokenizer.rs
|
f? @pcwalton and anyone with opinions on writing parsers. |
…efore.
The new convention is that any parsing function returning `Err(())` may or may not have consumed any number of tokens from the input. Therefore, any the caller wishes to recover and try parsing something else, it should call `parser.reset(position)` where `position` is the result of `parser.position()` that was saved beforehand. The Parser::try helper does this for you by taking a closure returns Result, and resetting the position if the result is Err.
SimonSapin
added a commit
to servo/servo
that referenced
this pull request
Jan 19, 2015
SimonSapin
added a commit
to servo/servo
that referenced
this pull request
Jan 20, 2015
SimonSapin
added a commit
to servo/servo
that referenced
this pull request
Jan 20, 2015
SimonSapin
added a commit
to servo/servo
that referenced
this pull request
Jan 21, 2015
bors-servo
pushed a commit
to servo/servo
that referenced
this pull request
Jan 21, 2015
srm09
added a commit
to shanil-puri/servo
that referenced
this pull request
Feb 4, 2015
Don't categorize HTMLInputElement as a TableCellFragment
Closes #4196.
Cleanup Document::GetDoctype.
Cleanup Document::GetDocumentElement.
Cleanup Document::SetBody.
Cleanup Document::GetElementsByName.
New commits added.
Rebase commit
Removing accidental commti.
Commit no update
devtools: handle script task panics gracefully in ConsoleActor.
Implement the HTMLScriptElement.src setter
Fixes #1113.
remove bindings codegen h/cpp files from .gitignore
These files don't exist in the tree, and the codegen doesn't create
them, so we shouldn't have them sitting around in .gitignore.
Make tidy ingore new target dir
added ErrorEvent WebIDL and errorevent.rs
Mach test inference fix
Implement MutNullableJS::or_init.
This will make it easier to implement lazy getters.
Use MutNullableJS::or_init in Document.
Use MutNullableJS::or_init in Window.
convert net crate to use hyper
convert msg crate to use hyper
convert script crate to use hyper
adjust WPT since hyper fixed some
Set up openssl on Android
Temporarily change expectations for some wpt tests till hyper gets support for status codes >599
allow deleting last char
Make TextInput correctly handle multibyte chars.
Implements some HTMLTextAreaElement attributes
These attributes all reflect their own related content values, with the
exception of defaultValue, which acts as an alias for its IDL
textContent attribute.
Many of these do have default values and constraints which are currently unimplemented.
Implements multi line text input for TextArea
Updates WPT to expect newly passing tests
Addresses reviews
More review addressing
HTMLTextArea: Implements a dirty value flag
Handle default uint attributes properly
...and passing a whole bunch of new tests.
Make the password input element show the correct number of dots for multibyte chars.
Change time::profile's meta booleans to enums.
This makes these parameters self-documenting.
This patch does not attempt to push those enums into the data
structures that feed calls to this function.
Fixes #4158.
Issue 4253 - Setting timeout on a sync XHR should throw InvalidAccessErr
Clarify the panic in get_uint_attribute.
Split up the InputButton variant
Implement form control mutability, rename FormOwner -> FormControl
Add stub Activatable trait
Add trusted setter to Event
Implement basic (unhooked) framework for element activation
Hook up authentic click activation to the script task
Some reorganization of activation code:
- Make method name apply to trait implementor better (When a user agent is to run post-click activation steps on an element, it must run the activation behavior defined for that element)
- Mention invariants and conditions on authentic_click_activation
Move InputSubmit to Activatable
Move InputCheckbox to Activatable
Refactor code for fetching radio siblings
Move InputRadio to Activatable
Hook up synthetic click activation to script_task and <>.click()
Implement implicit form submission
Address review comments
Implement QuerySelectorIterator (fixes #4082)
Switch over to query_selector_iter
Switch to NodeFlags (the footprint has not changed)
Add oninput/onchange so tests work
Add Comparable trait to js.rs; fixups
`should_move_clip_rect` is a bare function
`self` is never used, so there's no need for this to be a method.
Fixes #4261.
PEP8 line length fixes in testing_commands.py
...so that PyLint stops yelling at me
Adds a --component (or -c) argument to test-unit
Example usage:
`./mach test-unit -c style`
Last second bug catch
Corrected case of Document#characterSet
Resolves #4251
Use .clone() instead of.as_slice().to_string()
Update content tests for Document#characterSet
Use or_init where appropriate.
Fix breakage of `./mach test`
When running commands through Registrar.dispatch, mach does not behave
in the same way it would as if it were running through the command line.
Defaults normally provided through a combination of @CommandArgument and
argparse magic are ignored.
I have some ideas as to how to fix this, but until then, this will allow
`./mach test` to run through test-unit properly.
Fix path for CEF build.
Update cargo.lock for CEF and fix left over line from libgreen removal.
servo.css: Style <button> like <input type=button>
Implement the "messageevent" argument to Document#createEvent. #4008
Remove an expected failure from tests/wpt/metadata/dom/events/EventTarget-dispatchEvent.html.ini
Create the root frame before evaluating the javascript URL.
This prevents a crash when the script in the javascript URL accesses the
document attribute.
Fix bug of TextInput.adjust_vertical(1) always moving to the end of text.
Implement Page(Up|Down) functionality for TextInput.
Fix bug of TextInput.adjust_horizontal causing stack overflow or wraparound
When the edit_point is in the first position of a multiline TextInput
adjust_horizontal(-1) moves the edit_point to the end of the first line.
When the first line is empty this causes a stack overflow. When the edit_point
is in the last position adjust_horizontal(1) causes a stack overflow.
Simplify the content_changed call in ScriptTask::load.
Cleanup last_loaded_url/last_url handling in ScriptTask::load.
Pass the load data to parse_html directly, rather than in an Option.
Simplify the LoadData creation in parse_html.
Move the networking code in parse_html into ScriptTask::load.
This doesn't really have anything to do with parsing HTML, and fits in better
with the code in ScriptTask::load. In particular, all changes to Page's url
now go through ScriptTask methods.
Make parse_html's base_url argument non-optional.
It turns out the case where it woul be None can't happen.
Rename gfx/render_task.rs -> gfx/paint_task.rs
Rename RenderTask -> PaintTask.
Rename canvas_render_task -> canvas_paint_task
Rename CanvasRenderTask -> CanvasPaintTask.
Rename RenderContext -> PaintContext
Rename RenderLayer -> PaintLayer
Rename RenderRequest -> PaintRequest
Rename RenderChan -> PaintChan
Rename gfx::paint_task::Msg
Rename compositor_task::Msg.
Rename RenderListener -> PaintListener, and its methods.
Rename RenderState -> PaintState
Rename IOCompositor's members.
Rename WindowMethods::set_paint_state()
Fix README.md: a tile size is used for 'painting'.
Rename RendererReadyMsg -> PainterReadyMsg
Rename RenderFontCacheEntry -> PaintFontCacheEntry.
Rename TaskState::RENDER -> TaskState::PAINT
Replace almost "render" to "paint" words in gfx crate.
Replace almost "render" to "paint" in compositing crate.
This doesn't touch some "render" words which are used as general means.
Replace almost "render" to "paint" in layout crate.
This doesn't touch some "render" words which are used as general means.
Replace render to paint in util/opts.rs. Some general words are not replaced.
Replace 'render' to 'paint' in compositor_msg.rs
Implements the :checked pseudo-class for inputs
Relevant spec:
https://html.spec.whatwg.org/multipage/scripting.html#selector-checked
Also modifies HTMLInputElement::SetChecked to no longer modify its
checked content value, instead making use of its internal checkedness
state now that we can match `:checked` properly.
Fixed #4170 - Incremental reflow wasn't being aggressive enough when nodes get reparented.
When inserting a node that was already dirtied, the dirtying logic
would short circuit: "This node is already dirty? Great! Then its
parents must be HAS_DIRTY_DESCENDANTS, too! Let's skip that step."
This isn't appropriate when nodes move around the tree. In that case,
the node may be marked HAS_CHANGED, but ancestors may not yet have
the HAS_DIRTY_DESCENDANTS flag set.
This patch adds a `content_and_heritage_changed` hook in the document,
to deal with these cases appropriately.
Fixes #4232
Implemented Document#inputEncoding
Resolves #4252
Cleanup Node::query_selector.
Cleanup Node::summarize.
Cleanup Node::clone.
Cleanup Node::ChildNodes.
Cleanup Node::Normalize.
Cleanup Node::CloneNode.
Cleanup Node::as_element.
Cleanup Node::is_html_element_in_html_document.
Implement selection ranges and deletion of \n for TextInput.
gfx: Update Azure and Skia, and rewrite broken clipping logic.
This exposed some problems in our clipping logic, which was never
properly rewritten for the stacking context reform. The clipping code
worked in terms of a stack of clips, but the new stacking context code
has no concept of a stack of clip regions. Fixing that in turn exposed
some flaky/incorrect tests:
* `borders` had an incorrect reference image, as far as I can tell.
* `negative_margins` had some stray pixels, fixed by changing the text.
Fix concatentation error on no args to `./mach rustc`
Since default argument to params is None, concatenating it with a
list will raise an error. This behaviour prevents `./mach rustc`
to be called when system-rust is defined in .servobuild.
Currently it will only work when followed by an argument, i.e.
`./mach rustc -arg`.
Testing this patch: `./mach rustc` should not raise an error.
Update WPTupdate readme for new directory structure
Updates `./mach update-cargo` for new path changes
Also fixed a bug if run with no arguments.
Use mach to build openssl on android instead of glut makefile.
The glut makefile will be removed shortly after glutin lands
for android, so we need to build openssl for android elsewhere
in the build process.
Add unit test to freeze sizes of DOM structs
Restrict size tests to 64 bit
Bound several link properties.
Specifically: href, rel, media, hreflang and type.
Add a `./mach clean-snapshots` command to remove old Cargo and Rust.
Bootstrapping automatically downloads new Rust and Cargo snapshots
as needed into versioned directories,
but do not remove now-unused versions.
This is the desired behavior for `git bisect` to be usable.
However, this means that old version keep accumulating, taking up disk space.
This adds a mach command to remove snapshots other than the ones
currently being used.
It is never run automatically.
To be safe, the command defaults to only printing what would be removed,
and only removes stuff when run with a `-f` argument.
mach clean-snapshots: better no-op output
Combine two conditionals in ScriptTask::load.
Now that the code lives in the same function, I see no reason for them to
remain separate.
Move the load response into the HTMLInput enum.
It is None iff the parser input is an InputString variant, so it makes more
sense to pass it in the same enum.
Remove the url from the InputUrl variant.
This url is the pre-redirect url, which is not particularly meaningful, and it
is used only in a panic message.
Update typeable to pick up a warning fix.
Don't include the root element when calling Element#getElementsByTagName
Fixes #4249
Issue #1820 - Improve the Blob implementation
Rename base_url to final_url in ScriptTask::load.
This seems like a clearer name, as it's used for more than just as a base url.
Pass a borrowed Url to parse_html.
It does not need to take ownership, and I want to reuse final_url in the
caller.
Reuse the final_url in ScriptTask::load.
In both the javascript and non-javascript url cases, final_url is set to the
same url as is stored by the Page.
Update rust-openssl to add static linking for android.
Add a gonk port.
Convert C code to Rust
Eliminate use of allow(dead_code) in window.rs
Remove use of rustuv/green in the gonk port.
Remove unused code in assign_block_size_block_base
This code is unreachable because an earlier `if base(kid).flags.is_float()`
check bails out of the loop before it can reach this block.
Make all of LineBreaker private
Cleanup Page::remove.
Remove comment that hasn't been true since Document became a Node.
The panic was removed in 99a36cbeb6077976861d94b7af16e9e57994a14d.
Cleanup PageIterator::next.
ports/cef: Implement accelerated compositing for the CEF port.
Remove PseudoDisplayItemClass
Now that content box queries are made against the flow tree, we can
remove PseudoDisplayItems from the display list.
CEF updates for Linux / MiniServo-GTK.
Make the gonk port work again
layout: Implement `text-transform`.
The Unicode awareness of `text-transform` is implemented as well as
possible given the Rust standard library's Unicode support. In
particular, the notion of an alphabetic character is used instead of a
letter.
Gecko has a subclass of text run to handle text transforms, but I
implemented this in a simpler way.
Update skia + azure to get android compile and text rendering fixes. Sync CEF as well.
Update ./mach update-cargo to include gonk Cargo.lock
Avoid some Option::unwrap calls in page.rs.
Reindent in should_move_clip_rect.
All root layers should mask their content
Root layers that define the extent of iframes should always mask their
child content. This fixes a bug where root layers without an assigned
size and location do not spill over the entire scene.
Hit test against clipped layer boundaries
When finding the layer under a point, take into account clipping
rectangles defined by layers that mask to bounds. This prevents clicks
from being hijacked by masked layers.
Return early and decline analysis when linting within unsafe functions for must_root analysis.
Removes a handful of whitelist annotations obsoleted by this change. fixes #3658
some fixes for multiple-mode textinput
layout: Implement `outline` per CSS 2.1 § 18.4.
`invert` is not yet supported.
Objects that get layers will not yet display outlines properly. This is
because our overflow calculation doesn't take styles into account and
because layers are always anchored to the top left of the border box.
Since fixing this is work that is not related to outline *per se* I'm
leaving that to a followup and making a note in the code.
Switch android to glutin.
Pass the timing information to PerformanceTiming rather than exposing methods.
layout: Make table layout idempotent.
By "idempotent" I mean that later passes do not stomp on data from
earlier passes, so that we can run the passes individually for
incremental reflow. The main change here was to stop overwriting the
"minimum inline-size" field of each column with the column's computed
inline-size.
Add support for the 'rem' css unit
Remove glut port now that android glutin has landed.
Remove glut from update-cargo command.
Fix spelling mistakes in comments.
Update web-platform-tests.
Sending key events through script task before processing them in the compositor.
Fixes #4163
gfx: Implement `letter-spacing` per CSS 2.1 § 16.4.
The ligature disabling code has been manually verified, but I was unable
to reftest it. (The only way I could think of would be to create an
Ahem-like font with a ligature table, but that would be an awful lot of
work.)
Near as I can tell, the method used to apply the spacing (manually
inserting extra advance post-shaping) matches Gecko.
Don't include the root element when calling Element#getElementsByTagNameNS.
Follow-up to work done in #4304.
all_elements should ignore root as well.
Update PowerMeasure.py post-cargoify
Groove and Ridge rendering shows a solid border when color is black,
that is broken and the current patch will implement a similar behavior
as Firefox.
Adding tests to check behavior. There are 3 files that will test:
a) If the groove border is different from a black border (the bug that this
patch set fixes);
b) If a ridge border is different from a black border (samething);
c) If groove is different from ridge (they should be inverse of each other).
All 3 new tests passes on OSX Yosemite (10.10).
Restored older behavior for lighter color, should fix
the regression.
layout: Refactor inline layout a bit.
layout: Implement `text-indent` per CSS 2.1 § 16.1.
I had to use a somewhat unconventional method of computing text
indentation (propagating from blocks down to inlines) because of the way
containing blocks are handled in Servo.
(As a side note, neither Gecko nor WebKit correctly handles percentages
in `text-align`, at least incrementally -- i.e. when the percentages are
relative to the viewport and the viewport is resized.)
Return real page titles and URLs for devtools tab choices.
Fixes #4167.
script_task, handle_msgs: sort for pattern constructor
script_trask, handle_msgs: factored out handle_msg_from_constellation
script_trask, handle_msgs: factored out handle_msg_from_script
script_trask, handle_msgs: factored out handle_msg_from_devtools
compositing: Translate clip rects into the coordinate systems of child
layers when doing hit tests.
Fixes clicking on links on the second page of Hacker News.
Factor out part of the traversal routine in HTMLCollection.
I would move the filter() call into the traverse function as well, but the
callback can't outlive its stack frame.
Skip the root node in live HTMLCollections.
The root node is never included in the collection, and omitting it here
simplifies and speeds up the filter implementations.
layout: Implement `word-spacing` per CSS 2.1 § 16.4.
This assumes that there are no ligatures that span across multiple
words. Since we have a per-word shape cache, this is a safe assumption
as of now. I have left comments to ensure that, if and when this is
revisted, we make sure to handle it properly.
Make DOMParser::ParseFromString actually parse the string
layout: Implement `overflow-wrap`/`word-wrap` per CSS-TEXT § 6.2.
This property is used by approximately 55% of page loads.
To implement the line breaking behavior, the "breaking strategy" has
been cleaned up and abstracted. This should allow us to easily support
other similar properties in the future, such as `text-overflow` and
`word-break`.
Run the DOM parsing tests.
Run the File API tests.
Make ErrorEvent::new take cancelable and bubbling enums
Correctly set the BlobType for File objects.
Add handle_key stub to gonk port
Update azure to fix gonk build
script: Improve dirty propagation and fix script-layout synchronization.
This fixes race conditions whereby layout and script could be running
simultaneously.
script: Add some workarounds for image cache task races
gfx: Implement `box-shadow` per CSS-BACKGROUNDS.
layout: Implement basic lists and the CSS1 list properties.
The exact rendering is ill-spec'd. Some things are ugly (especially the
width and height of list style images) but they are infrequently used
and I believe this implementation matches the spec. Numeric lists are
not supported yet, since they will require a separate layout pass.
The implementation is a subclass of `BlockFlow`, on advice from Robert
O'Callahan.
layout: Make line breaking able to restart from any position.
This commit removes the "merge-fragments" pass from inline reflow,
instead merging "on the fly". This ended up being simpler, as well as
more fine grained. Additionally, this patch makes the line breaker no
longer clone every fragment (!)
This functionality will be used in the implementation of
`text-overflow`.
style: Move presentational hint synthesis into `legacy.rs`.
style: Parse the legacy `border` attribute per the legacy HTML specification.
Additionally, this patch cleans up some miscellaneous formatting issues
and refactors files in `layout/css/` somewhat to eliminate needless
levels of indirection. It also fixes our handling of presentational
hints that only apply if border is nonzero.
style: Parse the legacy `bgcolor` attribute per the HTML5 specification.
Additionally, this patch cleans up some miscellaneous formatting issues.
style: Implement basic column spans.
This patch provides some of the groundwork for column spans greater than
1. It implements the column-span CSS property (prefixed so as not to be
exposed to content) as well as the corresponding colspan attribute;
although the former is not well-specified outside of CSS multi-column
layout, INTRINSIC refers to it. Although width is distributed to
spanning columns, they do not yet contribute minimum and preferred
widths; this will be implemented in a follow-up.
Additionally, this patch cleans up some miscellaneous formatting issues
and improves the handling of table rowgroups.
style: Implement quirks mode rules.
style: Address review comments relating to `bgcolor` and column spans
Fix window.performance.now()
script: Fix double-borrow error
This was my fault. It comes up on almost any page after scrolling a bit.
Fixed codegen error regarding Uint8ClampedArray
Add auxiliary method to EventTargetHelpers for events without target
fixup! Add auxiliary method to EventTargetHelpers for events without target
Update cocoa (needed for newer glutin)
Fix bogus transmute.
Remove some manual deref() / deref_mut() calls.
Makes layout respect <textarea> cols attribute
Makes layout respect <textarea> rows attribute
review addresssing
Update Cargo.lock to fix gonk build
Fix crash in textinput
Implements HTMLInputElement.defaultValue
...and changes SetValue to update the input text instead of the content
attr.
Also includes a comment summarizing everything I currently know with
respect to an input elements checkedness vs its IDL attributes vs its
content attributes.
Implements basic form resetting
What can this do? Reset `<input type=text>` fields back to their default
value through a call to a form's reset method. That's all for now!
Fixes compile error after rebase
Adds reset method to FormControl
Implements FormControl for HTMLTextAreaElement
Implements reset button
htmltextarea: Fixed some value_changed issues
Also modified tests/html/textarea.html to allow for the testing of the
textarea's dirty value flag.
Implements DefaultChecked and resets of checkboxes
Implements dirty value/checked flags for input
And modifies test-inputs.html to test.
Fixes wpt breaking mistake
Updated WPT to expect newly passing tests
Implements :indeterminate pseudo-class
Addresses reviews
Additional updates for newly passing WPT's
handle null for evaluating JS value. #4235
Inset and outset border coloring is incorrect on left side border.
This patch will fix this issue.
Thanks to differences on rendering between CPU X GPU, there is a 1 pixel wide
difference in the position where the top border meets the right border (as
also the right border X bottom border).
The workaround to have a test that will work on both modes is to cover the
affected area with a white div. This patch adds inset test.
Adding tests for outset.
Cropping the ref images to save some bytes (as also adjust test borders
to match results).
Update gleam, clear initial framebuffer under glutin.
Include gleam for android
Update rustc to revision 3dcd2157403163789aaf21a9ab3c4d30a7c6494d.
Various compile fixes for android rustup (link still fails).
Compile fix for glutin feature after rust upgrade.
Use `parse_html` in DOMParser.
layout: Implement `empty-cells` per CSS 2.1 § 17.6.1.1.
layout: Implement `caption-side` per CSS 2.1 § 17.4.1.
`caption-side` is used by 4% of pages by number of loads.
compositing: Implement `cursor` per CSS3-UI § 8.1.1 in the CEF/Mac port.
I'm not sure how we want to handle Linux cursors, and GLFW has no
ability to set cursors (short of disabling it and managing it yourself).
Restore glutin close on escape functionality. Also fix linux compile error.
Rename the PrototypeList enums to fix case build warnings.
Have 'mach build' pass arbitrary arguments to Cargo.
Duplicating all of Cargo’s argument parsing in mach is silly.
Remove usage of the deprecated std::num::Zero trait.
Remove usage of deprecated HashMap::get_copy
Simplify util::range::RangeIndex to always require std::num::Int,
and fix remaining warnings.
Update layer bounds on resize
This fixes a bug where fixed-position layers are not repositioned when the
window is resized.
This fixes #4407. This removes all unnecessary clones when calling fire_timer.
style: Remove glob imports added in #4405
Add the basic CSSStyleDeclaration CSSOM interface.
This just includes the .webidl file (with some of the functionality
commented out) and the stub implementations for the bindings.
This is another step towards #1721.
Add stub CSS2Properties type.
Stub in some uses of getPropertyValue and sketch out its implementation.
Add a style property to HTMLElement.
Implement something like CSS value serialization. Fetch actual inline style declarations from owning elements.
Implement setting element style properties. Improve serialization to return initial values when unspecified.
Improve color serialization by retaining author-specified keywords.
Add a ton of properties and improve a bunch of serialization.
Fixups for rust upgrade and jsref changes.
Rebase and update new css properties.
Add z-index support.
Move test_htmlelement_style.html out of the automatic tests because they don't all pass.
Implement RemoveProperty, SetProperty, and supported property indices.
Address review comments.
Slight simplification.
Fix syntax error in test_interfaces.html and make it pass.
Merge CSS2Properties and CSSStyleDeclaration.
Address review comments.
Add missing supported CSS properties.
Fix test failures.
gfx: Remove glob imports added in #4405
net: Remove glob imports added in #4405
layout: Implement `clip` per CSS 2.1 § 11.1.2.
Only the recommended, comma-separated syntax is supported.
script: Fix double borrow error when going back. Closes #4402.
I have verified that back and forward work once again.
Fix some writing mode mismatch assertions errors.
The rendering is still wrong beause of #2795, but at least we get a rendering.
(This test change is just for readability, it should be equivalent to before.)
script: Remove glob imports added in #4405
Similar to groove/ridge case, inset/outset would scale the color to
decorate the border. Scale fails when the color is black (i.e. zero),
thus this patch will fix this issue by using a fixed color.
Adding inset ref test.
Adding outset ref test.
Update cargo nightly to get android cross compile fix. Also add stub trait method to glutin port.
Add time as submodule - workaround for android cross compiling until next rustup.
Handle getting/setting onload for any element.
Trigger a load event after evaluating a <script>.
Update WPT: script-onload-string is passing now.
update past rustup and use DoesNotBubble instead of Bubbles
update to namespaced enums without re-exports
Make the argument to dispatch_event_with_target non-optional.
The name of the method makes it clear it's supposed to be used with a target
override, so we might as well enforce that.
Update wptrunner and start running reftests.
Enable html/rendering.
Simplify some code in ScriptTask::load.
Create a replacement for Cell<SM primitive>. Fixes #4337.
Remove unused libgreen import.
Use the try macro in unwrap_jsmanaged.
Remove the proto_{id,depth} arguments from unwrap_jsmanaged.
Instead, we infer them from the type we're unwrapping into. This will prevent
any mismatches between the type we return and the type we check for.
Use unwrap() when finalizing.
This allows us to duplicate a little less code.
Move unwrap_jsmanaged and related machinery to conversions.rs.
CodegenRust fixes for NamedGetter
Added Element::set_custom_attribute
Implement HTMLElement.dataset
Make DOMStringMap use related Element's custom attributes values.
Avoid duplicated code
Update web-platform-tests results
Update HTML{Div,Span,}Element stack size
Remove the unused DOMRefCell::unwrap method.
Document DOMRefCell.
Based on the RefCell documentation.
Require documentation for ByteString.
Simplify _obj_toString by using JS_NewStringCopyN.
Reindent _obj_toString.
GlobalRef passed by value in reflect_dom_object, reflect_node #4165
On left/right keydown place edit_point correctly when there is a selection in TextInput
Fixes #4447
Make gonk port build again after the last rustup
Removed accidental commit of submodule pointer
Rebuild after ./mach test-unit
(ugly) workaround for issue #3928
Moved unit tests to the end of `./mach test`
glutin - Add support for waking up blocked event loop, and smooth resize on mac.
gfx: Refactor the border drawing code and split out fragment display
list building into multiple functions.
This should have no functional changes; it's just code cleanup.
gfx: Fix a nasty bug whereby the transient clip was not always removed,
causing elements to be randomly clipped out.
Improves Wikipedia, Reddit, etc.
gfx: Clip the background properly when `border-radius` is used.
Improves Reddit, GitHub, etc.
Use event polling instead of blocking when outputting to a file.
This stops some ref tests on linux blocking while waiting for
user input events and never outputting the file.
Also mark vertical writing test as flaky on all platforms. Due
to unrelated timing reasons, this fails reliably on mac when glutin
is enabled. The related bug with details on the root cause is #3926.
Update glutin to get mac visibility fix.
Revert PR #4038 for causing WPT failures.
Revert "Enable html/rendering."
This reverts commit dde0702a898147ef77b93e54f3664be2f5af12a2.
Revert "Update wptrunner and start running reftests."
This reverts commit 1d68ee689f26b9318e287a5db1f5c96d2a7905ce.
Fixes #4462.
Add a test that wptrunner fails when it should.
Implemented CSSStyleDeclaration.setPropertyPriority
Implemented CSSStyleDeclaration.setPropertyPriority, resolves #4433
Add GetPropertyPriority to CSSStyleDeclaration
Tweak getPropertyPriority to match recommendations
Adding Tests for Style Priority
Use else if
Adding Content Test for GetPropertyPriority
Revert "Adding Tests for Style Priority"
This reverts commit 8666a37f833b06c3e43f27acd8a9678e94425e55.
This fixes #4259. Dispatching the mousemove event for the top most node when the mouse moves while on top of it
Allow selection of all text in a text control using the ctrl-a/cmd-a shortcut.
Fixes #4411.
Replace XHR events for generic ones in ScriptTask
fixup! Replace XHR events for generic ones in ScriptTask
fixup! Replace XHR events for generic ones in ScriptTask
Replace bool attribute in Element::update_inline_style with a descriptive enum
Fix HTTPS fetches.
This fixes #4166. throw_dom_exception will take the GlobalRef by value, and all generated code will pass it by value.
Call the NamedGetter method from the get trap in proxy bindings.
Use the custom defineProperty trap when it exists.
Correct the generated code for NamedSetter calls.
Factor out the name handling in Element::{Get,Set,Remove}Attribute.
Implement Element::set_custom_attribute.
Implement HTMLElement.dataset (fixes #2974).
Implement dummy getOwnPropertyNames and enumerate traps.
AttrValue's s/from_tokenlist/from_serialized_tokenlist/
Avoid duplicated tokens in AttrValue::from_serialized_tokenlist
Added AttrValue::from_atomic_tokens & Element::set_atomic_tokenlist_attribute
Added Element::get_tokenlist_attribute
DOMTokenList::check_token_exceptions now returns an Atom
Implement DOMTokenList.add
Implement DOMTokenList.remove
Implement DOMTokenList.toggle
Updated web-platform-tests results
gfx: to_string() -> into_string()
style: to_string() -> into_string()
script: to_string() -> into_string()
layout: to_string() -> into_string()
servo: to_string() -> into_string()
plugins: Fix transmute lint message
Remove some transmute calls.
Use inline(always) for trace()
Add internal plugin for creating Reflectable implementations
Remove manual impls of Reflectors (autogen)
Obtained via:
`find . -maxdepth 1 -type f -print0 | xargs -0 sed -z -i "s/\\nimpl Reflectable for[^{]*{[^}]*}[^}]*}\\n//"`
`find . -maxdepth 1 -type f -print0 |xargs -0 grep -lZ dom_struct | xargs -0 grep -LZ "reflector()\\|Reflector::new" |xargs -0 sed -z -i "s/use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};/use dom::bindings::utils::reflect_dom_object;/"`
followed by semi-automated removal of leftover imports
Remove extra spaces
Command: `find . -maxdepth 1 -type f -print0 | xargs -0 sed -z -i "s/}\\n\\n\\n/}\\n\\n/"`
Add inheritance-checking lint
Ensure that Reflectors are the first field
Fix warnings post-upgrade
Update web-platform-tests.
Added readonly flag for CSSStyleDeclaration
Simplify some code in handle_click_event.
Add support for named deleter
Closes #4469.
Allow refcounting arbitrary DOM objects in concert with the GC to enable safe, asynchronous/cross-task references to pinned objects.
Force all messages to worker tasks to send a TrustedWorkerAddress along with the ScriptMsg. This ensures that the main-thread Worker object is rooted for as long as there are events in flight or being processed.
Upgrade cssparser to a version with the new ToCss trait.
Implement ToCss for types in style::properties::common_values::specified
Implement ToCss for Cursor and de-duplicate variants and string values.
Remove some tabs
@jdm, can you configure your editor to not insert them in the first
place?
Declare dependencies on text_writer.
Transitive dependencies being available is considered a bug:
https://github.com/rust-lang/cargo/issues/1037
Add a match_ignore_ascii_case! macro that does not allocate.
It should replace `match foo.to_ascii_lower().as_slice() { ...}`
@Manishearth I changed map.get to map.find in the lint to work around an ICE:
task 'rustc' panicked at 'couldn't find node id 0 in the AST map'
Does this look OK?
Fix typo in a cursor keyword. Thanks @nuss-justin!
Move the define_css_keyword_enum macro to the style crate.
update description in ORGANIZATION.md
add ` around path
use geom::num::Zero rather than the deprecated num::Zero trait in std
This fixes the following warning:
display_list/mod.rs:735:20: 735:30 warning: use of deprecated item: Use `Int::zero()` or `Float::zero()`., #[warn(deprecated)] on by default
display_list/mod.rs:735 let zero = Zero::zero();
^~~~~~~~~~
Re-enable two transform_text unit tests.
Note that I had to change some expectations to make them pass.
Cleanup the transform_text tests.
Reformat the transform_text tests.
Codegen whitespace fixes
Codegen indent fixes
Codegen empty lines fix
Codegen style fix
Replace the remaining to_string calls by into_string calls.
plugins: Add seanmonstar's to_string() lint
Use or_init for HTMLCanvasElement::GetContext.
break up lints.rs into separate files
add str ToJSValConvertible for str type
use str to_jsval() now
xmlhttprequest.rs, CodegenRust.py
replace into_string().to_jsval() to to_jsval()
conversions.rs
DOMString to_jsval() use as_slice().tojsval() now
Bug #1820, add the optional "type" parameter to Blob
Remove spurious spaces from lints/mod.rs.
Stop using ptr.is_not_null() in script.
This method is deprecated in rust master; removing its users in advance will
make a future rust upgrade smoother.
Remove the 'a lifetime from Root.
It does not add any safety, as the reference is constructed from a raw pointer
without limiting the lifetime in any way.
Remove the 'b lifetime from Root.
It does not add any safety, as the reference is constructed from a raw pointer
without limiting the lifetime in any way.
Rename Root::root_ref() to Root::r().
As it will be used much more widely after the upcoming changes, this limits
the effort reading and writing the method calls.
Replace Root::deref() calls by Root::r() calls where possible.
This changes those calls that were already sound.
Remove unsound Root::deref() call in Attr::set_value.
This changes those calls whose unsoundness was not picked up by the type system
because of a lifetime constraint that cannot be expressed at this time.
Remove unsound Root::deref() calls in XMLHttpRequest.
Remove unsound Root::deref() call in BrowserContext::create_window_proxy.
Remove unsound Root::deref() calls in CSSStyleDeclaration.
Remove unsound Root::deref() call in Document::get_html_element.
Convince borrowck that Document::createNodeList is sound.
Remove unsound Root::deref() call in Document::set_quirks_mode.
Remove unsound Root::deref() calls in DOMParser::ParseFromString.
Note that Root::clone() calls through to JSRef::clone() due to autoderef.
Remove unsound Root::deref() calls in HTML elements.
Rename GlobalRoot::root_ref() to GlobalRoot::r() for consistency.
Construct a new JSRef in Root::r().
Stall PaintTask exit until it can release all buffers
It is possible for a PaintTask to start exiting soon after sending new
buffers to the compositor. In that case, the compositor should return
the now unnecessary buffers to the PaintTask so that it can properly
free them.
To accomplish this, the compositor now keeps a hash map of paint task
channels per pipeline id. When a PaintTask exists, the constellation
informs the compositor that it can forget about it. Additionally, the
PaintTask should not wait for any buffers when the engine is doing a
complete shutdown. In that case, the compositor is already halted and
has simply let all buffers leak. We pipe through the shutdown type when
destroying the pipeline to make this decision.
Fixes #2641.
Remove obsolete attributes.
Fix obsolete format traits.
They are to be removed from the language in the next rust upgrade.
Remove dummy deriving attributes.
Traits cannot be derived for typedefs. The upcoming rust update will make
those attributes compilation errors.
Implement Document.defaultView - fixes #4518
Issue 4497: Converts WorkerPostMessage into a Runnable.
Implements WorkerMessage handler implementing Runnable trait.
Add HTMLElementTypeId enum (fixes #3625)
Fix inheritance enums for htmlmediaelement and htmltablecellelement
Rename paint_task::Msg variants.
Rename constellation_msg::Msg variants.
Don't qualify Ok/Err in image_cache_task.
Rename TimeProfilerCategory variants.
Rename the PaintState variants.
Stop using div_rem.
Slice some fixed-size arrays.
Disambiguate trait object reference syntax.
Remove some obsolete formatting traits.
Qualify Azure enums.
Qualify libstyle enums.
Qualify PixelsByColorType.
Qualify stb_image::LoadResult.
Import ast::ComponentValue more consistently.
Qualify hyper enums.
Qualify resource_task enums.
Qualify JSGCTraceKind.
Qualify CanvasMsg.
Re-export devtools enums.
Qualify image_cache_task::Msg.
Qualify script_traits enums.
Qualify compositor_msg::ReadyState.
Remove dependencies on the native crate.
Rename the ConstellationControlMsg variants.
Import enums inside hyper::mime rather than the module.
layout: Paint stacking contexts' overflow areas properly.
This was making `box-shadow` not show up in many cases, in particular,
but the effects were not limited to that.
layout: Explicitly thread border box dimensions and relative offsets
through display list building.
The old `flow_origin` concept was ill-defined (sometimes the border box
plus the flow origin, sometimes including horizontal margins and
sometimes not, sometimes including relative position and sometimes not),
leading to brittleness and test failures. This commit reworks the logic
to always pass border box origins in during display list building.
Simplify vtable_for.
Remove the unused native argument from spawn_named_with_send_on_failure.
Remove spawn_named_native.
All threads are native now, so this was just an alias for spawn_named.
Rename MouseWindowEvent variants.
Check for no parameters when invoking cargo
Update cocoa/glutin for mac mouse events fix.
Code cleanup in glfw_app::Window::scroll_window
More code re-use, fewer unchecked units.
Fix gonk port bustage due to constellation_msg renaming
Update rustc to revision 2cfb5acb5a2751c759627377e602bac4f88f2d19.
Fix #3936 – {Window,WorkerGlobalScope}.set{Timeout,Interval}(DOMString)
Ban Cell<JS<T>> and Cell<JSVal<T>> (partial #4336)
Mention MutHeap in DESIGN.md
layout: Implement `word-break: break-all` per CSS3-TEXT § 5.2.
layout: Implement `pointer-events: none` per SVG 1.1 § 16.6.
SVG-only values are not yet supported.
layout: Implement `outline-offset` per CSS-UI-3 § 5.5.
Rename Compositor messages SetIds and Paint
These names no longer reflect what the messages do, so rename them to
SetFrameTree and AssignPaintedBuffers.
Fix root layer naming in the compositor
The term "root layer" is used in the compositor to refer to both the
pipeline root layer and the page background layer. This can be quite
confusing. Instead, call the page background layer the "base layer,"
which is always the first child of the pipeline root layer.
Fixes #4164 Make Constructor and new functions take GlobalRef by value
Fixes #4164 Make file.rs Constructor and new functions take GlobalRef by value
layout: Implement `text-rendering` per SVG 1.1 § 11.7.4.
Like Gecko, we treat `geometricprecision` the same as
`optimizelegibility` for now.
Remove if_let feature gates.
This feature is now supported unconditionally.
Add ability to explicitly set static resources path, used by cef-linux.
Fix android unused import error.
Fix `string::raw::from_buf` deprecation warning
Fix `use {f32,f64}::consts` warning
Fix `variable does not need to be mutable` warning
Fix `non_upper_case_globals` warnings
Allow `missing_copy_implementations`
Fix `use Deref instead` warning
Fix `unnecessary `unsafe` block` warning
Fix `renamed to into_inner()` warnings
Fix `use UnicodeChar::to_lowercase` warning
Fix `renamed to slice::from_raw_buf` warning
Fix Equiv related deprecation warnings
...except where we have our own implementations of Equiv.
Update glutin for hidpi tests on mac.
Update android openssl version due to security advisory https://www.openssl.org/news/secadv_20150108.txt
Silence warnings from openssl
Fix dead code warning for Android
Fixes #4573 Replaces the boolean argument of TextInput::adjust[horizontal|vertical] with enum to self document the code
Fix assertion trying to remove a Node that has no parent
fixes #4562
Deny unsafe blocks in script.
As a first start, this allows them indiscriminately where used.
Remove the NavigatorInfo struct.
It serves no purpose.
Make initialize_layers a PaintTask method
This simplifies calling it substantially. Also avoid unnecessarily
changing the PaintTask epoch when we don't have paint permission.
layout: Implement `filter` per CSS-FILTERS § 5.
`blur` and `drop-shadow` are not yet supported, because the
`text-shadow` PR makes some fundamental changes to blur rendering that
are needed first.
Remove transmutes in LayoutContext.
Pass a Vec to ApplicableDeclarationsCacheEntry::new.
As it copies the slice anyway, it is better to give the caller the opportunity
to pass in an existing Vec.
CanvasRenderTask connected to Layout
Update rust-azure to f4a02f3f621b0a994a20d42e438371a87c62f898.
Make DOMContentLoaded and load asynchronous with using Runnable.
Change the reason of disable /html/semantics/document-metadata/the-base-element/base_multiple.html
We haven't support the propagation of load event from iframe.
Store HTMLIFrameElement sandbox attr as TokenList
Fixes #3758
Store the sandbox attribute of HTMLIFrameElement as a TokenList
internally. Use .tokens() to iterate over the tokens instead of
splitting on the string value.
The external interface for sandbox remains a DOMString, which will need
to be fixed when DOMSettableTokenList is implemented (#1717).
Combine all pipeline status trackers into a single struct
This will make it easier to organize and clean up this information
during pipeline shutdown.
Be less stringent with invalid compositor messages
It is possible for messages for defunct pipelines to arrive in the
compositor. If the compositor believes that the pipelines are in the
process of shutting down, simply ignore the messages. We still panic in
the case that the pipeline is totally unknown.
Fixes #3733.
Store pipelines in the Compositor
Instead of cloning pipelines and storing them once per layer, store
them globally in the compositor and access them via id. This trades
lots of unnecessary duplication for a HashMap lookup.
Fix gonk build after the last rustup
Update FrameTree pipelines when appropriate
Instead of simply creating a new FrameTree when an iframe starts a
load, update the existing FrameTree's pipeline. This prevents the
FrameTree from accumulating many extra children.
Add FrameTree::add_child
This helper method simplifies a few lines.
Notify compositor when a FrameTree changes pipelines
When the constellation change a FrameTree pipeline, it should send a
notification to the compositor, so that it can negotiate buffers from
the correct render task. This commit also migrates away from the
generalized FrameTreeUpdateMsg to ones specific to the situation at
hand. That turned out to be an unnecessary abstraction.
Only send SetLayerRect messages for compositor-backed frames
Only send SetLayerRect when we know that a frame has a compositor
layer. If it doesn't, we wait until we send the new layer to the
compositor.
Make the gonk input code use standard file APIs
Move the documentation comment for the devtools_traits crate to have it picked up.
Create a StructuredCloneData struct to encapsulate the result of a structured clone.
Implement StructuredCloneData::write.
Implement StructuredCloneData::read.
Rewrite ReverseChildrenIterator to return Temporary.
Make Runnable::handler take self by value.
With my thanks to kimundi and eddyb for their help in making this approach
work.
Make StructuredCloneData an opaque struct.
Remove RethrowContentExceptions and related infrastructure.
We do not intend to implement the DOM in JS, so this code isn't necessary.
Fix the documentation comment for the devtools library.
Also removed a duplicated feature gate.
remove unused function with_layout_node #4572
remove documentation in with_layout_node #4572
remove unused documentation in function with_layout_node #4572
layout: Implement `mix-blend-mode` per COMPOSITING § 3.4.1.
`background-blend-mode` is not yet supported because we don't support
multiple backgrounds yet.
Implement most of the important WindowProxy traps
Check quirks mode in {Document,Element}::getElementsByClassName
Fixes #4604.
Remove unused Flow method
Add support for multiple cef browsers (multiple tabs).
table_wrapper.rs: Fix for percentage widths
Fixes #4421
Update png/harfbuzz, use prefixed symbol names.
Update glutin and add hidpi methods.
Update wptrunner and start running reftests.
Enable html/rendering.
Update web-platform-tests and wptrunner.
Add handling for unreported exceptions when invoking callback objects.
Stop pretending to do anything except eagerly report pending exceptions after invoking a callback.
Use latest mozjs.
Use DrawTarget::new instead of DrawTarget::new_with_data in CanvasPaintTask
Update to use latest mozjs-sys
Update harfbuzz module.
Write a macro or syntax extension to generate OpenType tags
Fixes #4556
added unit tests for TextInput - fixes #4352
Disable util crate doctests
Because of bug in rustdoc, a new rust-layers dependency on rust-azure
will cause linking issues. See
https://github.com/rust-lang/rust/issues/21246 for details.
Minor fix to Arch developer setup instructions
Add the flag that says "Don't reinstall already-installed packages".
Otherwise the suggested command means "reinstall all these packages".
Update to latest rust-azure and rust-layers
We no longer need to implement from_azure_surface in Servo, now that
rust-layers is handling more of the glue between rust-layers and Azure.
Add the enum to describe the script origin.
Make script load event asynchronous for internal scripts
fixup! Make script load event asynchronous for internal scripts
Implement Element#closest
fixes #4603
- Add definition to the Element.webidl and implementation to element.rs.
- Create inclusive_ancestors helper in NodeHelpers
- Update test expectations
Fix TextInput's edit point after set_content
Previously, when the edit point was being clamped leftward by a shortened
line, it would be placed one one character too far to the left instead of
at the very end.
Document error.rs.
Document global.rs.
Update web-platform-tests.
Add basic support for closing cef tabs. Prevents crashes, but leaks memory for now.
Disallow lines that span more than 160 columns.
The Rust style guide suggests 100, but we have too many violations in the
tree already. This check can be tightened over time.
Stop using Vec::from_elem.
It is obsolete on Rust master.
Switch CEF on screen build from glfw -> glutin.
Add more key mappings.
Add libosmesa6-dev to debian dependencies
Needs to be updated for arch / fedora too, but I'm not sure what the relevant packages are.
Share supported CSS properties between style and CSSStyleDeclaration
Avoids duplicated code when implementing the CSS properties accessors in
CSSStyleDeclaration WebIDL. Servo internal CSS properties are not
accessible.
CSS property "float" is unnacessible because we currently lack support
for BinaryName IDL annotation (#4435).
Fixes #4429, #4430.
Switch the default windowing system to glutin. See below for details.
This change makes glutin the default windowing system on mac/linux.
If you run into any issues with the glutin system, you can temporarily
build the GLFW system with the following command:
cd components/servo
../../mach cargo build --no-default-features --features=glfw
Once any glutin related issues have been sorted out, the GLFW
port will be removed.
Android doesn't need to explicitly specify glutin now.
Switch linux reftests on glutin to use osmesa software rendering.
Fix set_ids naming in Constellation
The set_ids name is a holdover from a previous design and no longer
reflects what this method does. Instead move the content into
grant_paint_permission and rename it to
send_frame_tree_and_grant_paint_permission. Also move out the handling of
evicted iframes into its own method.
Fix change of src attributes on iframe (prevents SetLayerOrigin crash).
Disable document-lastModified-01.html.
It has been failing in automation very frequently.
Remove OptionalSettable.
It was obsoleted by MutNullableJS.
Document js.rs.
Stop calling is_not_null.
It has been removed from Rust.
Document structuredclone.rs.
Move to to_owned rather than into_string.
into_string has been removed from Rust.
Pass a String to spawn_named.
IntoString has been removed from Rust, and named() will take a String, so
there is no good reason to do otherwise here.
Encapsulate to-be-cleaned-up refcounted pointers.
This will allow us to make them Send in the future.
Port to the new cssparser.
https://github.com/servo/rust-cssparser/pull/68
Use std::cmp::Ordering explicitly.
Use std::sync::atomic::Ordering explicitly.
Use chars().count() rather than char_len().
The latter is obsolete in current Rust.
Remove rtinstrument (fixes #4600).
The code has been disabled during the last rust upgrade, and has not found an
owner. Since the next rust upgrade will bitrot it even more, it is better to
remove it for now. If anyone wishes to restore it, the code remains in version
history.
Stop calling deref() and deref_mut() explicitly.
Change glutin headless mode to be a build config, as it breaks some Linux distros linking to both.
The majority of this change is simply re-arranging the code in the glutin port
so that the windowed/headless code is configured at build time rather
than runtime. There shouldn't be any functional difference as a result of this change.
Addressed review comments
Addressed review comments
Added newline at the end of devtools.rs
Make UntrustedNodeAddress a newtype.
This will allow us to make it Send after the Rust upgrade.
Don't call transmute_copy in JS::unsafe_get.
It hasn't had borrow flags for quite a while.
Return *const T from JS::unsafe_get() (fixes #4712).
Removed the if/else loop
Update rustc to 00b112c45a604fa6f4b59af2a40c9deeadfdb7c6/rustc-1.0.0-dev.
Fix crash due to address significance for JSAPI things.
Temporary workaround for change in wait_events behaviour in glutin
Don't create an expando holder to delete an expando.
If there is no expando object, there will be no expando to delete.
Panic if JS_NewObjectWithGivenProto fails.
Document proxyhandler.rs.
Require documentation for all code in dom::bindings (excluding dom::bindings::codegen).
Remove some old impls
self import
silence fetch warnings
raw_pointer_deriving -> raw_pointer_derive
Update layers to master.
Update azure to master.
Don't shadow lifetimes in script.
Don't shadow lifetimes in layout.
Update dependencies in lock files
* openssl
* glfw
* gleam
* skia
* mozjs
Handle overlapping border-radius corners
Conforming to section 5.5 (Rounded Corners/Overlapping Curves) of "CSS
Background and Borders Module Level 3", border radii on elements whose
border curves would have overlapped are uniformly scaled down to the
point that they no longer do.
http://dev.w3.org/csswg/css-backgrounds/#corner-overlap
Update xlib.
Support 'font-style: oblique'.
Remove the unused support/time submodule.
Fixes #4748. r? @jdm
Fix various build warnings.
gfx: Implement `font-stretch` per CSS3-FONTS § 3.3 in the Core Text
font backend.
Update to the latest rust-layers
Fixes #4754.
Move snapshot dir inside the source dir by default
This avoids changing any directories outside the repo, which is better for
some automation scenarios.
The servobuild.example file has a "cache-dir" setting that restores the
previous default location of `~/.servo`, which is useful for developers
working with multiple clones on the same machine.
layout: Implement `text-overflow: ellipsis` per CSS-UI-3 § 6.2.
Only the one-value syntax is supported for now.
layout: Implement floated list items.
This patch also makes Servo not crash when
`generated_containing_block_rect()` is called on a list item (as, for
example, GitHub does), and for good measure I added the fix to other
flows as well.
Update web-platform-tests.
Import the util crate as util rather than servo_util.
This used to conflict with the util crate from the standard library, which
has long since been removed.
The import in layout has not been changed because of a conflict with the
util mod there.
Add layout support and tests for inline iframes. Fixes #1697.
Rename getPropertyDescriptor to get_property_descriptor.
Rename defineProperty_ to define_property.
Rename delete_ to delete.
Rename _obj_toString to object_to_string.
Rename GetExpandoObject to get_expando_object.
Rename EnsureExpandoObject to ensure_expando_object.
Rename FillPropertyDescriptor to fill_property_descriptor.
Rename getOwnPropertyNames_ and enumerate_ to get_own_property_names and enumerate.
Replace the 'GlobalStaticData' free function by a 'new' static member function.
Rename GetProtoOrIfaceArray to get_proto_or_iface_array.
Use snake case for the members of NativeProperties.
Note that the codegen uses the names of the Python fields to initialize the
Rust struct.
Rename CreateInterfaceObjects2 to do_create_interface_objects.
Use snake case for the arguments to do_create_interface_objects.
Rename CreateInterfaceObject to create_interface_object.
Use snake case for arguments to and locals in create_interface_object.
Rename Define{Constants, Methods, Properties} to define_{constants, methods, properties}.
Rename CreateInterfacePrototypeObject to create_interface_prototype_object.
Use snake case for arguments to and locals in create_interface_prototype_object.
Rename ThrowingConstructor to throwing_constructor.
Use snake case for the local in initialize_global.
Rename GetPropertyOnPrototype to get_property_on_prototype.
Use snake case for the local in get_property_on_prototype.
Rename GetArrayIndexFromId to get_array_index_from_id.
Rename IsPlatformObject to is_platform_object.
Rename HasPropertyOnPrototype to has_property_on_prototype.
Remove unused IsConvertibleToCallbackInterface.
Rename CreateDOMGlobal to create_dom_global.
Switch glutin to use servo fork, which contains a crash fix for XCloseDisplay in some X11 drivers.
layout: Implement `text-align: justify` and `text-justify` per
CSS-TEXT-3 § 7.3.
`text-justify: distribute` is not supported.
The behavior of `text-justify: none` does not seem to match what Firefox
and Chrome do, but it seems to match the spec.
Closes #213.
Use snake case for the argument to from_jsval for DOMString.
Rename GetCallableProperty to get_callable_property.
Rename WrapCallThisObject to wrap_call_this_object.
Rename GetContext to get_context.
Require snake case in bindings code.
Use snake case for arguments and locals in CGWrapMethod.
Use snake case for arguments and locals in CGCreateInterfaceObjectsMethod.
Use snake case for arguments and locals in CGGetPerInterfaceObject.
Use snake case in Node.
Use snake case in Worker.
layout: Fix warnings.
PNG library upgrade
Re-enable the DOM struct size tests.
They were inadvertently disabled in the Rust upgrade.
Use NonZero to reduce the size of DOM smart pointers (fixes #4502).
Upgrade to rust-cssparser master.
* Use associated types
* Avoid mutation to gather parsing results.
Bring CSS parse error reporting back. (Still off by default. Enable with `RUST_LOG=style`.)
End the libstyle 'pub use' madness.
style::properties : move generated file out of source tree, use new-style Cargo build script.
Split overlong line.
Adds borrow_for_script_deallocation and unsafe_mut_js_info method to avoid 'DOMRefCell already mutably borrowed' messages. This is just a temporary fix until the Rust standard library allows borrowing already-borrowed RefCell values during unwinding.
It also removes LiveDOMReferences destructor that it's a no-op but it contains an assert that was being violated causing an endless cycle of destructor calls ending up in a stack overflow.
Lock crates.io dependencies to specific versions.
Specific instances of activatable elements may not be activatable (fixes #4765
Make mutable() use the disabled state
Add /.servo .gitignore to ignore the local compiler binary cache.
Basic certificate verification (fixes #4119)
Add xpcshell script and warning
Only SSL CA certs
Move RangeIndex to associated types (avoids old impl check)
Move FromJSValConvertible to associated types (avoids old impl check)
Fix mod_path dependency in CEF and Gonk builds.
Introduce LayoutJS<T>
LayoutJS<T> implements Layout*Helpers instead of JS<T>.
Use LayoutJS<T> in layout crate.
Add BarCast::to_layout_js<T>().
Use BarCast::to_layout_js() instead of LayoutJS.to_script().
Add LayoutJS<Node>::from_trusted_node_address()
Remove JS<From>.transmute<To>().
Add LayoutJS<T: Reflectable>.get_jsobject().
Create mod.rs files for the dom and dom::bindings modules.
This gives us a better place to put DOM documentation, which I'd like to start
adding.
Remove the glfw port (it doesn't compile since last rustup anyway).
Mark HTMLAreaElement and KeyboardEvent as DOM structs.
Added error checking on XMLHttpRequest::setWithCredentials
jrmuizel
pushed a commit
to jrmuizel/gecko-cinnabar
that referenced
this pull request
Jun 12, 2017
…ss); r=larsbergstrom servo/rust-cssparser#68 r? @larsbergstrom Source-Repo: https://github.com/servo/servo Source-Revision: 59bca2962c19f653eec835fc54caf1a3eadcb906
gecko-dev-updater
pushed a commit
to marco-c/gecko-dev-comments-removed
that referenced
this pull request
Sep 30, 2019
…ss); r=larsbergstrom servo/rust-cssparser#68 r? larsbergstrom Source-Repo: https://github.com/servo/servo Source-Revision: 59bca2962c19f653eec835fc54caf1a3eadcb906 UltraBlame original commit: f793b1eb633f870a03c18103218898bde4dd7e5a
gecko-dev-updater
pushed a commit
to marco-c/gecko-dev-wordified
that referenced
this pull request
Oct 1, 2019
…ss); r=larsbergstrom servo/rust-cssparser#68 r? larsbergstrom Source-Repo: https://github.com/servo/servo Source-Revision: 59bca2962c19f653eec835fc54caf1a3eadcb906 UltraBlame original commit: f793b1eb633f870a03c18103218898bde4dd7e5a
gecko-dev-updater
pushed a commit
to marco-c/gecko-dev-wordified-and-comments-removed
that referenced
this pull request
Oct 1, 2019
…ss); r=larsbergstrom servo/rust-cssparser#68 r? larsbergstrom Source-Repo: https://github.com/servo/servo Source-Revision: 59bca2962c19f653eec835fc54caf1a3eadcb906 UltraBlame original commit: f793b1eb633f870a03c18103218898bde4dd7e5a
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
SimonSapin commentedJan 5, 2015
(Commits before December come from https://github.com/SimonSapin/css-parsing-tests , imported with git subtree.)
Previously, the tokenizer was an iterator of "component values", where a component value is either a token or a function/block that contains a
Vecof nested component values. This meant that parsing code (e.g. for a property value in Servo) could not get nesting wrong, but the tokenizer would not yield anything before the end of a top-level block.This makes the tokenizer fully incremental: it yields tokens is it finds them, including
},], and)tokens that indicate the end of a block or function.On top of that,
Parser(which is what every parsing code should use) does some tricks to deal with nesting without but still be incremental. Seesrc/parser.rs.Token::ParenthesisBlock,Token::SquareBracketBlock,Token::CurlyBracketBlock, andToken::Functionnow indicate the start of a block/function, but do not contain the contents/arguments. When getting one of them fromParser::nextorParser::next_including_whitespace, the user can callParser::parse_nested_blockto get a newParserfor the contents/arguments that borrows the first one mutably (so that you have to drop it before using the first one again.) The inner parser "ends" at the end of the corresponding block or function. Whether or not the inner parser is consumed to its end, or is even created, the following call toParser::nextorParser::next_including_whitespaceon the "parent" parser will skip as necessary and continue after the end of the the block/function.This makes it easier for users to write correct code, but it comes at a cost of complexity in cssparser itself. The code for dealing with nested parsers can be subtly wrong. For example,
parser.rshas code like this:When first writing it, I had forgotten
.take(). This compiled without error and of course gave completely incorrect parsing results.An alternative is to make
Parsermuch much simpler:Parser::nextwould do little more than call the tokenizer, and users would have to deal with block nesting themselves. (There would be helpers likeParser::skip_until_end_of(BlockType)to deal with error cases.) Users would have to be more careful about always callingParser::push_backon unexpected tokens (in case it’s an end-of-block token), but they really should be doing that anyway. This is what Gecko does.So, are "nested" parsers a good idea?