| 
									
										
										
										
											2024-10-25 10:26:01 -04:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2024, Tim Flynn <trflynn89@ladybird.org> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <LibJS/Runtime/Realm.h>
 | 
					
						
							|  |  |  | #include <LibWeb/HTML/Navigable.h>
 | 
					
						
							|  |  |  | #include <LibWeb/HTML/NavigationObserver.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Web::HTML { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  | GC_DEFINE_ALLOCATOR(NavigationObserver); | 
					
						
							| 
									
										
										
										
											2024-10-25 10:26:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | NavigationObserver::NavigationObserver(JS::Realm& realm, Navigable& navigable) | 
					
						
							|  |  |  |     : Bindings::PlatformObject(realm) | 
					
						
							|  |  |  |     , m_navigable(navigable) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_navigable->register_navigation_observer({}, *this); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NavigationObserver::visit_edges(Cell::Visitor& visitor) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Base::visit_edges(visitor); | 
					
						
							|  |  |  |     visitor.visit(m_navigable); | 
					
						
							|  |  |  |     visitor.visit(m_navigation_complete); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NavigationObserver::finalize() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Base::finalize(); | 
					
						
							|  |  |  |     m_navigable->unregister_navigation_observer({}, *this); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NavigationObserver::set_navigation_complete(Function<void()> callback) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (callback) | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |         m_navigation_complete = GC::create_function(vm().heap(), move(callback)); | 
					
						
							| 
									
										
										
										
											2024-10-25 10:26:01 -04:00
										 |  |  |     else | 
					
						
							|  |  |  |         m_navigation_complete = nullptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |