Skip to content

Commit 2f18647

Browse files
committed
feat(chromium): add skipNetworkAlmostIdle
1 parent af480fc commit 2f18647

4 files changed

Lines changed: 72 additions & 1 deletion

File tree

AGENTS.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,17 @@ All verification tasks go through Composer scripts. Do not run tools directly un
107107
| `composer run lint:fix` | Auto-fix coding standard violations (phpcbf) | Before every commit |
108108
| `composer run lint` | Run phpcs + phpstan at max level | Before every commit |
109109
| `composer run tests` | Run PHPUnit with coverage | After code changes |
110-
| `composer run all` | lint:fix + lint + tests in sequence | Before submitting PR |
110+
| `composer run all` | lint:fix + lint + tests in sequence | Before submitting PR |g
111+
112+
Run all Composer commands inside this Docker container:
113+
114+
```bash
115+
docker run --rm -it \
116+
-e PHP_EXTENSION_XDEBUG=1 \
117+
-v $(PWD):/usr/src/app/ \
118+
thecodingmachine/php:8.1-v4-cli \
119+
bash -c "composer run lint:fix && composer run lint && composer run tests"
120+
```
111121

112122
### Architecture
113123

src/Modules/ChromiumMultipartFormDataModule.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,17 @@ public function skipNetworkIdleEvent(bool $skip = true): self
241241
return $this;
242242
}
243243

244+
/**
245+
* Specifies whether Chromium have to wait or not for its network to be
246+
* almost idle.
247+
*/
248+
public function skipNetworkAlmostIdleEvent(bool $skip = true): self
249+
{
250+
$this->formValue('skipNetworkAlmostIdleEvent', $skip ?: '0');
251+
252+
return $this;
253+
}
254+
244255
/**
245256
* Sets the additional files, like images, fonts, stylesheets, and so on.
246257
*/

tests/Modules/ChromiumPdfTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_convert_url_en
6868
bool $failOnResourceLoadingFailed = false,
6969
bool $failOnConsoleExceptions = false,
7070
bool|null $skipNetworkIdleEvent = null,
71+
bool|null $skipNetworkAlmostIdleEvent = null,
7172
SplitMode|null $splitMode = null,
7273
string|null $pdfa = null,
7374
bool $pdfua = false,
@@ -122,6 +123,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_convert_url_en
122123
$failOnResourceLoadingFailed,
123124
$failOnConsoleExceptions,
124125
$skipNetworkIdleEvent,
126+
$skipNetworkAlmostIdleEvent,
125127
$splitMode,
126128
$pdfa,
127129
$pdfua,
@@ -182,6 +184,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_convert_url_en
182184
$failOnResourceLoadingFailed,
183185
$failOnConsoleExceptions,
184186
$skipNetworkIdleEvent,
187+
$skipNetworkAlmostIdleEvent,
185188
$splitMode,
186189
$pdfa,
187190
$pdfua,
@@ -238,6 +241,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_convert_url_en
238241
* bool,
239242
* bool,
240243
* bool|null,
244+
* bool|null,
241245
* SplitMode|null,
242246
* string|null,
243247
* bool,
@@ -303,6 +307,7 @@ public static function provideUrlData(): array
303307
true,
304308
true,
305309
true,
310+
true,
306311
SplitMode::intervals(1),
307312
'PDF/A-1a',
308313
true,
@@ -379,6 +384,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_convert_html_e
379384
bool $failOnResourceLoadingFailed = false,
380385
bool $failOnConsoleExceptions = false,
381386
bool|null $skipNetworkIdleEvent = null,
387+
bool|null $skipNetworkAlmostIdleEvent = null,
382388
SplitMode|null $splitMode = null,
383389
string|null $pdfa = null,
384390
bool $pdfua = false,
@@ -433,6 +439,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_convert_html_e
433439
$failOnResourceLoadingFailed,
434440
$failOnConsoleExceptions,
435441
$skipNetworkIdleEvent,
442+
$skipNetworkAlmostIdleEvent,
436443
$splitMode,
437444
$pdfa,
438445
$pdfua,
@@ -495,6 +502,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_convert_html_e
495502
$failOnResourceLoadingFailed,
496503
$failOnConsoleExceptions,
497504
$skipNetworkIdleEvent,
505+
$skipNetworkAlmostIdleEvent,
498506
$splitMode,
499507
$pdfa,
500508
$pdfua,
@@ -551,6 +559,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_convert_html_e
551559
* bool,
552560
* bool,
553561
* bool|null,
562+
* bool|null,
554563
* SplitMode|null,
555564
* string|null,
556565
* bool,
@@ -616,6 +625,7 @@ public static function provideHtmlData(): array
616625
true,
617626
true,
618627
true,
628+
true,
619629
SplitMode::intervals(1),
620630
'PDF/A-1a',
621631
true,
@@ -694,6 +704,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_convert_markdo
694704
bool $failOnResourceLoadingFailed = false,
695705
bool $failOnConsoleExceptions = false,
696706
bool|null $skipNetworkIdleEvent = null,
707+
bool|null $skipNetworkAlmostIdleEvent = null,
697708
SplitMode|null $splitMode = null,
698709
string|null $pdfa = null,
699710
bool $pdfua = false,
@@ -748,6 +759,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_convert_markdo
748759
$failOnResourceLoadingFailed,
749760
$failOnConsoleExceptions,
750761
$skipNetworkIdleEvent,
762+
$skipNetworkAlmostIdleEvent,
751763
$splitMode,
752764
$pdfa,
753765
$pdfua,
@@ -815,6 +827,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_convert_markdo
815827
$failOnResourceLoadingFailed,
816828
$failOnConsoleExceptions,
817829
$skipNetworkIdleEvent,
830+
$skipNetworkAlmostIdleEvent,
818831
$splitMode,
819832
$pdfa,
820833
$pdfua,
@@ -872,6 +885,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_convert_markdo
872885
* bool,
873886
* bool,
874887
* bool|null,
888+
* bool|null,
875889
* SplitMode|null,
876890
* string|null,
877891
* bool,
@@ -946,6 +960,7 @@ public static function provideMarkdownData(): array
946960
true,
947961
true,
948962
true,
963+
true,
949964
SplitMode::intervals(1),
950965
'PDF/A-1a',
951966
true,
@@ -1020,6 +1035,7 @@ private function hydrateChromiumPdfFormData(
10201035
bool $failOnResourceLoadingFailed = false,
10211036
bool $failOnConsoleExceptions = false,
10221037
bool|null $skipNetworkIdleEvent = null,
1038+
bool|null $skipNetworkAlmostIdleEvent = null,
10231039
SplitMode|null $splitMode = null,
10241040
string|null $pdfa = null,
10251041
bool $pdfua = false,
@@ -1152,6 +1168,10 @@ private function hydrateChromiumPdfFormData(
11521168
$chromium->skipNetworkIdleEvent($skipNetworkIdleEvent);
11531169
}
11541170

1171+
if ($skipNetworkAlmostIdleEvent !== null) {
1172+
$chromium->skipNetworkAlmostIdleEvent($skipNetworkAlmostIdleEvent);
1173+
}
1174+
11551175
if ($splitMode !== null) {
11561176
$chromium->split($splitMode);
11571177
}
@@ -1245,6 +1265,7 @@ private function assertChromiumPdfOptions(
12451265
bool $failOnResourceLoadingFailed,
12461266
bool $failOnConsoleExceptions,
12471267
bool|null $skipNetworkIdleEvent,
1268+
bool|null $skipNetworkAlmostIdleEvent,
12481269
SplitMode|null $splitMode,
12491270
string|null $pdfa,
12501271
bool $pdfua,
@@ -1409,6 +1430,10 @@ private function assertChromiumPdfOptions(
14091430
$this->assertContainsFormValue($body, 'skipNetworkIdleEvent', $skipNetworkIdleEvent ? '1' : '0');
14101431
}
14111432

1433+
if ($skipNetworkAlmostIdleEvent !== null) {
1434+
$this->assertContainsFormValue($body, 'skipNetworkAlmostIdleEvent', $skipNetworkAlmostIdleEvent ? '1' : '0');
1435+
}
1436+
14121437
if ($splitMode !== null) {
14131438
$this->assertContainsFormValue($body, 'splitMode', $splitMode->mode);
14141439
$this->assertContainsFormValue($body, 'splitSpan', $splitMode->span);

tests/Modules/ChromiumScreenshotTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_screenshot_url
5353
bool $failOnResourceLoadingFailed = false,
5454
bool $failOnConsoleExceptions = false,
5555
bool|null $skipNetworkIdleEvent = null,
56+
bool|null $skipNetworkAlmostIdleEvent = null,
5657
array $assets = [],
5758
): void {
5859
$chromium = Gotenberg::chromium('')->screenshot();
@@ -79,6 +80,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_screenshot_url
7980
$failOnResourceLoadingFailed,
8081
$failOnConsoleExceptions,
8182
$skipNetworkIdleEvent,
83+
$skipNetworkAlmostIdleEvent,
8284
$assets,
8385
);
8486

@@ -111,6 +113,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_screenshot_url
111113
$failOnResourceLoadingFailed,
112114
$failOnConsoleExceptions,
113115
$skipNetworkIdleEvent,
116+
$skipNetworkAlmostIdleEvent,
114117
$assets,
115118
);
116119
}
@@ -139,6 +142,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_screenshot_url
139142
* bool,
140143
* bool,
141144
* bool|null,
145+
* bool|null,
142146
* array<int, Stream>
143147
* }>
144148
*/
@@ -178,6 +182,7 @@ public static function provideUrlData(): array
178182
true,
179183
true,
180184
true,
185+
true,
181186
[
182187
Stream::string('my.jpg', 'Image content'),
183188
],
@@ -219,6 +224,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_screenshot_htm
219224
bool $failOnResourceLoadingFailed = false,
220225
bool $failOnConsoleExceptions = false,
221226
bool|null $skipNetworkIdleEvent = null,
227+
bool|null $skipNetworkAlmostIdleEvent = null,
222228
array $assets = [],
223229
): void {
224230
$chromium = Gotenberg::chromium('')->screenshot();
@@ -245,6 +251,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_screenshot_htm
245251
$failOnResourceLoadingFailed,
246252
$failOnConsoleExceptions,
247253
$skipNetworkIdleEvent,
254+
$skipNetworkAlmostIdleEvent,
248255
$assets,
249256
);
250257

@@ -279,6 +286,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_screenshot_htm
279286
$failOnResourceLoadingFailed,
280287
$failOnConsoleExceptions,
281288
$skipNetworkIdleEvent,
289+
$skipNetworkAlmostIdleEvent,
282290
$assets,
283291
);
284292
}
@@ -307,6 +315,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_screenshot_htm
307315
* bool,
308316
* bool,
309317
* bool|null,
318+
* bool|null,
310319
* array<int, Stream>
311320
* }>
312321
*/
@@ -346,6 +355,7 @@ public static function provideHtmlData(): array
346355
true,
347356
true,
348357
true,
358+
true,
349359
[
350360
Stream::string('my.jpg', 'Image content'),
351361
],
@@ -389,6 +399,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_screenshot_mar
389399
bool $failOnResourceLoadingFailed = false,
390400
bool $failOnConsoleExceptions = false,
391401
bool|null $skipNetworkIdleEvent = null,
402+
bool|null $skipNetworkAlmostIdleEvent = null,
392403
array $assets = [],
393404
): void {
394405
$chromium = Gotenberg::chromium('')->screenshot();
@@ -415,6 +426,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_screenshot_mar
415426
$failOnResourceLoadingFailed,
416427
$failOnConsoleExceptions,
417428
$skipNetworkIdleEvent,
429+
$skipNetworkAlmostIdleEvent,
418430
$assets,
419431
);
420432

@@ -454,6 +466,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_screenshot_mar
454466
$failOnResourceLoadingFailed,
455467
$failOnConsoleExceptions,
456468
$skipNetworkIdleEvent,
469+
$skipNetworkAlmostIdleEvent,
457470
$assets,
458471
);
459472
}
@@ -483,6 +496,7 @@ public function it_creates_a_valid_request_for_the_forms_chromium_screenshot_mar
483496
* bool,
484497
* bool,
485498
* bool|null,
499+
* bool|null,
486500
* array<int, Stream>
487501
* }>
488502
*/
@@ -530,6 +544,7 @@ public static function provideMarkdownData(): array
530544
true,
531545
true,
532546
true,
547+
true,
533548
[
534549
Stream::string('my.jpg', 'Image content'),
535550
],
@@ -569,6 +584,7 @@ private function hydrateChromiumScreenshotFormData(
569584
bool $failOnResourceLoadingFailed = false,
570585
bool $failOnConsoleExceptions = false,
571586
bool|null $skipNetworkIdleEvent = null,
587+
bool|null $skipNetworkAlmostIdleEvent = null,
572588
array $assets = [],
573589
): ChromiumScreenshot {
574590
if ($width !== null) {
@@ -667,6 +683,10 @@ private function hydrateChromiumScreenshotFormData(
667683
$chromium->skipNetworkIdleEvent($skipNetworkIdleEvent);
668684
}
669685

686+
if ($skipNetworkAlmostIdleEvent !== null) {
687+
$chromium->skipNetworkAlmostIdleEvent($skipNetworkAlmostIdleEvent);
688+
}
689+
670690
if (count($assets) > 0) {
671691
$chromium->assets(...$assets);
672692
}
@@ -706,6 +726,7 @@ private function assertChromiumScreenshotOptions(
706726
bool $failOnResourceLoadingFailed,
707727
bool $failOnConsoleExceptions,
708728
bool|null $skipNetworkIdleEvent,
729+
bool|null $skipNetworkAlmostIdleEvent,
709730
array $assets,
710731
): void {
711732
if ($width !== null) {
@@ -822,6 +843,10 @@ private function assertChromiumScreenshotOptions(
822843
$this->assertContainsFormValue($body, 'skipNetworkIdleEvent', $skipNetworkIdleEvent ? '1' : '0');
823844
}
824845

846+
if ($skipNetworkAlmostIdleEvent !== null) {
847+
$this->assertContainsFormValue($body, 'skipNetworkAlmostIdleEvent', $skipNetworkAlmostIdleEvent ? '1' : '0');
848+
}
849+
825850
if (count($assets) <= 0) {
826851
return;
827852
}

0 commit comments

Comments
 (0)