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

Side by Side Diff: content/browser/renderer_host/render_process_host_impl.cc

Issue 22944002: Implementation of the "Redirect URLs to Packaged Apps" feature. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 1) Fixed broken redirection for in-page WebKit-initiated navigations. All redirections work now. 2)… Created 7 years, 4 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 | Annotate | Revision Log
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 // Represents the browser side of the browser <--> renderer communication 5 // Represents the browser side of the browser <--> renderer communication
6 // channel. There will be one RenderProcessHost per renderer process. 6 // channel. There will be one RenderProcessHost per renderer process.
7 7
8 #include "content/browser/renderer_host/render_process_host_impl.h" 8 #include "content/browser/renderer_host/render_process_host_impl.h"
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 #include "content/browser/in_process_webkit/indexed_db_dispatcher_host.h" 59 #include "content/browser/in_process_webkit/indexed_db_dispatcher_host.h"
60 #include "content/browser/indexed_db/indexed_db_context_impl.h" 60 #include "content/browser/indexed_db/indexed_db_context_impl.h"
61 #include "content/browser/loader/resource_message_filter.h" 61 #include "content/browser/loader/resource_message_filter.h"
62 #include "content/browser/loader/resource_scheduler_filter.h" 62 #include "content/browser/loader/resource_scheduler_filter.h"
63 #include "content/browser/media/media_internals.h" 63 #include "content/browser/media/media_internals.h"
64 #include "content/browser/mime_registry_message_filter.h" 64 #include "content/browser/mime_registry_message_filter.h"
65 #include "content/browser/plugin_service_impl.h" 65 #include "content/browser/plugin_service_impl.h"
66 #include "content/browser/profiler_message_filter.h" 66 #include "content/browser/profiler_message_filter.h"
67 #include "content/browser/renderer_host/clipboard_message_filter.h" 67 #include "content/browser/renderer_host/clipboard_message_filter.h"
68 #include "content/browser/renderer_host/database_message_filter.h" 68 #include "content/browser/renderer_host/database_message_filter.h"
69 #include "content/browser/renderer_host/extension_system_message_filter.h"
69 #include "content/browser/renderer_host/file_utilities_message_filter.h" 70 #include "content/browser/renderer_host/file_utilities_message_filter.h"
70 #include "content/browser/renderer_host/gamepad_browser_message_filter.h" 71 #include "content/browser/renderer_host/gamepad_browser_message_filter.h"
71 #include "content/browser/renderer_host/gpu_message_filter.h" 72 #include "content/browser/renderer_host/gpu_message_filter.h"
72 #include "content/browser/renderer_host/media/audio_input_renderer_host.h" 73 #include "content/browser/renderer_host/media/audio_input_renderer_host.h"
73 #include "content/browser/renderer_host/media/audio_mirroring_manager.h" 74 #include "content/browser/renderer_host/media/audio_mirroring_manager.h"
74 #include "content/browser/renderer_host/media/audio_renderer_host.h" 75 #include "content/browser/renderer_host/media/audio_renderer_host.h"
75 #include "content/browser/renderer_host/media/media_stream_dispatcher_host.h" 76 #include "content/browser/renderer_host/media/media_stream_dispatcher_host.h"
76 #include "content/browser/renderer_host/media/peer_connection_tracker_host.h" 77 #include "content/browser/renderer_host/media/peer_connection_tracker_host.h"
77 #include "content/browser/renderer_host/media/video_capture_host.h" 78 #include "content/browser/renderer_host/media/video_capture_host.h"
78 #include "content/browser/renderer_host/p2p/socket_dispatcher_host.h" 79 #include "content/browser/renderer_host/p2p/socket_dispatcher_host.h"
(...skipping 22 matching lines...) Expand all
101 #include "content/port/browser/render_widget_host_view_frame_subscriber.h" 102 #include "content/port/browser/render_widget_host_view_frame_subscriber.h"
102 #include "content/public/browser/browser_context.h" 103 #include "content/public/browser/browser_context.h"
103 #include "content/public/browser/content_browser_client.h" 104 #include "content/public/browser/content_browser_client.h"
104 #include "content/public/browser/notification_service.h" 105 #include "content/public/browser/notification_service.h"
105 #include "content/public/browser/notification_types.h" 106 #include "content/public/browser/notification_types.h"
106 #include "content/public/browser/render_process_host_factory.h" 107 #include "content/public/browser/render_process_host_factory.h"
107 #include "content/public/browser/resource_context.h" 108 #include "content/public/browser/resource_context.h"
108 #include "content/public/browser/user_metrics.h" 109 #include "content/public/browser/user_metrics.h"
109 #include "content/public/common/content_constants.h" 110 #include "content/public/common/content_constants.h"
110 #include "content/public/common/content_switches.h" 111 #include "content/public/common/content_switches.h"
112 #include "content/public/common/extension_system_messages.h"
111 #include "content/public/common/process_type.h" 113 #include "content/public/common/process_type.h"
112 #include "content/public/common/result_codes.h" 114 #include "content/public/common/result_codes.h"
113 #include "content/public/common/url_constants.h" 115 #include "content/public/common/url_constants.h"
114 #include "content/renderer/render_process_impl.h" 116 #include "content/renderer/render_process_impl.h"
115 #include "content/renderer/render_thread_impl.h" 117 #include "content/renderer/render_thread_impl.h"
116 #include "ipc/ipc_channel.h" 118 #include "ipc/ipc_channel.h"
117 #include "ipc/ipc_logging.h" 119 #include "ipc/ipc_logging.h"
118 #include "ipc/ipc_platform_file.h" 120 #include "ipc/ipc_platform_file.h"
119 #include "ipc/ipc_switches.h" 121 #include "ipc/ipc_switches.h"
120 #include "ipc/ipc_sync_channel.h" 122 #include "ipc/ipc_sync_channel.h"
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 536
535 fast_shutdown_started_ = false; 537 fast_shutdown_started_ = false;
536 } 538 }
537 539
538 is_initialized_ = true; 540 is_initialized_ = true;
539 return true; 541 return true;
540 } 542 }
541 543
542 void RenderProcessHostImpl::CreateMessageFilters() { 544 void RenderProcessHostImpl::CreateMessageFilters() {
543 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 545 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
546
547 // ResourceSchedulerFilter
Charlie Reis 2013/08/26 22:17:52 My sense is that these comments aren't really addi
sergeygs 2013/08/29 08:24:42 I'd say that it was rather hard to quickly enumera
544 channel_->AddFilter(new ResourceSchedulerFilter(GetID())); 548 channel_->AddFilter(new ResourceSchedulerFilter(GetID()));
545 MediaInternals* media_internals = MediaInternals::GetInstance();; 549
550 MediaInternals* media_internals = MediaInternals::GetInstance();
551
546 // Add BrowserPluginMessageFilter to ensure it gets the first stab at messages 552 // Add BrowserPluginMessageFilter to ensure it gets the first stab at messages
547 // from guests. 553 // from guests.
548 if (supports_browser_plugin_) { 554 if (supports_browser_plugin_) {
549 scoped_refptr<BrowserPluginMessageFilter> bp_message_filter( 555 scoped_refptr<BrowserPluginMessageFilter> bp_message_filter(
550 new BrowserPluginMessageFilter(GetID(), IsGuest())); 556 new BrowserPluginMessageFilter(GetID(), IsGuest()));
551 channel_->AddFilter(bp_message_filter); 557 channel_->AddFilter(bp_message_filter);
552 } 558 }
553 559
560 // RenderMessageFilter
554 scoped_refptr<RenderMessageFilter> render_message_filter( 561 scoped_refptr<RenderMessageFilter> render_message_filter(
555 new RenderMessageFilter( 562 new RenderMessageFilter(
556 GetID(), 563 GetID(),
557 #if defined(ENABLE_PLUGINS) 564 #if defined(ENABLE_PLUGINS)
558 PluginServiceImpl::GetInstance(), 565 PluginServiceImpl::GetInstance(),
559 #else 566 #else
560 NULL, 567 NULL,
561 #endif 568 #endif
562 GetBrowserContext(), 569 GetBrowserContext(),
563 GetBrowserContext()->GetRequestContextForRenderProcess(GetID()), 570 GetBrowserContext()->GetRequestContextForRenderProcess(GetID()),
564 widget_helper_, 571 widget_helper_,
565 media_internals, 572 media_internals,
566 storage_partition_impl_->GetDOMStorageContext())); 573 storage_partition_impl_->GetDOMStorageContext()));
567 channel_->AddFilter(render_message_filter); 574 channel_->AddFilter(render_message_filter);
575
568 BrowserContext* browser_context = GetBrowserContext(); 576 BrowserContext* browser_context = GetBrowserContext();
577
578 // ResourceMessageFilter
569 ResourceContext* resource_context = browser_context->GetResourceContext(); 579 ResourceContext* resource_context = browser_context->GetResourceContext();
570
571 ResourceMessageFilter* resource_message_filter = new ResourceMessageFilter( 580 ResourceMessageFilter* resource_message_filter = new ResourceMessageFilter(
572 GetID(), PROCESS_TYPE_RENDERER, resource_context, 581 GetID(), PROCESS_TYPE_RENDERER, resource_context,
573 storage_partition_impl_->GetAppCacheService(), 582 storage_partition_impl_->GetAppCacheService(),
574 ChromeBlobStorageContext::GetFor(browser_context), 583 ChromeBlobStorageContext::GetFor(browser_context),
575 storage_partition_impl_->GetFileSystemContext(), 584 storage_partition_impl_->GetFileSystemContext(),
576 new RendererURLRequestContextSelector(browser_context, GetID())); 585 new RendererURLRequestContextSelector(browser_context, GetID()));
586 channel_->AddFilter(resource_message_filter);
577 587
578 channel_->AddFilter(resource_message_filter); 588 // AudioInputRendererHost and AudioRendererHost
579 media::AudioManager* audio_manager = BrowserMainLoop::GetAudioManager(); 589 media::AudioManager* audio_manager = BrowserMainLoop::GetAudioManager();
580 MediaStreamManager* media_stream_manager = 590 MediaStreamManager* media_stream_manager =
581 BrowserMainLoop::GetMediaStreamManager(); 591 BrowserMainLoop::GetMediaStreamManager();
582 channel_->AddFilter(new AudioInputRendererHost(audio_manager, 592 channel_->AddFilter(new AudioInputRendererHost(audio_manager,
583 media_stream_manager)); 593 media_stream_manager));
584 channel_->AddFilter(new AudioRendererHost( 594 channel_->AddFilter(new AudioRendererHost(
585 GetID(), audio_manager, BrowserMainLoop::GetAudioMirroringManager(), 595 GetID(), audio_manager, BrowserMainLoop::GetAudioMirroringManager(),
586 media_internals)); 596 media_internals));
597
598 // VideoCaptureHost
587 channel_->AddFilter(new VideoCaptureHost()); 599 channel_->AddFilter(new VideoCaptureHost());
600
601 // AppCacheDispatcherHost
588 channel_->AddFilter(new AppCacheDispatcherHost( 602 channel_->AddFilter(new AppCacheDispatcherHost(
589 storage_partition_impl_->GetAppCacheService(), 603 storage_partition_impl_->GetAppCacheService(),
590 GetID())); 604 GetID()));
605
606 // ClipboardMessageFilter
591 channel_->AddFilter(new ClipboardMessageFilter(browser_context)); 607 channel_->AddFilter(new ClipboardMessageFilter(browser_context));
608
609 // DOMStorageMessageFilter
592 channel_->AddFilter( 610 channel_->AddFilter(
593 new DOMStorageMessageFilter( 611 new DOMStorageMessageFilter(
594 GetID(), 612 GetID(),
595 storage_partition_impl_->GetDOMStorageContext())); 613 storage_partition_impl_->GetDOMStorageContext()));
614
615 // IndexedDBDispatcherHost
596 channel_->AddFilter( 616 channel_->AddFilter(
597 new IndexedDBDispatcherHost( 617 new IndexedDBDispatcherHost(
598 GetID(), 618 GetID(),
599 storage_partition_impl_->GetIndexedDBContext())); 619 storage_partition_impl_->GetIndexedDBContext()));
620
621 // GeolocationDispatcherHost
600 if (IsGuest()) { 622 if (IsGuest()) {
601 if (!g_browser_plugin_geolocation_context.Get()) { 623 if (!g_browser_plugin_geolocation_context.Get()) {
602 g_browser_plugin_geolocation_context.Get() = 624 g_browser_plugin_geolocation_context.Get() =
603 new BrowserPluginGeolocationPermissionContext(); 625 new BrowserPluginGeolocationPermissionContext();
604 } 626 }
605 channel_->AddFilter(GeolocationDispatcherHost::New( 627 channel_->AddFilter(GeolocationDispatcherHost::New(
606 GetID(), g_browser_plugin_geolocation_context.Get())); 628 GetID(), g_browser_plugin_geolocation_context.Get()));
607 } else { 629 } else {
608 channel_->AddFilter(GeolocationDispatcherHost::New( 630 channel_->AddFilter(GeolocationDispatcherHost::New(
609 GetID(), browser_context->GetGeolocationPermissionContext())); 631 GetID(), browser_context->GetGeolocationPermissionContext()));
610 } 632 }
633
634 // GpuMessageFilter
611 gpu_message_filter_ = new GpuMessageFilter(GetID(), widget_helper_.get()); 635 gpu_message_filter_ = new GpuMessageFilter(GetID(), widget_helper_.get());
612 channel_->AddFilter(gpu_message_filter_); 636 channel_->AddFilter(gpu_message_filter_);
637
613 #if defined(ENABLE_WEBRTC) 638 #if defined(ENABLE_WEBRTC)
639 // PeerConnectionTrackerHost
614 peer_connection_tracker_host_ = new PeerConnectionTrackerHost(GetID()); 640 peer_connection_tracker_host_ = new PeerConnectionTrackerHost(GetID());
615 channel_->AddFilter(peer_connection_tracker_host_); 641 channel_->AddFilter(peer_connection_tracker_host_);
642
643 // MediaStreamDispatcherHost
616 channel_->AddFilter(new MediaStreamDispatcherHost(GetID())); 644 channel_->AddFilter(new MediaStreamDispatcherHost(GetID()));
617 #endif 645 #endif
618 #if defined(ENABLE_PLUGINS) 646 #if defined(ENABLE_PLUGINS)
647 // PepperMessageFilter
619 channel_->AddFilter(new PepperMessageFilter(GetID(), browser_context)); 648 channel_->AddFilter(new PepperMessageFilter(GetID(), browser_context));
620 #endif 649 #endif
621 #if defined(ENABLE_INPUT_SPEECH) 650 #if defined(ENABLE_INPUT_SPEECH)
651 // InputTagSpeechDispatcherHost and SpeechRecognitionDispatcherHost
622 channel_->AddFilter(new InputTagSpeechDispatcherHost( 652 channel_->AddFilter(new InputTagSpeechDispatcherHost(
623 IsGuest(), GetID(), storage_partition_impl_->GetURLRequestContext(), 653 IsGuest(), GetID(), storage_partition_impl_->GetURLRequestContext(),
624 browser_context->GetSpeechRecognitionPreferences())); 654 browser_context->GetSpeechRecognitionPreferences()));
625 channel_->AddFilter(new SpeechRecognitionDispatcherHost( 655 channel_->AddFilter(new SpeechRecognitionDispatcherHost(
626 GetID(), storage_partition_impl_->GetURLRequestContext(), 656 GetID(), storage_partition_impl_->GetURLRequestContext(),
627 browser_context->GetSpeechRecognitionPreferences())); 657 browser_context->GetSpeechRecognitionPreferences()));
628 #endif 658 #endif
659
660 // FileAPIMessageFilter
629 channel_->AddFilter(new FileAPIMessageFilter( 661 channel_->AddFilter(new FileAPIMessageFilter(
630 GetID(), 662 GetID(),
631 storage_partition_impl_->GetURLRequestContext(), 663 storage_partition_impl_->GetURLRequestContext(),
632 storage_partition_impl_->GetFileSystemContext(), 664 storage_partition_impl_->GetFileSystemContext(),
633 ChromeBlobStorageContext::GetFor(browser_context))); 665 ChromeBlobStorageContext::GetFor(browser_context)));
666
667 // OrientationMessageFilter
634 channel_->AddFilter(new OrientationMessageFilter()); 668 channel_->AddFilter(new OrientationMessageFilter());
669
670 // FileUtilitiesMessageFilter
635 channel_->AddFilter(new FileUtilitiesMessageFilter(GetID())); 671 channel_->AddFilter(new FileUtilitiesMessageFilter(GetID()));
672
673 // MimeRegistryMessageFilter
636 channel_->AddFilter(new MimeRegistryMessageFilter()); 674 channel_->AddFilter(new MimeRegistryMessageFilter());
675
676 // DatabaseMessageFilter
637 channel_->AddFilter(new DatabaseMessageFilter( 677 channel_->AddFilter(new DatabaseMessageFilter(
638 storage_partition_impl_->GetDatabaseTracker())); 678 storage_partition_impl_->GetDatabaseTracker()));
679
639 #if defined(OS_MACOSX) 680 #if defined(OS_MACOSX)
681 // TextInputClientMessageFilter
640 channel_->AddFilter(new TextInputClientMessageFilter(GetID())); 682 channel_->AddFilter(new TextInputClientMessageFilter(GetID()));
641 #elif defined(OS_WIN) 683 #elif defined(OS_WIN)
684 // FontCacheDispatcher
642 channel_->AddFilter(new FontCacheDispatcher()); 685 channel_->AddFilter(new FontCacheDispatcher());
643 #endif 686 #endif
644 687
688 // SocketStreamDispatcherHost
645 SocketStreamDispatcherHost* socket_stream_dispatcher_host = 689 SocketStreamDispatcherHost* socket_stream_dispatcher_host =
646 new SocketStreamDispatcherHost(GetID(), 690 new SocketStreamDispatcherHost(GetID(),
647 new RendererURLRequestContextSelector(browser_context, GetID()), 691 new RendererURLRequestContextSelector(browser_context, GetID()),
648 resource_context); 692 resource_context);
649 channel_->AddFilter(socket_stream_dispatcher_host); 693 channel_->AddFilter(socket_stream_dispatcher_host);
650 694
695 // WorkerMessageFilter
651 channel_->AddFilter( 696 channel_->AddFilter(
652 new WorkerMessageFilter( 697 new WorkerMessageFilter(
653 GetID(), 698 GetID(),
654 resource_context, 699 resource_context,
655 WorkerStoragePartition( 700 WorkerStoragePartition(
656 storage_partition_impl_->GetURLRequestContext(), 701 storage_partition_impl_->GetURLRequestContext(),
657 storage_partition_impl_->GetMediaURLRequestContext(), 702 storage_partition_impl_->GetMediaURLRequestContext(),
658 storage_partition_impl_->GetAppCacheService(), 703 storage_partition_impl_->GetAppCacheService(),
659 storage_partition_impl_->GetQuotaManager(), 704 storage_partition_impl_->GetQuotaManager(),
660 storage_partition_impl_->GetFileSystemContext(), 705 storage_partition_impl_->GetFileSystemContext(),
661 storage_partition_impl_->GetDatabaseTracker(), 706 storage_partition_impl_->GetDatabaseTracker(),
662 storage_partition_impl_->GetIndexedDBContext()), 707 storage_partition_impl_->GetIndexedDBContext()),
663 base::Bind(&RenderWidgetHelper::GetNextRoutingID, 708 base::Bind(&RenderWidgetHelper::GetNextRoutingID,
664 base::Unretained(widget_helper_.get())))); 709 base::Unretained(widget_helper_.get()))));
665 710
666 #if defined(ENABLE_WEBRTC) 711 #if defined(ENABLE_WEBRTC)
667 channel_->AddFilter(new P2PSocketDispatcherHost(resource_context)); 712 channel_->AddFilter(new P2PSocketDispatcherHost(resource_context));
668 #endif 713 #endif
669 714
715 // TraceMessageFilter
670 channel_->AddFilter(new TraceMessageFilter()); 716 channel_->AddFilter(new TraceMessageFilter());
717
718 // ResolveProxyMsgHelper
671 channel_->AddFilter(new ResolveProxyMsgHelper( 719 channel_->AddFilter(new ResolveProxyMsgHelper(
672 browser_context->GetRequestContextForRenderProcess(GetID()))); 720 browser_context->GetRequestContextForRenderProcess(GetID())));
721
722 // QuotaDispatcherHost
673 channel_->AddFilter(new QuotaDispatcherHost( 723 channel_->AddFilter(new QuotaDispatcherHost(
674 GetID(), 724 GetID(),
675 storage_partition_impl_->GetQuotaManager(), 725 storage_partition_impl_->GetQuotaManager(),
676 GetContentClient()->browser()->CreateQuotaPermissionContext())); 726 GetContentClient()->browser()->CreateQuotaPermissionContext()));
727
728 // QuotaDispatcherHost
677 channel_->AddFilter(new GamepadBrowserMessageFilter()); 729 channel_->AddFilter(new GamepadBrowserMessageFilter());
730
731 // ProfilerMessageFilter
678 channel_->AddFilter(new ProfilerMessageFilter(PROCESS_TYPE_RENDERER)); 732 channel_->AddFilter(new ProfilerMessageFilter(PROCESS_TYPE_RENDERER));
733
734 // HistogramMessageFilter
679 channel_->AddFilter(new HistogramMessageFilter()); 735 channel_->AddFilter(new HistogramMessageFilter());
736
737 // HyphenatorMessageFilter
680 channel_->AddFilter(new HyphenatorMessageFilter(this)); 738 channel_->AddFilter(new HyphenatorMessageFilter(this));
739
681 #if defined(ENABLE_WEBRTC) 740 #if defined(ENABLE_WEBRTC)
741 // WebRtcLoggingHandlerHost
682 channel_->AddFilter(new WebRtcLoggingHandlerHost()); 742 channel_->AddFilter(new WebRtcLoggingHandlerHost());
683 #endif 743 #endif
744
745 channel_->AddFilter(new ExtensionSystemMessageFilter(this));
684 } 746 }
685 747
686 int RenderProcessHostImpl::GetNextRoutingID() { 748 int RenderProcessHostImpl::GetNextRoutingID() {
687 return widget_helper_->GetNextRoutingID(); 749 return widget_helper_->GetNextRoutingID();
688 } 750 }
689 751
690 void RenderProcessHostImpl::SimulateSwapOutACK( 752 void RenderProcessHostImpl::SimulateSwapOutACK(
691 const ViewMsg_SwapOut_Params& params) { 753 const ViewMsg_SwapOut_Params& params) {
692 widget_helper_->SimulateSwapOutACK(params); 754 widget_helper_->SimulateSwapOutACK(params);
693 } 755 }
(...skipping 1033 matching lines...) Expand 10 before | Expand all | Expand 10 after
1727 TRACE_EVENT0("renderer_host", 1789 TRACE_EVENT0("renderer_host",
1728 "RenderWidgetHostImpl::OnCompositorSurfaceBuffersSwappedNoHost"); 1790 "RenderWidgetHostImpl::OnCompositorSurfaceBuffersSwappedNoHost");
1729 AcceleratedSurfaceMsg_BufferPresented_Params ack_params; 1791 AcceleratedSurfaceMsg_BufferPresented_Params ack_params;
1730 ack_params.sync_point = 0; 1792 ack_params.sync_point = 0;
1731 RenderWidgetHostImpl::AcknowledgeBufferPresent(route_id, 1793 RenderWidgetHostImpl::AcknowledgeBufferPresent(route_id,
1732 gpu_process_host_id, 1794 gpu_process_host_id,
1733 ack_params); 1795 ack_params);
1734 } 1796 }
1735 1797
1736 } // namespace content 1798 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698