Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(251)

Side by Side Diff: chrome/browser/captive_portal/captive_portal_tab_helper_unittest.cc

Issue 1194383003: Add a flag showing whether the current request was ignored by a handler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix trybot failures (DidFailProvisionalLoad calls in unit tests) Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/captive_portal/captive_portal_tab_helper.h" 5 #include "chrome/browser/captive_portal/captive_portal_tab_helper.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "chrome/browser/captive_portal/captive_portal_service.h" 9 #include "chrome/browser/captive_portal/captive_portal_service.h"
10 #include "chrome/browser/captive_portal/captive_portal_tab_reloader.h" 10 #include "chrome/browser/captive_portal/captive_portal_tab_reloader.h"
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 void SimulateTimeout(const GURL& url, 112 void SimulateTimeout(const GURL& url,
113 content::RenderViewHost* render_view_host) { 113 content::RenderViewHost* render_view_host) {
114 EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsCryptographic())) 114 EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsCryptographic()))
115 .Times(1); 115 .Times(1);
116 tab_helper().DidStartProvisionalLoadForFrame( 116 tab_helper().DidStartProvisionalLoadForFrame(
117 render_view_host->GetMainFrame(), url, false, false); 117 render_view_host->GetMainFrame(), url, false, false);
118 118
119 tab_helper().DidFailProvisionalLoad(render_view_host->GetMainFrame(), 119 tab_helper().DidFailProvisionalLoad(render_view_host->GetMainFrame(),
120 url, 120 url,
121 net::ERR_TIMED_OUT, 121 net::ERR_TIMED_OUT,
122 base::string16()); 122 base::string16(),
123 false);
123 124
124 // Provisional load starts for the error page. 125 // Provisional load starts for the error page.
125 tab_helper().DidStartProvisionalLoadForFrame( 126 tab_helper().DidStartProvisionalLoadForFrame(
126 render_view_host->GetMainFrame(), GURL(kErrorPageUrl), true, false); 127 render_view_host->GetMainFrame(), GURL(kErrorPageUrl), true, false);
127 128
128 EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_TIMED_OUT)).Times(1); 129 EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_TIMED_OUT)).Times(1);
129 tab_helper().DidCommitProvisionalLoadForFrame( 130 tab_helper().DidCommitProvisionalLoadForFrame(
130 render_view_host->GetMainFrame(), 131 render_view_host->GetMainFrame(),
131 GURL(kErrorPageUrl), 132 GURL(kErrorPageUrl),
132 ui::PAGE_TRANSITION_LINK); 133 ui::PAGE_TRANSITION_LINK);
133 } 134 }
134 135
135 // Simulates an abort while requesting |url|. 136 // Simulates an abort while requesting |url|.
136 void SimulateAbort(const GURL& url, 137 void SimulateAbort(const GURL& url,
137 content::RenderViewHost* render_view_host, 138 content::RenderViewHost* render_view_host,
138 NavigationType navigation_type) { 139 NavigationType navigation_type) {
139 EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsCryptographic())) 140 EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsCryptographic()))
140 .Times(1); 141 .Times(1);
141 tab_helper().DidStartProvisionalLoadForFrame( 142 tab_helper().DidStartProvisionalLoadForFrame(
142 render_view_host->GetMainFrame(), url, false, false); 143 render_view_host->GetMainFrame(), url, false, false);
143 144
144 EXPECT_CALL(mock_reloader(), OnAbort()).Times(1); 145 EXPECT_CALL(mock_reloader(), OnAbort()).Times(1);
145 if (navigation_type == kSameProcess) { 146 if (navigation_type == kSameProcess) {
146 tab_helper().DidFailProvisionalLoad(render_view_host->GetMainFrame(), 147 tab_helper().DidFailProvisionalLoad(render_view_host->GetMainFrame(),
147 url, 148 url,
148 net::ERR_ABORTED, 149 net::ERR_ABORTED,
149 base::string16()); 150 base::string16(),
151 false);
150 } else { 152 } else {
151 // For interrupted provisional cross-process navigations, the 153 // For interrupted provisional cross-process navigations, the
152 // RenderViewHost is destroyed without sending a DidFailProvisionalLoad 154 // RenderViewHost is destroyed without sending a DidFailProvisionalLoad
153 // notification. 155 // notification.
154 tab_helper().RenderViewDeleted(render_view_host); 156 tab_helper().RenderViewDeleted(render_view_host);
155 } 157 }
156 158
157 // Make sure that above call resulted in abort, for tests that continue 159 // Make sure that above call resulted in abort, for tests that continue
158 // after the abort. 160 // after the abort.
159 EXPECT_CALL(mock_reloader(), OnAbort()).Times(0); 161 EXPECT_CALL(mock_reloader(), OnAbort()).Times(0);
160 } 162 }
161 163
162 // Simulates an abort while loading an error page. 164 // Simulates an abort while loading an error page.
163 void SimulateAbortTimeout(const GURL& url, 165 void SimulateAbortTimeout(const GURL& url,
164 content::RenderViewHost* render_view_host, 166 content::RenderViewHost* render_view_host,
165 NavigationType navigation_type) { 167 NavigationType navigation_type) {
166 EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsCryptographic())) 168 EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsCryptographic()))
167 .Times(1); 169 .Times(1);
168 tab_helper().DidStartProvisionalLoadForFrame( 170 tab_helper().DidStartProvisionalLoadForFrame(
169 render_view_host->GetMainFrame(), url, false, false); 171 render_view_host->GetMainFrame(), url, false, false);
170 172
171 tab_helper().DidFailProvisionalLoad(render_view_host->GetMainFrame(), 173 tab_helper().DidFailProvisionalLoad(render_view_host->GetMainFrame(),
172 url, 174 url,
173 net::ERR_TIMED_OUT, 175 net::ERR_TIMED_OUT,
174 base::string16()); 176 base::string16(),
177 false);
175 178
176 // Start event for the error page. 179 // Start event for the error page.
177 tab_helper().DidStartProvisionalLoadForFrame( 180 tab_helper().DidStartProvisionalLoadForFrame(
178 render_view_host->GetMainFrame(), url, true, false); 181 render_view_host->GetMainFrame(), url, true, false);
179 182
180 EXPECT_CALL(mock_reloader(), OnAbort()).Times(1); 183 EXPECT_CALL(mock_reloader(), OnAbort()).Times(1);
181 if (navigation_type == kSameProcess) { 184 if (navigation_type == kSameProcess) {
182 tab_helper().DidFailProvisionalLoad(render_view_host->GetMainFrame(), 185 tab_helper().DidFailProvisionalLoad(render_view_host->GetMainFrame(),
183 url, 186 url,
184 net::ERR_ABORTED, 187 net::ERR_ABORTED,
185 base::string16()); 188 base::string16(),
189 false);
186 } else { 190 } else {
187 // For interrupted provisional cross-process navigations, the 191 // For interrupted provisional cross-process navigations, the
188 // RenderViewHost is destroyed without sending a DidFailProvisionalLoad 192 // RenderViewHost is destroyed without sending a DidFailProvisionalLoad
189 // notification. 193 // notification.
190 tab_helper().RenderViewDeleted(render_view_host); 194 tab_helper().RenderViewDeleted(render_view_host);
191 } 195 }
192 196
193 // Make sure that above call resulted in abort, for tests that continue 197 // Make sure that above call resulted in abort, for tests that continue
194 // after the abort. 198 // after the abort.
195 EXPECT_CALL(mock_reloader(), OnAbort()).Times(0); 199 EXPECT_CALL(mock_reloader(), OnAbort()).Times(0);
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 EXPECT_CALL(mock_reloader(), OnAbort()).Times(1); 361 EXPECT_CALL(mock_reloader(), OnAbort()).Times(1);
358 EXPECT_CALL(mock_reloader(), 362 EXPECT_CALL(mock_reloader(),
359 OnLoadStart(cross_process_url.SchemeIsCryptographic())).Times(1); 363 OnLoadStart(cross_process_url.SchemeIsCryptographic())).Times(1);
360 tab_helper().DidStartProvisionalLoadForFrame( 364 tab_helper().DidStartProvisionalLoadForFrame(
361 main_render_frame2(), cross_process_url, false, false); 365 main_render_frame2(), cross_process_url, false, false);
362 366
363 // The cross-process navigation fails. 367 // The cross-process navigation fails.
364 tab_helper().DidFailProvisionalLoad(main_render_frame2(), 368 tab_helper().DidFailProvisionalLoad(main_render_frame2(),
365 cross_process_url, 369 cross_process_url,
366 net::ERR_FAILED, 370 net::ERR_FAILED,
367 base::string16()); 371 base::string16(),
372 false);
368 373
369 // The same-site navigation finally is aborted. 374 // The same-site navigation finally is aborted.
370 tab_helper().DidFailProvisionalLoad(main_render_frame1(), 375 tab_helper().DidFailProvisionalLoad(main_render_frame1(),
371 same_site_url, 376 same_site_url,
372 net::ERR_ABORTED, 377 net::ERR_ABORTED,
373 base::string16()); 378 base::string16(),
379 false);
374 380
375 // The provisional load starts for the error page for the cross-process 381 // The provisional load starts for the error page for the cross-process
376 // navigation. 382 // navigation.
377 tab_helper().DidStartProvisionalLoadForFrame( 383 tab_helper().DidStartProvisionalLoadForFrame(
378 main_render_frame2(), GURL(kErrorPageUrl), true, false); 384 main_render_frame2(), GURL(kErrorPageUrl), true, false);
379 385
380 EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_FAILED)).Times(1); 386 EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_FAILED)).Times(1);
381 tab_helper().DidCommitProvisionalLoadForFrame(main_render_frame2(), 387 tab_helper().DidCommitProvisionalLoadForFrame(main_render_frame2(),
382 GURL(kErrorPageUrl), 388 GURL(kErrorPageUrl),
383 ui::PAGE_TRANSITION_TYPED); 389 ui::PAGE_TRANSITION_TYPED);
(...skipping 17 matching lines...) Expand all
401 EXPECT_CALL(mock_reloader(), OnAbort()).Times(1); 407 EXPECT_CALL(mock_reloader(), OnAbort()).Times(1);
402 EXPECT_CALL(mock_reloader(), 408 EXPECT_CALL(mock_reloader(),
403 OnLoadStart(cross_process_url.SchemeIsCryptographic())).Times(1); 409 OnLoadStart(cross_process_url.SchemeIsCryptographic())).Times(1);
404 tab_helper().DidStartProvisionalLoadForFrame( 410 tab_helper().DidStartProvisionalLoadForFrame(
405 main_render_frame2(), cross_process_url, false, false); 411 main_render_frame2(), cross_process_url, false, false);
406 412
407 // The cross-process navigation fails. 413 // The cross-process navigation fails.
408 tab_helper().DidFailProvisionalLoad(main_render_frame2(), 414 tab_helper().DidFailProvisionalLoad(main_render_frame2(),
409 cross_process_url, 415 cross_process_url,
410 net::ERR_FAILED, 416 net::ERR_FAILED,
411 base::string16()); 417 base::string16(),
418 false);
412 419
413 // The same-site navigation succeeds. 420 // The same-site navigation succeeds.
414 EXPECT_CALL(mock_reloader(), OnAbort()).Times(1); 421 EXPECT_CALL(mock_reloader(), OnAbort()).Times(1);
415 EXPECT_CALL(mock_reloader(), 422 EXPECT_CALL(mock_reloader(),
416 OnLoadStart(same_site_url.SchemeIsCryptographic())).Times(1); 423 OnLoadStart(same_site_url.SchemeIsCryptographic())).Times(1);
417 EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::OK)).Times(1); 424 EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::OK)).Times(1);
418 tab_helper().DidCommitProvisionalLoadForFrame( 425 tab_helper().DidCommitProvisionalLoadForFrame(
419 main_render_frame1(), same_site_url, ui::PAGE_TRANSITION_LINK); 426 main_render_frame1(), same_site_url, ui::PAGE_TRANSITION_LINK);
420 } 427 }
421 428
(...skipping 10 matching lines...) Expand all
432 // Normal load. 439 // Normal load.
433 tab_helper().DidStartProvisionalLoadForFrame(subframe1, url, false, false); 440 tab_helper().DidStartProvisionalLoadForFrame(subframe1, url, false, false);
434 tab_helper().DidCommitProvisionalLoadForFrame( 441 tab_helper().DidCommitProvisionalLoadForFrame(
435 subframe1, url, ui::PAGE_TRANSITION_LINK); 442 subframe1, url, ui::PAGE_TRANSITION_LINK);
436 443
437 // Timeout. 444 // Timeout.
438 content::RenderFrameHost* subframe2 = 445 content::RenderFrameHost* subframe2 =
439 render_frame_host_tester->AppendChild("subframe2"); 446 render_frame_host_tester->AppendChild("subframe2");
440 tab_helper().DidStartProvisionalLoadForFrame(subframe2, url, false, false); 447 tab_helper().DidStartProvisionalLoadForFrame(subframe2, url, false, false);
441 tab_helper().DidFailProvisionalLoad( 448 tab_helper().DidFailProvisionalLoad(
442 subframe2, url, net::ERR_TIMED_OUT, base::string16()); 449 subframe2, url, net::ERR_TIMED_OUT, base::string16(), false);
443 tab_helper().DidStartProvisionalLoadForFrame(subframe2, url, true, false); 450 tab_helper().DidStartProvisionalLoadForFrame(subframe2, url, true, false);
444 tab_helper().DidFailProvisionalLoad( 451 tab_helper().DidFailProvisionalLoad(
445 subframe2, url, net::ERR_ABORTED, base::string16()); 452 subframe2, url, net::ERR_ABORTED, base::string16(), false);
446 453
447 // Abort. 454 // Abort.
448 content::RenderFrameHost* subframe3 = 455 content::RenderFrameHost* subframe3 =
449 render_frame_host_tester->AppendChild("subframe3"); 456 render_frame_host_tester->AppendChild("subframe3");
450 tab_helper().DidStartProvisionalLoadForFrame(subframe3, url, false, false); 457 tab_helper().DidStartProvisionalLoadForFrame(subframe3, url, false, false);
451 tab_helper().DidFailProvisionalLoad( 458 tab_helper().DidFailProvisionalLoad(
452 subframe3, url, net::ERR_ABORTED, base::string16()); 459 subframe3, url, net::ERR_ABORTED, base::string16(), false);
453 } 460 }
454 461
455 // Simulates a subframe erroring out at the same time as a provisional load, 462 // Simulates a subframe erroring out at the same time as a provisional load,
456 // but with a different error code. Make sure the TabHelper sees the correct 463 // but with a different error code. Make sure the TabHelper sees the correct
457 // error. 464 // error.
458 TEST_F(CaptivePortalTabHelperTest, HttpsSubframeParallelError) { 465 TEST_F(CaptivePortalTabHelperTest, HttpsSubframeParallelError) {
459 // URL used by both frames. 466 // URL used by both frames.
460 GURL url = GURL(kHttpsUrl); 467 GURL url = GURL(kHttpsUrl);
461 content::RenderFrameHost* subframe = 468 content::RenderFrameHost* subframe =
462 content::RenderFrameHostTester::For(main_render_frame1()) 469 content::RenderFrameHostTester::For(main_render_frame1())
463 ->AppendChild("subframe"); 470 ->AppendChild("subframe");
464 471
465 // Loads start. 472 // Loads start.
466 EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsCryptographic())) 473 EXPECT_CALL(mock_reloader(), OnLoadStart(url.SchemeIsCryptographic()))
467 .Times(1); 474 .Times(1);
468 tab_helper().DidStartProvisionalLoadForFrame( 475 tab_helper().DidStartProvisionalLoadForFrame(
469 main_render_frame1(), url, false, false); 476 main_render_frame1(), url, false, false);
470 tab_helper().DidStartProvisionalLoadForFrame(subframe, url, false, false); 477 tab_helper().DidStartProvisionalLoadForFrame(subframe, url, false, false);
471 478
472 // Loads return errors. 479 // Loads return errors.
473 tab_helper().DidFailProvisionalLoad( 480 tab_helper().DidFailProvisionalLoad(
474 main_render_frame1(), url, net::ERR_UNEXPECTED, base::string16()); 481 main_render_frame1(), url, net::ERR_UNEXPECTED, base::string16(), false);
475 tab_helper().DidFailProvisionalLoad( 482 tab_helper().DidFailProvisionalLoad(
476 subframe, url, net::ERR_TIMED_OUT, base::string16()); 483 subframe, url, net::ERR_TIMED_OUT, base::string16(), false);
477 484
478 // Provisional load starts for the error pages. 485 // Provisional load starts for the error pages.
479 tab_helper().DidStartProvisionalLoadForFrame( 486 tab_helper().DidStartProvisionalLoadForFrame(
480 main_render_frame1(), url, true, false); 487 main_render_frame1(), url, true, false);
481 tab_helper().DidStartProvisionalLoadForFrame(subframe, url, true, false); 488 tab_helper().DidStartProvisionalLoadForFrame(subframe, url, true, false);
482 489
483 // Error page load finishes. 490 // Error page load finishes.
484 tab_helper().DidCommitProvisionalLoadForFrame( 491 tab_helper().DidCommitProvisionalLoadForFrame(
485 subframe, url, ui::PAGE_TRANSITION_AUTO_SUBFRAME); 492 subframe, url, ui::PAGE_TRANSITION_AUTO_SUBFRAME);
486 EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_UNEXPECTED)).Times(1); 493 EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_UNEXPECTED)).Times(1);
(...skipping 10 matching lines...) Expand all
497 504
498 GURL https_url(kHttpsUrl); 505 GURL https_url(kHttpsUrl);
499 EXPECT_CALL(mock_reloader(), OnRedirect(true)).Times(1); 506 EXPECT_CALL(mock_reloader(), OnRedirect(true)).Times(1);
500 OnRedirect(content::RESOURCE_TYPE_MAIN_FRAME, 507 OnRedirect(content::RESOURCE_TYPE_MAIN_FRAME,
501 https_url, 508 https_url,
502 render_view_host1()->GetProcess()->GetID()); 509 render_view_host1()->GetProcess()->GetID());
503 510
504 tab_helper().DidFailProvisionalLoad(main_render_frame1(), 511 tab_helper().DidFailProvisionalLoad(main_render_frame1(),
505 https_url, 512 https_url,
506 net::ERR_TIMED_OUT, 513 net::ERR_TIMED_OUT,
507 base::string16()); 514 base::string16(),
515 false);
508 516
509 // Provisional load starts for the error page. 517 // Provisional load starts for the error page.
510 tab_helper().DidStartProvisionalLoadForFrame( 518 tab_helper().DidStartProvisionalLoadForFrame(
511 main_render_frame1(), GURL(kErrorPageUrl), true, false); 519 main_render_frame1(), GURL(kErrorPageUrl), true, false);
512 520
513 EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_TIMED_OUT)).Times(1); 521 EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_TIMED_OUT)).Times(1);
514 tab_helper().DidCommitProvisionalLoadForFrame(main_render_frame1(), 522 tab_helper().DidCommitProvisionalLoadForFrame(main_render_frame1(),
515 GURL(kErrorPageUrl), 523 GURL(kErrorPageUrl),
516 ui::PAGE_TRANSITION_LINK); 524 ui::PAGE_TRANSITION_LINK);
517 } 525 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 // Another RenderViewHost sees a redirect. None of the reloader's functions 589 // Another RenderViewHost sees a redirect. None of the reloader's functions
582 // should be called. 590 // should be called.
583 GURL https_url(kHttpsUrl); 591 GURL https_url(kHttpsUrl);
584 OnRedirect(content::RESOURCE_TYPE_MAIN_FRAME, 592 OnRedirect(content::RESOURCE_TYPE_MAIN_FRAME,
585 https_url, 593 https_url,
586 render_view_host2()->GetProcess()->GetID()); 594 render_view_host2()->GetProcess()->GetID());
587 595
588 tab_helper().DidFailProvisionalLoad(main_render_frame1(), 596 tab_helper().DidFailProvisionalLoad(main_render_frame1(),
589 https_url, 597 https_url,
590 net::ERR_TIMED_OUT, 598 net::ERR_TIMED_OUT,
591 base::string16()); 599 base::string16(),
600 false);
592 601
593 // Provisional load starts for the error page. 602 // Provisional load starts for the error page.
594 tab_helper().DidStartProvisionalLoadForFrame( 603 tab_helper().DidStartProvisionalLoadForFrame(
595 main_render_frame1(), GURL(kErrorPageUrl), true, false); 604 main_render_frame1(), GURL(kErrorPageUrl), true, false);
596 605
597 EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_TIMED_OUT)).Times(1); 606 EXPECT_CALL(mock_reloader(), OnLoadCommitted(net::ERR_TIMED_OUT)).Times(1);
598 tab_helper().DidCommitProvisionalLoadForFrame(main_render_frame1(), 607 tab_helper().DidCommitProvisionalLoadForFrame(main_render_frame1(),
599 GURL(kErrorPageUrl), 608 GURL(kErrorPageUrl),
600 ui::PAGE_TRANSITION_LINK); 609 ui::PAGE_TRANSITION_LINK);
601 } 610 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 EXPECT_FALSE(tab_helper().IsLoginTab()); 657 EXPECT_FALSE(tab_helper().IsLoginTab());
649 658
650 ObservePortalResult(captive_portal::RESULT_BEHIND_CAPTIVE_PORTAL, 659 ObservePortalResult(captive_portal::RESULT_BEHIND_CAPTIVE_PORTAL,
651 captive_portal::RESULT_NO_RESPONSE); 660 captive_portal::RESULT_NO_RESPONSE);
652 EXPECT_FALSE(tab_helper().IsLoginTab()); 661 EXPECT_FALSE(tab_helper().IsLoginTab());
653 662
654 ObservePortalResult(captive_portal::RESULT_NO_RESPONSE, 663 ObservePortalResult(captive_portal::RESULT_NO_RESPONSE,
655 captive_portal::RESULT_INTERNET_CONNECTED); 664 captive_portal::RESULT_INTERNET_CONNECTED);
656 EXPECT_FALSE(tab_helper().IsLoginTab()); 665 EXPECT_FALSE(tab_helper().IsLoginTab());
657 } 666 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698