Merge lp:~3v1n0/bamf/javaws-ignore-desktop-0.2 into lp:bamf/0.2
- javaws-ignore-desktop-0.2
- Merge into bamf-0.2
Status: | Merged |
---|---|
Approved by: | Brandon Schaefer |
Approved revision: | 498 |
Merged at revision: | 491 |
Proposed branch: | lp:~3v1n0/bamf/javaws-ignore-desktop-0.2 |
Merge into: | lp:bamf/0.2 |
Diff against target: |
473 lines (+241/-21) 8 files modified
src/bamf-legacy-window-test.c (+21/-0) src/bamf-legacy-window-test.h (+1/-0) src/bamf-legacy-window.c (+47/-0) src/bamf-legacy-window.h (+4/-0) src/bamf-matcher-private.h (+1/-0) src/bamf-matcher.c (+48/-18) tests/bamfdaemon/data/icedtea-netx-javaws.desktop (+12/-0) tests/bamfdaemon/test-matcher.c (+107/-3) |
To merge this branch: | bzr merge lp:~3v1n0/bamf/javaws-ignore-desktop-0.2 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Brandon Schaefer (community) | Approve | ||
Review via email: mp+145291@code.launchpad.net |
Commit message
BamfMatcher: ignore the javaws windows when setting the window hint
Description of the change
Backport to Bamf-0.2 of lp:~3v1n0/bamf/javaws-ignore-desktop/+merge/145289
We need to avoid that a Java Web Application is associated with the default "Java Web Start" .desktop file provided by java as the default opener for jnlp files, or the bug #1098186 will show again.
Test added.
- 493. By Marco Trevisan (Treviño)
-
Tests: add the missing icedtea-
netx-javaws. desktop file - 494. By Marco Trevisan (Treviño)
-
TestMatcher: fix javawm class names
- 495. By Marco Trevisan (Treviño)
-
BamfLegacyWindow: add a function to fetch the process name
- 496. By Marco Trevisan (Treviño)
-
BamfLegacyWindo
wTest: implement the get_process_name function - 497. By Marco Trevisan (Treviño)
-
BamfMatcher: add bamf_matcher_
is_valid_ process_ prefix to check for bad prefix process Now we ignore the bad process prefixes also when using the
fallback process-name comparison. In this way the .desktop files
that they may provide to load files are ignored. - 498. By Marco Trevisan (Treviño)
-
TestMatcher: added one more test to ensure javaws matching
Preview Diff
1 | === modified file 'src/bamf-legacy-window-test.c' | |||
2 | --- src/bamf-legacy-window-test.c 2012-10-10 17:36:21 +0000 | |||
3 | +++ src/bamf-legacy-window-test.c 2013-01-29 18:22:23 +0000 | |||
4 | @@ -194,6 +194,16 @@ | |||
5 | 194 | } | 194 | } |
6 | 195 | 195 | ||
7 | 196 | char * | 196 | char * |
8 | 197 | bamf_legacy_window_test_get_process_name (BamfLegacyWindow *legacy_window) | ||
9 | 198 | { | ||
10 | 199 | BamfLegacyWindowTest *self; | ||
11 | 200 | |||
12 | 201 | self = BAMF_LEGACY_WINDOW_TEST (legacy_window); | ||
13 | 202 | |||
14 | 203 | return g_strdup (self->process_name); | ||
15 | 204 | } | ||
16 | 205 | |||
17 | 206 | char * | ||
18 | 197 | bamf_legacy_window_test_get_app_id (BamfLegacyWindow *legacy_window) | 207 | bamf_legacy_window_test_get_app_id (BamfLegacyWindow *legacy_window) |
19 | 198 | { | 208 | { |
20 | 199 | BamfLegacyWindowTest *self; | 209 | BamfLegacyWindowTest *self; |
21 | @@ -371,6 +381,7 @@ | |||
22 | 371 | g_free (self->wm_class_name); | 381 | g_free (self->wm_class_name); |
23 | 372 | g_free (self->wm_class_instance); | 382 | g_free (self->wm_class_instance); |
24 | 373 | g_free (self->exec); | 383 | g_free (self->exec); |
25 | 384 | g_free (self->process_name); | ||
26 | 374 | g_free (self->application_id); | 385 | g_free (self->application_id); |
27 | 375 | g_free (self->unique_bus_name); | 386 | g_free (self->unique_bus_name); |
28 | 376 | g_free (self->dbus_menu_object_path); | 387 | g_free (self->dbus_menu_object_path); |
29 | @@ -390,6 +401,7 @@ | |||
30 | 390 | win_class->get_class_name = bamf_legacy_window_test_get_class_name; | 401 | win_class->get_class_name = bamf_legacy_window_test_get_class_name; |
31 | 391 | win_class->get_class_instance_name = bamf_legacy_window_test_get_class_instance_name; | 402 | win_class->get_class_instance_name = bamf_legacy_window_test_get_class_instance_name; |
32 | 392 | win_class->get_exec_string = bamf_legacy_window_test_get_exec_string; | 403 | win_class->get_exec_string = bamf_legacy_window_test_get_exec_string; |
33 | 404 | win_class->get_process_name = bamf_legacy_window_test_get_process_name; | ||
34 | 393 | win_class->get_xid = bamf_legacy_window_test_get_xid; | 405 | win_class->get_xid = bamf_legacy_window_test_get_xid; |
35 | 394 | win_class->get_pid = bamf_legacy_window_test_get_pid; | 406 | win_class->get_pid = bamf_legacy_window_test_get_pid; |
36 | 395 | win_class->needs_attention = bamf_legacy_window_test_needs_attention; | 407 | win_class->needs_attention = bamf_legacy_window_test_needs_attention; |
37 | @@ -431,6 +443,7 @@ | |||
38 | 431 | copy->wm_class_name = g_strdup (self->wm_class_name); | 443 | copy->wm_class_name = g_strdup (self->wm_class_name); |
39 | 432 | copy->wm_class_instance = g_strdup (self->wm_class_instance); | 444 | copy->wm_class_instance = g_strdup (self->wm_class_instance); |
40 | 433 | copy->exec = g_strdup (self->exec); | 445 | copy->exec = g_strdup (self->exec); |
41 | 446 | copy->process_name = g_strdup (self->process_name); | ||
42 | 434 | copy->application_id = g_strdup (self->application_id); | 447 | copy->application_id = g_strdup (self->application_id); |
43 | 435 | copy->unique_bus_name = g_strdup (self->unique_bus_name); | 448 | copy->unique_bus_name = g_strdup (self->unique_bus_name); |
44 | 436 | copy->dbus_menu_object_path = g_strdup (self->dbus_menu_object_path); | 449 | copy->dbus_menu_object_path = g_strdup (self->dbus_menu_object_path); |
45 | @@ -459,5 +472,13 @@ | |||
46 | 459 | self->wm_class_name = g_strdup (wmclass_name); | 472 | self->wm_class_name = g_strdup (wmclass_name); |
47 | 460 | self->exec = g_strdup (exec); | 473 | self->exec = g_strdup (exec); |
48 | 461 | 474 | ||
49 | 475 | if (self->exec) | ||
50 | 476 | { | ||
51 | 477 | gchar **splitted_exec = g_strsplit (exec, " ", 2); | ||
52 | 478 | gchar *tmp = g_utf8_strrchr (splitted_exec[0], -1, G_DIR_SEPARATOR); | ||
53 | 479 | self->process_name = g_strdup (tmp ? tmp + 1 : splitted_exec[0]); | ||
54 | 480 | g_strfreev (splitted_exec); | ||
55 | 481 | } | ||
56 | 482 | |||
57 | 462 | return self; | 483 | return self; |
58 | 463 | } | 484 | } |
59 | 464 | 485 | ||
60 | === modified file 'src/bamf-legacy-window-test.h' | |||
61 | --- src/bamf-legacy-window-test.h 2012-10-10 17:36:21 +0000 | |||
62 | +++ src/bamf-legacy-window-test.h 2013-01-29 18:22:23 +0000 | |||
63 | @@ -57,6 +57,7 @@ | |||
64 | 57 | char * wm_class_name; | 57 | char * wm_class_name; |
65 | 58 | char * wm_class_instance; | 58 | char * wm_class_instance; |
66 | 59 | char * exec; | 59 | char * exec; |
67 | 60 | char * process_name; | ||
68 | 60 | char * application_id; | 61 | char * application_id; |
69 | 61 | char * unique_bus_name; | 62 | char * unique_bus_name; |
70 | 62 | char * dbus_menu_object_path; | 63 | char * dbus_menu_object_path; |
71 | 63 | 64 | ||
72 | === modified file 'src/bamf-legacy-window.c' | |||
73 | --- src/bamf-legacy-window.c 2013-01-09 19:49:06 +0000 | |||
74 | +++ src/bamf-legacy-window.c 2013-01-29 18:22:23 +0000 | |||
75 | @@ -186,6 +186,51 @@ | |||
76 | 186 | } | 186 | } |
77 | 187 | 187 | ||
78 | 188 | char * | 188 | char * |
79 | 189 | bamf_legacy_window_get_process_name (BamfLegacyWindow *self) | ||
80 | 190 | { | ||
81 | 191 | gchar *stat_path; | ||
82 | 192 | gchar *contents; | ||
83 | 193 | gchar **lines; | ||
84 | 194 | gchar **sections; | ||
85 | 195 | gchar *result = NULL; | ||
86 | 196 | guint pid; | ||
87 | 197 | |||
88 | 198 | g_return_val_if_fail (BAMF_IS_LEGACY_WINDOW (self), NULL); | ||
89 | 199 | |||
90 | 200 | if (BAMF_LEGACY_WINDOW_GET_CLASS (self)->get_process_name) | ||
91 | 201 | return BAMF_LEGACY_WINDOW_GET_CLASS (self)->get_process_name (self); | ||
92 | 202 | |||
93 | 203 | pid = bamf_legacy_window_get_pid (self); | ||
94 | 204 | |||
95 | 205 | if (pid <= 0) | ||
96 | 206 | return NULL; | ||
97 | 207 | |||
98 | 208 | stat_path = g_strdup_printf ("/proc/%i/status", pid); | ||
99 | 209 | |||
100 | 210 | if (g_file_get_contents (stat_path, &contents, NULL, NULL)) | ||
101 | 211 | { | ||
102 | 212 | lines = g_strsplit (contents, "\n", 2); | ||
103 | 213 | |||
104 | 214 | if (lines && g_strv_length (lines) > 0) | ||
105 | 215 | { | ||
106 | 216 | sections = g_strsplit (lines[0], "\t", 0); | ||
107 | 217 | if (sections) | ||
108 | 218 | { | ||
109 | 219 | if (g_strv_length (sections) > 1) | ||
110 | 220 | result = g_strdup (sections[1]); | ||
111 | 221 | |||
112 | 222 | g_strfreev (sections); | ||
113 | 223 | } | ||
114 | 224 | g_strfreev (lines); | ||
115 | 225 | } | ||
116 | 226 | g_free (contents); | ||
117 | 227 | } | ||
118 | 228 | g_free (stat_path); | ||
119 | 229 | |||
120 | 230 | return result; | ||
121 | 231 | } | ||
122 | 232 | |||
123 | 233 | char * | ||
124 | 189 | bamf_legacy_window_get_exec_string (BamfLegacyWindow *self) | 234 | bamf_legacy_window_get_exec_string (BamfLegacyWindow *self) |
125 | 190 | { | 235 | { |
126 | 191 | gchar *result = NULL; | 236 | gchar *result = NULL; |
127 | @@ -223,6 +268,8 @@ | |||
128 | 223 | return result; | 268 | return result; |
129 | 224 | } | 269 | } |
130 | 225 | 270 | ||
131 | 271 | |||
132 | 272 | |||
133 | 226 | const char * | 273 | const char * |
134 | 227 | bamf_legacy_window_save_mini_icon (BamfLegacyWindow *self) | 274 | bamf_legacy_window_save_mini_icon (BamfLegacyWindow *self) |
135 | 228 | { | 275 | { |
136 | 229 | 276 | ||
137 | === modified file 'src/bamf-legacy-window.h' | |||
138 | --- src/bamf-legacy-window.h 2012-10-10 17:36:21 +0000 | |||
139 | +++ src/bamf-legacy-window.h 2013-01-29 18:22:23 +0000 | |||
140 | @@ -74,6 +74,7 @@ | |||
141 | 74 | const char * (*get_class_name) (BamfLegacyWindow *legacy_window); | 74 | const char * (*get_class_name) (BamfLegacyWindow *legacy_window); |
142 | 75 | const char * (*get_class_instance_name) (BamfLegacyWindow *legacy_window); | 75 | const char * (*get_class_instance_name) (BamfLegacyWindow *legacy_window); |
143 | 76 | char * (*get_exec_string) (BamfLegacyWindow *legacy_window); | 76 | char * (*get_exec_string) (BamfLegacyWindow *legacy_window); |
144 | 77 | char * (*get_process_name) (BamfLegacyWindow *legacy_window); | ||
145 | 77 | char * (*get_app_id) (BamfLegacyWindow *legacy_window); | 78 | char * (*get_app_id) (BamfLegacyWindow *legacy_window); |
146 | 78 | char * (*get_unique_bus_name) (BamfLegacyWindow *legacy_window); | 79 | char * (*get_unique_bus_name) (BamfLegacyWindow *legacy_window); |
147 | 79 | char * (*get_menu_object_path) (BamfLegacyWindow *legacy_window); | 80 | char * (*get_menu_object_path) (BamfLegacyWindow *legacy_window); |
148 | @@ -142,6 +143,8 @@ | |||
149 | 142 | 143 | ||
150 | 143 | char * bamf_legacy_window_get_exec_string (BamfLegacyWindow *self); | 144 | char * bamf_legacy_window_get_exec_string (BamfLegacyWindow *self); |
151 | 144 | 145 | ||
152 | 146 | char * bamf_legacy_window_get_process_name (BamfLegacyWindow *self); | ||
153 | 147 | |||
154 | 145 | BamfLegacyWindow * bamf_legacy_window_get_transient (BamfLegacyWindow *self); | 148 | BamfLegacyWindow * bamf_legacy_window_get_transient (BamfLegacyWindow *self); |
155 | 146 | 149 | ||
156 | 147 | char * bamf_legacy_window_get_hint (BamfLegacyWindow *self, | 150 | char * bamf_legacy_window_get_hint (BamfLegacyWindow *self, |
157 | @@ -158,3 +161,4 @@ | |||
158 | 158 | BamfLegacyWindow * bamf_legacy_window_new (WnckWindow *legacy_window); | 161 | BamfLegacyWindow * bamf_legacy_window_new (WnckWindow *legacy_window); |
159 | 159 | 162 | ||
160 | 160 | #endif | 163 | #endif |
161 | 164 | |||
162 | 161 | 165 | ||
163 | === modified file 'src/bamf-matcher-private.h' | |||
164 | --- src/bamf-matcher-private.h 2013-01-09 19:48:18 +0000 | |||
165 | +++ src/bamf-matcher-private.h 2013-01-29 18:22:23 +0000 | |||
166 | @@ -47,5 +47,6 @@ | |||
167 | 47 | BamfApplication * bamf_matcher_get_application_by_desktop_file (BamfMatcher *self, const char *desktop_file); | 47 | BamfApplication * bamf_matcher_get_application_by_desktop_file (BamfMatcher *self, const char *desktop_file); |
168 | 48 | BamfApplication * bamf_matcher_get_application_by_xid (BamfMatcher *self, guint xid); | 48 | BamfApplication * bamf_matcher_get_application_by_xid (BamfMatcher *self, guint xid); |
169 | 49 | char * bamf_matcher_get_trimmed_exec (BamfMatcher *self, const char *exec); | 49 | char * bamf_matcher_get_trimmed_exec (BamfMatcher *self, const char *exec); |
170 | 50 | gboolean bamf_matcher_is_valid_process_prefix (BamfMatcher *self, const char *exec); | ||
171 | 50 | 51 | ||
172 | 51 | #endif | 52 | #endif |
173 | 52 | 53 | ||
174 | === modified file 'src/bamf-matcher.c' | |||
175 | --- src/bamf-matcher.c 2013-01-09 22:37:21 +0000 | |||
176 | +++ src/bamf-matcher.c 2013-01-29 18:22:23 +0000 | |||
177 | @@ -54,7 +54,8 @@ | |||
178 | 54 | "^gksu(do)?$", "^sudo$", "^su-to-root$", "^amdxdg-su$", "^java(ws)?$", | 54 | "^gksu(do)?$", "^sudo$", "^su-to-root$", "^amdxdg-su$", "^java(ws)?$", |
179 | 55 | "^mono$", "^ruby$", "^padsp$", "^aoss$", "^python(\\d.\\d)?$", "^(ba)?sh$", | 55 | "^mono$", "^ruby$", "^padsp$", "^aoss$", "^python(\\d.\\d)?$", "^(ba)?sh$", |
180 | 56 | "^perl$", "^env$", "^xdg-open$", | 56 | "^perl$", "^env$", "^xdg-open$", |
182 | 57 | /* javaws strings: */ "^net\\.sourceforge\\.jnlp\\.runtime\\.Boot$", "^rt.jar$" | 57 | /* javaws strings: */ "^net\\.sourceforge\\.jnlp\\.runtime\\.Boot$", "^rt\\.jar$", |
183 | 58 | "^com\\.sun\\.javaws\\.Main$", "^deploy\\.jar$" | ||
184 | 58 | }; | 59 | }; |
185 | 59 | 60 | ||
186 | 60 | // Prefixes that must be considered starting point of exec strings | 61 | // Prefixes that must be considered starting point of exec strings |
187 | @@ -507,6 +508,30 @@ | |||
188 | 507 | return (l ? (char *) l->data : NULL); | 508 | return (l ? (char *) l->data : NULL); |
189 | 508 | } | 509 | } |
190 | 509 | 510 | ||
191 | 511 | gboolean | ||
192 | 512 | bamf_matcher_is_valid_process_prefix (BamfMatcher *self, const char *process_name) | ||
193 | 513 | { | ||
194 | 514 | GRegex *regex; | ||
195 | 515 | gint i; | ||
196 | 516 | |||
197 | 517 | g_return_val_if_fail (BAMF_IS_MATCHER (self), TRUE); | ||
198 | 518 | |||
199 | 519 | if (!process_name || *process_name == '\0') | ||
200 | 520 | return FALSE; | ||
201 | 521 | |||
202 | 522 | for (i = 0; i < self->priv->bad_prefixes->len; ++i) | ||
203 | 523 | { | ||
204 | 524 | regex = g_array_index (self->priv->bad_prefixes, GRegex *, i); | ||
205 | 525 | |||
206 | 526 | if (g_regex_match (regex, process_name, 0, NULL)) | ||
207 | 527 | { | ||
208 | 528 | return FALSE; | ||
209 | 529 | } | ||
210 | 530 | } | ||
211 | 531 | |||
212 | 532 | return TRUE; | ||
213 | 533 | } | ||
214 | 534 | |||
215 | 510 | /* Attempts to return the binary name for a particular execution string */ | 535 | /* Attempts to return the binary name for a particular execution string */ |
216 | 511 | char * | 536 | char * |
217 | 512 | bamf_matcher_get_trimmed_exec (BamfMatcher * self, const char * exec_string) | 537 | bamf_matcher_get_trimmed_exec (BamfMatcher * self, const char * exec_string) |
218 | @@ -562,16 +587,7 @@ | |||
219 | 562 | if (good_prefix) | 587 | if (good_prefix) |
220 | 563 | continue; | 588 | continue; |
221 | 564 | 589 | ||
232 | 565 | bad_prefix = FALSE; | 590 | bad_prefix = !bamf_matcher_is_valid_process_prefix (self, part); |
223 | 566 | for (j = 0; j < self->priv->bad_prefixes->len; j++) | ||
224 | 567 | { | ||
225 | 568 | regex = g_array_index (self->priv->bad_prefixes, GRegex *, j); | ||
226 | 569 | if (g_regex_match (regex, part, 0, NULL)) | ||
227 | 570 | { | ||
228 | 571 | bad_prefix = TRUE; | ||
229 | 572 | break; | ||
230 | 573 | } | ||
231 | 574 | } | ||
233 | 575 | 591 | ||
234 | 576 | if (!bad_prefix) | 592 | if (!bad_prefix) |
235 | 577 | { | 593 | { |
236 | @@ -1502,7 +1518,7 @@ | |||
237 | 1502 | } | 1518 | } |
238 | 1503 | 1519 | ||
239 | 1504 | proc_name = process_name (pid); | 1520 | proc_name = process_name (pid); |
241 | 1505 | if (proc_name) | 1521 | if (bamf_matcher_is_valid_process_prefix (self, proc_name)) |
242 | 1506 | { | 1522 | { |
243 | 1507 | table_list = g_hash_table_lookup (priv->desktop_file_table, proc_name); | 1523 | table_list = g_hash_table_lookup (priv->desktop_file_table, proc_name); |
244 | 1508 | 1524 | ||
245 | @@ -1510,15 +1526,15 @@ | |||
246 | 1510 | { | 1526 | { |
247 | 1511 | result = g_list_prepend (result, g_strdup (l->data)); | 1527 | result = g_list_prepend (result, g_strdup (l->data)); |
248 | 1512 | } | 1528 | } |
249 | 1513 | g_free (proc_name); | ||
250 | 1514 | } | 1529 | } |
252 | 1515 | 1530 | g_free (proc_name); | |
253 | 1531 | |||
254 | 1516 | result = g_list_reverse (result); | 1532 | result = g_list_reverse (result); |
255 | 1517 | return result; | 1533 | return result; |
256 | 1518 | } | 1534 | } |
257 | 1519 | 1535 | ||
258 | 1520 | static gboolean | 1536 | static gboolean |
260 | 1521 | is_web_app_window (BamfMatcher *self, BamfLegacyWindow *window) | 1537 | is_web_app_window (BamfLegacyWindow *window) |
261 | 1522 | { | 1538 | { |
262 | 1523 | const char *window_class = bamf_legacy_window_get_class_name (window); | 1539 | const char *window_class = bamf_legacy_window_get_class_name (window); |
263 | 1524 | const char *instance_name = bamf_legacy_window_get_class_instance_name (window); | 1540 | const char *instance_name = bamf_legacy_window_get_class_instance_name (window); |
264 | @@ -1553,12 +1569,26 @@ | |||
265 | 1553 | } | 1569 | } |
266 | 1554 | 1570 | ||
267 | 1555 | static gboolean | 1571 | static gboolean |
268 | 1572 | is_javaws_window (BamfLegacyWindow *window) | ||
269 | 1573 | { | ||
270 | 1574 | const char *window_class = bamf_legacy_window_get_class_name (window); | ||
271 | 1575 | |||
272 | 1576 | if (g_strcmp0 (window_class, "net-sourceforge-jnlp-runtime-Boot") == 0 || | ||
273 | 1577 | g_strcmp0 (window_class, "com-sun-javaws-Main") == 0) | ||
274 | 1578 | { | ||
275 | 1579 | return TRUE; | ||
276 | 1580 | } | ||
277 | 1581 | |||
278 | 1582 | return FALSE; | ||
279 | 1583 | } | ||
280 | 1584 | |||
281 | 1585 | static gboolean | ||
282 | 1556 | bamf_matcher_window_skips_hint_set (BamfMatcher *self, BamfLegacyWindow *window) | 1586 | bamf_matcher_window_skips_hint_set (BamfMatcher *self, BamfLegacyWindow *window) |
283 | 1557 | { | 1587 | { |
285 | 1558 | gboolean skip_hint_set = FALSE; | 1588 | gboolean skip_hint_set; |
286 | 1559 | g_return_val_if_fail (BAMF_IS_MATCHER (self), TRUE); | 1589 | g_return_val_if_fail (BAMF_IS_MATCHER (self), TRUE); |
287 | 1560 | 1590 | ||
289 | 1561 | skip_hint_set = is_web_app_window (self, window); | 1591 | skip_hint_set = is_web_app_window (window) || is_javaws_window (window); |
290 | 1562 | 1592 | ||
291 | 1563 | return skip_hint_set; | 1593 | return skip_hint_set; |
292 | 1564 | } | 1594 | } |
293 | @@ -1640,7 +1670,7 @@ | |||
294 | 1640 | 1670 | ||
295 | 1641 | if (!filter_by_wmclass) | 1671 | if (!filter_by_wmclass) |
296 | 1642 | { | 1672 | { |
298 | 1643 | if (is_web_app_window (self, window)) | 1673 | if (is_web_app_window (window)) |
299 | 1644 | { | 1674 | { |
300 | 1645 | // This ensures that a new application is created even for unknown webapps | 1675 | // This ensures that a new application is created even for unknown webapps |
301 | 1646 | filter_by_wmclass = TRUE; | 1676 | filter_by_wmclass = TRUE; |
302 | 1647 | 1677 | ||
303 | === added file 'tests/bamfdaemon/data/icedtea-netx-javaws.desktop' | |||
304 | --- tests/bamfdaemon/data/icedtea-netx-javaws.desktop 1970-01-01 00:00:00 +0000 | |||
305 | +++ tests/bamfdaemon/data/icedtea-netx-javaws.desktop 2013-01-29 18:22:23 +0000 | |||
306 | @@ -0,0 +1,12 @@ | |||
307 | 1 | [Desktop Entry] | ||
308 | 2 | Name=IcedTea Java Web Start | ||
309 | 3 | Name[fi]=IcedTea Java - Web Start | ||
310 | 4 | Comment=IcedTea Java Web Start | ||
311 | 5 | Comment[fi]=IcedTea Java - Web Start | ||
312 | 6 | Exec=/usr/bin/javaws %u | ||
313 | 7 | Terminal=false | ||
314 | 8 | Type=Application | ||
315 | 9 | Icon=javaws | ||
316 | 10 | Categories=Application;Network; | ||
317 | 11 | MimeType=application/x-java-jnlp-file; | ||
318 | 12 | NoDisplay=true | ||
319 | 0 | 13 | ||
320 | === modified file 'tests/bamfdaemon/test-matcher.c' | |||
321 | --- tests/bamfdaemon/test-matcher.c 2013-01-09 22:37:58 +0000 | |||
322 | +++ tests/bamfdaemon/test-matcher.c 2013-01-29 18:22:23 +0000 | |||
323 | @@ -34,6 +34,8 @@ | |||
324 | 34 | static void test_match_libreoffice_windows (void); | 34 | static void test_match_libreoffice_windows (void); |
325 | 35 | static void test_match_gnome_control_center_panels (void); | 35 | static void test_match_gnome_control_center_panels (void); |
326 | 36 | static void test_match_javaws_windows (void); | 36 | static void test_match_javaws_windows (void); |
327 | 37 | static void test_match_javaws_windows_hint_ignored (void); | ||
328 | 38 | static void test_match_javaws_windows_no_desktop_match (void); | ||
329 | 37 | static void test_new_desktop_matches_unmatched_windows (void); | 39 | static void test_new_desktop_matches_unmatched_windows (void); |
330 | 38 | static void test_trim_exec_string (void); | 40 | static void test_trim_exec_string (void); |
331 | 39 | 41 | ||
332 | @@ -56,6 +58,8 @@ | |||
333 | 56 | g_test_add_func (DOMAIN"/Matching/Application/LibreOffice", test_match_libreoffice_windows); | 58 | g_test_add_func (DOMAIN"/Matching/Application/LibreOffice", test_match_libreoffice_windows); |
334 | 57 | g_test_add_func (DOMAIN"/Matching/Application/GnomeControlCenter", test_match_gnome_control_center_panels); | 59 | g_test_add_func (DOMAIN"/Matching/Application/GnomeControlCenter", test_match_gnome_control_center_panels); |
335 | 58 | g_test_add_func (DOMAIN"/Matching/Application/JavaWebStart", test_match_javaws_windows); | 60 | g_test_add_func (DOMAIN"/Matching/Application/JavaWebStart", test_match_javaws_windows); |
336 | 61 | g_test_add_func (DOMAIN"/Matching/Application/JavaWebStart/HintIngored", test_match_javaws_windows_hint_ignored); | ||
337 | 62 | g_test_add_func (DOMAIN"/Matching/Application/JavaWebStart/NoDesktopMatch", test_match_javaws_windows_no_desktop_match); | ||
338 | 59 | g_test_add_func (DOMAIN"/Matching/Windows/UnmatchedOnNewDesktop", test_new_desktop_matches_unmatched_windows); | 63 | g_test_add_func (DOMAIN"/Matching/Windows/UnmatchedOnNewDesktop", test_new_desktop_matches_unmatched_windows); |
339 | 60 | g_test_add_func (DOMAIN"/ExecStringTrimming", test_trim_exec_string); | 64 | g_test_add_func (DOMAIN"/ExecStringTrimming", test_trim_exec_string); |
340 | 61 | } | 65 | } |
341 | @@ -569,7 +573,7 @@ | |||
342 | 569 | 573 | ||
343 | 570 | screen = bamf_legacy_screen_get_default (); | 574 | screen = bamf_legacy_screen_get_default (); |
344 | 571 | matcher = bamf_matcher_get_default (); | 575 | matcher = bamf_matcher_get_default (); |
346 | 572 | const char *exec_prefix = "/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java " \ | 576 | const char *exec_prefix = "/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/javaws " \ |
347 | 573 | "-Xbootclasspath/a:/usr/share/icedtea-web/netx.jar " \ | 577 | "-Xbootclasspath/a:/usr/share/icedtea-web/netx.jar " \ |
348 | 574 | "-Xms8m -Djava.security.manager " \ | 578 | "-Xms8m -Djava.security.manager " \ |
349 | 575 | "-Djava.security.policy=/etc/icedtea-web/javaws.policy " \ | 579 | "-Djava.security.policy=/etc/icedtea-web/javaws.policy " \ |
350 | @@ -577,8 +581,8 @@ | |||
351 | 577 | "-Dicedtea-web.bin.name=javaws " \ | 581 | "-Dicedtea-web.bin.name=javaws " \ |
352 | 578 | "-Dicedtea-web.bin.location=/usr/bin/javaws "\ | 582 | "-Dicedtea-web.bin.location=/usr/bin/javaws "\ |
353 | 579 | "net.sourceforge.jnlp.runtime.Boot"; | 583 | "net.sourceforge.jnlp.runtime.Boot"; |
356 | 580 | const char *class_name = "sun-awt-X11-XFramePeer"; | 584 | const char *class_name = "net-sourceforge-jnlp-runtime-Boot"; |
357 | 581 | const char *class_instance = "net-sourceforge-jnlp-runtime-Boot"; | 585 | const char *class_instance = "sun-awt-X11-XFramePeer"; |
358 | 582 | 586 | ||
359 | 583 | cleanup_matcher_tables (matcher); | 587 | cleanup_matcher_tables (matcher); |
360 | 584 | export_matcher_on_bus (matcher); | 588 | export_matcher_on_bus (matcher); |
361 | @@ -626,6 +630,93 @@ | |||
362 | 626 | } | 630 | } |
363 | 627 | 631 | ||
364 | 628 | static void | 632 | static void |
365 | 633 | test_match_javaws_windows_hint_ignored (void) | ||
366 | 634 | { | ||
367 | 635 | BamfMatcher *matcher; | ||
368 | 636 | BamfLegacyScreen *screen; | ||
369 | 637 | BamfLegacyWindowTest *test_win; | ||
370 | 638 | BamfApplication *app; | ||
371 | 639 | |||
372 | 640 | screen = bamf_legacy_screen_get_default (); | ||
373 | 641 | matcher = bamf_matcher_get_default (); | ||
374 | 642 | const char *exec_prefix = "/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/javaws " \ | ||
375 | 643 | "-Xbootclasspath/a:/usr/share/icedtea-web/netx.jar " \ | ||
376 | 644 | "-Xms8m -Djava.security.manager " \ | ||
377 | 645 | "-Djava.security.policy=/etc/icedtea-web/javaws.policy " \ | ||
378 | 646 | "-classpath /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/rt.jar " \ | ||
379 | 647 | "-Dicedtea-web.bin.name=javaws " \ | ||
380 | 648 | "-Dicedtea-web.bin.location=/usr/bin/javaws "\ | ||
381 | 649 | "net.sourceforge.jnlp.runtime.Boot "; | ||
382 | 650 | const char *class_name = "net-sourceforge-jnlp-runtime-Boot"; | ||
383 | 651 | const char *class_instance = "sun-awt-X11-XFramePeer"; | ||
384 | 652 | |||
385 | 653 | cleanup_matcher_tables (matcher); | ||
386 | 654 | export_matcher_on_bus (matcher); | ||
387 | 655 | |||
388 | 656 | guint xid = g_random_int (); | ||
389 | 657 | guint pid = g_random_int (); | ||
390 | 658 | char *exec = g_strconcat (exec_prefix, "Notepad.jnlp", NULL); | ||
391 | 659 | test_win = bamf_legacy_window_test_new (xid, "Notepad", NULL, exec); | ||
392 | 660 | bamf_legacy_window_test_set_wmclass (test_win, class_name, class_instance); | ||
393 | 661 | test_win->pid = pid; | ||
394 | 662 | _bamf_legacy_screen_open_test_window (screen, test_win); | ||
395 | 663 | g_free (exec); | ||
396 | 664 | |||
397 | 665 | bamf_matcher_register_desktop_file_for_pid (matcher, DATA_DIR"/icedtea-netx-javaws.desktop", pid); | ||
398 | 666 | |||
399 | 667 | char *hint = bamf_legacy_window_get_hint (BAMF_LEGACY_WINDOW (test_win), _NET_WM_DESKTOP_FILE); | ||
400 | 668 | g_assert (hint == NULL); | ||
401 | 669 | |||
402 | 670 | app = bamf_matcher_get_application_by_xid (matcher, xid); | ||
403 | 671 | g_assert (BAMF_IS_APPLICATION (app)); | ||
404 | 672 | g_assert (bamf_application_get_desktop_file (app) == NULL); | ||
405 | 673 | |||
406 | 674 | g_object_unref (matcher); | ||
407 | 675 | g_object_unref (screen); | ||
408 | 676 | } | ||
409 | 677 | |||
410 | 678 | static void | ||
411 | 679 | test_match_javaws_windows_no_desktop_match (void) | ||
412 | 680 | { | ||
413 | 681 | BamfMatcher *matcher; | ||
414 | 682 | BamfLegacyScreen *screen; | ||
415 | 683 | BamfLegacyWindowTest *test_win; | ||
416 | 684 | BamfApplication *app; | ||
417 | 685 | |||
418 | 686 | screen = bamf_legacy_screen_get_default (); | ||
419 | 687 | matcher = bamf_matcher_get_default (); | ||
420 | 688 | const char *exec_prefix = "/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/javaws " \ | ||
421 | 689 | "-Xbootclasspath/a:/usr/share/icedtea-web/netx.jar " \ | ||
422 | 690 | "-Xms8m -Djava.security.manager " \ | ||
423 | 691 | "-Djava.security.policy=/etc/icedtea-web/javaws.policy " \ | ||
424 | 692 | "-classpath /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/rt.jar " \ | ||
425 | 693 | "-Dicedtea-web.bin.name=javaws " \ | ||
426 | 694 | "-Dicedtea-web.bin.location=/usr/bin/javaws "\ | ||
427 | 695 | "net.sourceforge.jnlp.runtime.Boot "; | ||
428 | 696 | const char *class_name = "net-sourceforge-jnlp-runtime-Boot"; | ||
429 | 697 | const char *class_instance = "sun-awt-X11-XFramePeer"; | ||
430 | 698 | |||
431 | 699 | cleanup_matcher_tables (matcher); | ||
432 | 700 | export_matcher_on_bus (matcher); | ||
433 | 701 | |||
434 | 702 | bamf_matcher_load_desktop_file (matcher, DATA_DIR"/icedtea-netx-javaws.desktop"); | ||
435 | 703 | |||
436 | 704 | guint xid = g_random_int (); | ||
437 | 705 | char *exec = g_strconcat (exec_prefix, "Notepad.jnlp", NULL); | ||
438 | 706 | test_win = bamf_legacy_window_test_new (xid, "Notepad", NULL, exec); | ||
439 | 707 | bamf_legacy_window_test_set_wmclass (test_win, class_name, class_instance); | ||
440 | 708 | _bamf_legacy_screen_open_test_window (screen, test_win); | ||
441 | 709 | g_free (exec); | ||
442 | 710 | |||
443 | 711 | app = bamf_matcher_get_application_by_xid (matcher, xid); | ||
444 | 712 | g_assert (BAMF_IS_APPLICATION (app)); | ||
445 | 713 | g_assert (bamf_application_get_desktop_file (app) == NULL); | ||
446 | 714 | |||
447 | 715 | g_object_unref (matcher); | ||
448 | 716 | g_object_unref (screen); | ||
449 | 717 | } | ||
450 | 718 | |||
451 | 719 | static void | ||
452 | 629 | test_trim_exec_string (void) | 720 | test_trim_exec_string (void) |
453 | 630 | { | 721 | { |
454 | 631 | BamfMatcher *matcher; | 722 | BamfMatcher *matcher; |
455 | @@ -692,5 +783,18 @@ | |||
456 | 692 | g_assert_cmpstr (trimmed, ==, "notepad.jnlp"); | 783 | g_assert_cmpstr (trimmed, ==, "notepad.jnlp"); |
457 | 693 | g_free (trimmed); | 784 | g_free (trimmed); |
458 | 694 | 785 | ||
459 | 786 | exec = "/usr/lib/jvm/java-7-oracle/jre/bin/java " \ | ||
460 | 787 | "-classpath /usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar " \ | ||
461 | 788 | "-Djava.security.policy=file:/usr/lib/jvm/java-7-oracle/jre/lib/security/javaws.policy " \ | ||
462 | 789 | "-DtrustProxy=true -Xverify:remote " \ | ||
463 | 790 | "-Djnlpx.home=/usr/lib/jvm/java-7-oracle/jre/bin " \ | ||
464 | 791 | "-Djnlpx.remove=true -Dsun.awt.warmup=true " \ | ||
465 | 792 | "-Xbootclasspath/a:/usr/lib/jvm/java-7-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-7-oracle/jre/lib/plugin.jar " \ | ||
466 | 793 | "-Xms12m -Xmx384m -Djnlpx.jvm=/usr/lib/jvm/java-7-oracle/jre/bin/java " \ | ||
467 | 794 | "com.sun.javaws.Main Notepad.jnlp"; | ||
468 | 795 | trimmed = bamf_matcher_get_trimmed_exec (matcher, exec); | ||
469 | 796 | g_assert_cmpstr (trimmed, ==, "notepad.jnlp"); | ||
470 | 797 | g_free (trimmed); | ||
471 | 798 | |||
472 | 695 | g_object_unref (matcher); | 799 | g_object_unref (matcher); |
473 | 696 | } | 800 | } |
LGTM.