perf(movimento): vitrine e 3D mais leves, WebGL por software lembrado na sessão e suporte ao WebKit
This commit is contained in:
1 parent
9fd1570426
commit
8903f3c57e
28 files changed
+854
-406
No files matched your search
@@ -215,6 +215,7 @@ afterEach(() => {
|
||||
jest.useRealTimers();
|
||||
jest.restoreAllMocks();
|
||||
window.matchMedia = originalMatchMedia;
|
||||
Reflect.deleteProperty(navigator, "userAgent");
|
||||
Object.defineProperty(navigator, "connection", {
|
||||
configurable: true,
|
||||
value: undefined,
|
||||
@@ -535,22 +536,61 @@ describe("ProjectReel: vídeos", () => {
|
||||
expect(videos()[0].currentTime).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it("path: first frame decoded -> primed once (play then pause) even if loadeddata fires twice", async () => {
|
||||
it("path: Chrome (anything but WebKit) -> the video never plays: playing downloads the whole file, scrubbing only asks for what is seen", async () => {
|
||||
renderReel();
|
||||
const video = videos()[0];
|
||||
|
||||
fireEvent(video, new Event("loadeddata"));
|
||||
fireEvent(video, new Event("loadeddata"));
|
||||
await act(async () => {
|
||||
await Promise.resolve();
|
||||
});
|
||||
|
||||
expect(HTMLMediaElement.prototype.play).toHaveBeenCalledTimes(1);
|
||||
expect(HTMLMediaElement.prototype.pause).toHaveBeenCalledTimes(1);
|
||||
expect(video.dataset.primed).toBe("true");
|
||||
expect(HTMLMediaElement.prototype.play).not.toHaveBeenCalled();
|
||||
expect(HTMLMediaElement.prototype.pause).not.toHaveBeenCalled();
|
||||
expect(video.dataset.primed).toBeUndefined();
|
||||
});
|
||||
|
||||
it.each([
|
||||
[
|
||||
"iPhone (Safari)",
|
||||
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",
|
||||
],
|
||||
[
|
||||
"iPhone (Chrome, also WebKit)",
|
||||
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/126.0 Mobile/15E148 Safari/604.1",
|
||||
],
|
||||
[
|
||||
"Safari on the Mac",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
|
||||
],
|
||||
])(
|
||||
"path: %s (WebKit) -> primed once (play then pause) even if loadeddata fires twice",
|
||||
async (_name, userAgent) => {
|
||||
Object.defineProperty(navigator, "userAgent", {
|
||||
configurable: true,
|
||||
value: userAgent,
|
||||
});
|
||||
renderReel();
|
||||
const video = videos()[0];
|
||||
|
||||
fireEvent(video, new Event("loadeddata"));
|
||||
fireEvent(video, new Event("loadeddata"));
|
||||
await act(async () => {
|
||||
await Promise.resolve();
|
||||
});
|
||||
|
||||
expect(HTMLMediaElement.prototype.play).toHaveBeenCalledTimes(1);
|
||||
expect(HTMLMediaElement.prototype.pause).toHaveBeenCalledTimes(1);
|
||||
expect(video.dataset.primed).toBe("true");
|
||||
},
|
||||
);
|
||||
|
||||
it("path: priming is refused by the browser -> swallowed, no pause", async () => {
|
||||
Object.defineProperty(navigator, "userAgent", {
|
||||
configurable: true,
|
||||
value:
|
||||
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",
|
||||
});
|
||||
jest
|
||||
.mocked(HTMLMediaElement.prototype.play)
|
||||
.mockRejectedValue(new DOMException("blocked", "NotAllowedError"));
|
||||
@@ -621,9 +661,9 @@ describe("ProjectReel: estado das camadas, traços de capítulo e legenda", () =
|
||||
|
||||
scrollTo(0);
|
||||
|
||||
expect(states(".ds-reel-ticks li")).toEqual(["now", "todo", "todo"]);
|
||||
expect(states(".ds-reel-ticks li")).toEqual(["now", "todo"]);
|
||||
expect(caption().querySelector(".ds-reel-chapter-count")).toHaveTextContent(
|
||||
"01/03",
|
||||
"01/02",
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
Reference in new issue
Block a user