Skip to content

Commit 7a39b3d

Browse files
authored
Merge pull request #74 from sorryforthecommit/fix_invoice_steuernews
Fix invoice steuernews
2 parents 591e94f + c50174d commit 7a39b3d

9 files changed

Lines changed: 65 additions & 29 deletions

File tree

lib/WWW/WebKit2.pm

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ None by default.
2828
2929
=cut
3030

31-
use 5.10.0;
31+
use 5.18.0;
3232
use Moose;
3333

3434
with 'WWW::WebKit2::Cookies';
@@ -263,6 +263,11 @@ has 'log_path' => (
263263
default => '/tmp/webkit2_log/',
264264
);
265265

266+
has 'active_navigation_action' => (
267+
is => 'rw',
268+
default => 0,
269+
);
270+
266271
=head2 METHODS
267272
268273
=head3 init
@@ -343,6 +348,22 @@ sub init_webkit {
343348
$self->load_status($load_event);
344349
});
345350

351+
$self->view->signal_connect('decide-policy' => sub {
352+
my ($view, $decision, $type) = @_;
353+
if ($type eq 'navigation-action') {
354+
my $action = $decision->get_navigation_action;
355+
die "Already running a navigation action to " .
356+
$self->active_navigation_action
357+
. " when requested "
358+
. $action->get_navigation_type . ' ' . $action->get_request->get_uri
359+
if $self->active_navigation_action and not $action->is_redirect;
360+
$self->active_navigation_action($action->get_request->get_uri)
361+
if ($self->view->get_uri =~ s/#.*//r) ne ($action->get_request->get_uri =~ s/#.*//r);
362+
}
363+
$decision->use;
364+
return 0;
365+
});
366+
346367
$self->enable_file_access_from_file_urls;
347368
$self->enable_hardware_acceleration;
348369

@@ -389,7 +410,7 @@ sub process_events {
389410
sub process_page_load {
390411
my ($self) = @_;
391412

392-
Gtk3::main_iteration_do(0) while Gtk3::events_pending or $self->is_loading;
413+
Gtk3::main_iteration_do(0) while Gtk3::events_pending or $self->is_loading or $self->active_navigation_action;
393414
}
394415

395416
sub is_loading {
@@ -409,14 +430,17 @@ sub handle_form_submission {
409430
sub handle_resource_request {
410431
my ($self, $view, $resource, $request) = @_;
411432

433+
my $uri = $request->get_uri;
412434
$self->pending_requests->{"$request"}++;
413435

414436
$resource->signal_connect('finished' => sub {
437+
$self->active_navigation_action('') if $uri eq $self->active_navigation_action;
415438
delete $self->pending_requests->{"$request"};
416439
});
417440
$resource->signal_connect('failed' => sub {
418441
# If someone decides not to wait_for_pending_requests, this signal is received
419442
# during global destruction with $self being undefined.
443+
$self->active_navigation_action('') if $uri eq $self->active_navigation_action;
420444
delete $self->pending_requests->{"$request"} if defined $self;
421445
});
422446
}

lib/WWW/WebKit2/Events.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ sub wait_for_async_page_load {
176176
$variable_name //= "webkit2_to_reload";
177177

178178
$self->wait_for_condition(sub {
179-
not $self->run_javascript("window.$variable_name;");
179+
not $self->run_javascript("return window.$variable_name;");
180180
}, $timeout);
181181
$self->wait_for_page_to_load;
182182
}

lib/WWW/WebKit2/Inspector.pm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ sub run_javascript {
1414
my $done = 0;
1515
my $js_result = '';
1616

17-
$self->view->run_javascript($javascript_string, undef, sub {
17+
$self->view->run_javascript("(function () {$javascript_string})()", undef, sub {
1818
my ($object, $result, $user_data) = @_;
1919
$done = 1;
2020
$js_result = $self->get_javascript_result($result, $raw, $javascript_string);
@@ -84,7 +84,7 @@ sub resolve_locator {
8484
sub get_title {
8585
my ($self) = @_;
8686

87-
my $value = $self->run_javascript('document.title');
87+
my $value = $self->run_javascript('return document.title');
8888

8989
return $value;
9090
}
@@ -259,7 +259,7 @@ sub is_ordered {
259259
$second_element->prepare_element .
260260
'var second_element = element;' .
261261
'var position = first_element.compareDocumentPosition(second_element);' .
262-
'(position == 4) ? 1 : 0';
262+
'return (position == 4) ? 1 : 0';
263263

264264
return decode_json $self->run_javascript($javascript_string);
265265
}

lib/WWW/WebKit2/Locator.pm

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ sub get_screen_position {
290290
var win_left = window.screenLeft ? window.screenLeft : window.screenX;
291291
var win_top = window.screenTop ? window.screenTop : window.screenY;
292292
var result = { "y": win_top + y, "x": win_left + x };
293-
JSON.stringify(result)';
293+
return JSON.stringify(result)';
294294

295295
my $result = decode_json $self->inspector->run_javascript($search);
296296
return ($result->{x}, $result->{y});
@@ -338,11 +338,11 @@ sub fire_event {
338338
}, { once: true });
339339
var event = new Event("' . $event_type . '", { "bubbles": true, "cancelable": true });
340340
element.dispatchEvent(event);
341-
';
341+
';
342342

343343
my $result = $self->inspector->run_javascript($fire_event);
344344
$self->inspector->wait_for_condition(sub {
345-
my $event_fired = $self->inspector->run_javascript("window.event_fired");
345+
my $event_fired = $self->inspector->run_javascript("return window.event_fired");
346346
# event_fired will be undef if the event triggered a page load
347347
return 1 if (not $event_fired or $event_fired eq "fired");
348348
return 0;
@@ -369,7 +369,7 @@ sub is_visible {
369369

370370
$search .= "
371371
$is_visible_function
372-
isVisible(element)
372+
return isVisible(element)
373373
";
374374

375375
return $self->inspector->run_javascript($search);
@@ -455,7 +455,7 @@ sub prepare_element {
455455
var $element_name = getElementsByXPath('$locator'$parent_param);
456456
";
457457

458-
my $count = $self->inspector->run_javascript($search . "$element_name.length;");
458+
my $count = $self->inspector->run_javascript($search . "return $element_name.length;");
459459
croak "xpath: $locator gave $count results" if $count != 1;
460460

461461
$search .= "$element_name = $element_name" . "[0];";
@@ -471,7 +471,7 @@ sub prepare_element_search {
471471
my ($self, $function) = @_;
472472

473473
my $search = $self->prepare_element;
474-
$search .= "element.$function;";
474+
$search .= "return element.$function;";
475475

476476
return $search;
477477
}
@@ -501,7 +501,7 @@ sub prepare_elements_search {
501501
my ($self, $function) = @_;
502502

503503
my $search = $self->prepare_elements;
504-
$search .= "elements.$function;";
504+
$search .= "return elements.$function;";
505505

506506
return $search;
507507
}

lib/WWW/WebKit2/MouseInput.pm

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,33 @@ sub select {
2828
my $set_select =
2929
$select->prepare_element .
3030
'var options = element.options;
31+
var found = 0;
3132
for (var i = 0; i < options.length; i++) {
32-
if (options[i].value === ' . "'$option_value'" . ' ) {
33+
if (options[i].value === ' . "'$option_value'" . qq/ ) {
34+
element.selectedIndex = i;
3335
options[i].selected = true;
36+
found = 1;
3437
break;
3538
}
3639
}
37-
';
40+
if (!found)
41+
throw 'Did not find value "$option_value" for select $select';
42+
window.event_fired = "initialized";
43+
element.addEventListener("change", function(e) {
44+
window.event_fired = "fired";
45+
}, { once: true });
46+
var event = new Event("change", { "bubbles": true, "cancelable": true });
47+
element.dispatchEvent(event);
48+
/;
3849

3950
$self->run_javascript($set_select);
40-
4151
$self->wait_for_condition(sub {
42-
return $select->get_value eq $option_value;
52+
my $event_fired = $self->run_javascript("return window.event_fired");
53+
# event_fired will be undef if the event triggered a page load
54+
return 1 if (not $event_fired or $event_fired eq "fired");
55+
return 0;
4356
});
4457

45-
$select->fire_event('change');
4658

4759
$self->process_page_load;
4860

@@ -228,7 +240,7 @@ sub fire_mouse_event {
228240
$shift_down
229241
);
230242
231-
element.dispatchEvent(clickEvent);";
243+
return element.dispatchEvent(clickEvent);";
232244

233245
$self->run_javascript($mouse_up_script);
234246

@@ -317,7 +329,7 @@ sub native_drag_and_drop_to_object {
317329
$source_element
318330
$target_element
319331
DndSimulator.simulate(source, target);
320-
1;
332+
return 1;
321333
};
322334

323335
$self->run_javascript($js_string);

t/01load.t

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ ok($sel->is_ordered('id=first', 'id=second'), 'is_ordered is correct for ordered
6161
ok((not $sel->is_ordered('id=second', 'id=first')), 'is_ordered detects wrong order correctly');
6262

6363
$sel->open("$Bin/test/eval.html");
64-
is($sel->eval_js('"foo"'), 'foo', 'string evaluated');
65-
is($sel->eval_js('document.getElementById("foo").firstChild.data'), 'bar', 'js evaluated');
64+
is($sel->eval_js('return "foo"'), 'foo', 'string evaluated');
65+
is($sel->eval_js('return document.getElementById("foo").firstChild.data'), 'bar', 'js evaluated');
6666

6767
$sel->refresh;
6868
$sel->open("$Bin/test/type.html");

t/events.t

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ ok(
4646
$webkit->eval_js("window.scrollBy(0, 100);");
4747
ok(
4848
$webkit->wait_for_condition(sub {
49-
$webkit->eval_js("document.documentElement.scrollTop") == 100
49+
$webkit->eval_js("return document.documentElement.scrollTop") == 100
5050
}, 1000)
5151
);
5252

@@ -84,9 +84,9 @@ is($webkit->resolve_locator("css=#ajax_result")->get_inner_html, 'Hello World',
8484
$webkit->prepare_async_page_load;
8585
$webkit->click('css=button#start_ajax_with_reload');
8686
$webkit->wait_for_async_page_load;
87-
ok((not $webkit->run_javascript('window.ajax_url')), 'page has been reloaded');
87+
ok((not $webkit->run_javascript('return window.ajax_url')), 'page has been reloaded');
8888

89-
is($webkit->run_javascript('document.cookie'), 'foo=bar', 'cookie set');
89+
is($webkit->run_javascript('return document.cookie'), 'foo=bar', 'cookie set');
9090
$webkit->clear_cookies;
9191
is($webkit->run_javascript('document.cookie'), '', 'cookies cleared');
9292

t/inspector.t

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ ok(1, 'opened');
3333
eval {
3434
$webkit->eval_js(<<"JS");
3535
var foo = function() {};
36-
foo.bar = function() {};
36+
retun foo.bar = function() {};
3737
JS
3838
};
3939
like $@, qr/Unexpected return value/, 'eval_js dies with more useful error message';
4040

41-
my $js = $webkit->run_javascript('document.title');
41+
my $js = $webkit->run_javascript('return document.title');
4242
is($js, 'test', 'document.title is test');
4343

4444
my $html_source = $webkit->get_html_source();
@@ -55,7 +55,7 @@ is($text, "Testlink", "get_text works");
5555

5656
my $evaluated_js = $webkit->eval_js(
5757
'document.body.style.height = "400px";
58-
document.body.offsetHeight'
58+
return document.body.offsetHeight'
5959
);
6060
ok($evaluated_js == 400, "we can calculated with returned value");
6161
is($evaluated_js, 400, "eval_js works");

t/navigator.t

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,6 @@ $webkit->go_back;
3737
$webkit->open("file://$Bin/test/type.html");
3838
$webkit->submit('css=form');
3939
is($webkit->view->get_uri, "file://$Bin/test/type.html?foo=foo");
40-
is($webkit->run_javascript('window.location.href'), "file://$Bin/test/type.html?foo=foo");
40+
is($webkit->run_javascript('return window.location.href'), "file://$Bin/test/type.html?foo=foo");
4141

4242
done_testing;

0 commit comments

Comments
 (0)