Skip to content

Commit eff3e01

Browse files
committed
make resource_thread talk to sw-manager
1 parent 1e6293e commit eff3e01

9 files changed

Lines changed: 124 additions & 108 deletions

File tree

components/constellation/constellation.rs

Lines changed: 3 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use net_traits::bluetooth_thread::BluetoothMethodMsg;
3535
use net_traits::filemanager_thread::FileManagerThreadMsg;
3636
use net_traits::image_cache_thread::ImageCacheThread;
3737
use net_traits::storage_thread::StorageThreadMsg;
38-
use net_traits::{self, ResourceThreads, IpcSend, CustomResponseMediator, CoreResourceMsg};
38+
use net_traits::{self, ResourceThreads, IpcSend};
3939
use offscreen_gl_context::{GLContextAttributes, GLLimits};
4040
use pipeline::{ChildProcess, InitialPipelineState, Pipeline};
4141
use profile_traits::mem;
@@ -98,9 +98,6 @@ pub struct Constellation<Message, LTF, STF> {
9898
/// Receives messages from scripts.
9999
script_receiver: Receiver<FromScriptMsg>,
100100

101-
/// Receive messages from resource thread
102-
resource_receiver: Receiver<CustomResponseMediator>,
103-
104101
/// Receives messages from the compositor
105102
compositor_receiver: Receiver<FromCompositorMsg>,
106103

@@ -440,13 +437,6 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
440437
let (ipc_panic_sender, ipc_panic_receiver) = ipc::channel().expect("ipc channel failure");
441438
let panic_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_panic_receiver);
442439

443-
let (resource_ipc_sender, resource_ipc_receiver) = ipc::channel().expect("ipc channel failure");
444-
let resource_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(resource_ipc_receiver);
445-
446-
state.public_resource_threads.sender()
447-
.send(CoreResourceMsg::NetworkMediator(resource_ipc_sender))
448-
.expect("network sender sending failure");
449-
450440
let swmanager_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(swmanager_receiver);
451441

452442
let mut constellation: Constellation<Message, LTF, STF> = Constellation {
@@ -467,7 +457,6 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
467457
swmanager_chan: None,
468458
swmanager_receiver: swmanager_receiver,
469459
swmanager_sender: sw_mgr_clone,
470-
resource_receiver: resource_receiver,
471460
pipelines: HashMap::new(),
472461
frames: HashMap::new(),
473462
subpage_map: HashMap::new(),
@@ -638,8 +627,7 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
638627
Compositor(FromCompositorMsg),
639628
Layout(FromLayoutMsg),
640629
Panic(PanicMsg),
641-
FromSWManager(SWManagerMsg),
642-
FromResource(CustomResponseMediator),
630+
FromSWManager(SWManagerMsg)
643631
}
644632

645633
// Get one incoming request.
@@ -659,7 +647,6 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
659647
let receiver_from_layout = &self.layout_receiver;
660648
let receiver_from_panic = &self.panic_receiver;
661649
let receiver_from_swmanager = &self.swmanager_receiver;
662-
let receiver_from_resource = &self.resource_receiver;
663650
select! {
664651
msg = receiver_from_script.recv() =>
665652
Request::Script(msg.expect("Unexpected script channel panic in constellation")),
@@ -670,9 +657,7 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
670657
msg = receiver_from_panic.recv() =>
671658
Request::Panic(msg.expect("Unexpected panic channel panic in constellation")),
672659
msg = receiver_from_swmanager.recv() =>
673-
Request::FromSWManager(msg.expect("Unexpected panic channel panic in constellation")),
674-
msg = receiver_from_resource.recv() =>
675-
Request::FromResource(msg.expect("Unexpected panic channel panic in constellation"))
660+
Request::FromSWManager(msg.expect("Unexpected panic channel panic in constellation"))
676661
}
677662
};
678663

@@ -692,9 +677,6 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
692677
Request::FromSWManager(message) => {
693678
self.handle_request_from_swmanager(message);
694679
}
695-
Request::FromResource(message) => {
696-
self.handle_request_from_resource(message);
697-
}
698680
}
699681
}
700682

@@ -707,14 +689,6 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
707689
}
708690
}
709691

710-
fn handle_request_from_resource(&self, mediator: CustomResponseMediator) {
711-
if let Some(ref mgr) = self.swmanager_chan {
712-
let _ = mgr.send(ServiceWorkerMsg::ActivateWorker(mediator));
713-
} else {
714-
warn!("activation request to service worker manager failed");
715-
}
716-
}
717-
718692
fn handle_request_from_compositor(&mut self, message: FromCompositorMsg) {
719693
match message {
720694
FromCompositorMsg::Exit => {
@@ -985,10 +959,6 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
985959
FromScriptMsg::GetScrollOffset(pid, lid, send) => {
986960
self.compositor_proxy.send(ToCompositorMsg::GetScrollOffset(pid, lid, send));
987961
}
988-
FromScriptMsg::NetworkRequest(mediator) => {
989-
debug!("activation request for service worker received");
990-
self.handle_activate_worker(mediator);
991-
}
992962
FromScriptMsg::RegisterServiceWorker(scope_things, scope) => {
993963
debug!("constellation got store registration scope message");
994964
self.handle_register_serviceworker(scope_things, scope);
@@ -1028,14 +998,6 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
1028998
}
1029999
}
10301000

1031-
fn handle_activate_worker(&self, mediator: CustomResponseMediator) {
1032-
if let Some(ref mgr) = self.swmanager_chan {
1033-
let _ = mgr.send(ServiceWorkerMsg::ActivateWorker(mediator));
1034-
} else {
1035-
warn!("activation request to service worker manager failed");
1036-
}
1037-
}
1038-
10391001
fn handle_exit(&mut self) {
10401002
// TODO: add a timer, which forces shutdown if threads aren't responsive.
10411003
if self.shutting_down { return; }

components/constellation/pipeline.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ use layers::geometry::DevicePixel;
1919
use layout_traits::LayoutThreadFactory;
2020
use msg::constellation_msg::{FrameId, FrameType, LoadData, PanicMsg, PipelineId};
2121
use msg::constellation_msg::{PipelineNamespaceId, SubpageId};
22-
use net_traits::ResourceThreads;
2322
use net_traits::bluetooth_thread::BluetoothMethodMsg;
2423
use net_traits::image_cache_thread::ImageCacheThread;
24+
use net_traits::{ResourceThreads, IpcSend};
2525
use profile_traits::mem as profile_mem;
2626
use profile_traits::time;
2727
use script_traits::{ConstellationControlMsg, InitialScriptState, MozBrowserEvent};
28-
use script_traits::{LayoutControlMsg, LayoutMsg, NewLayoutInfo, ScriptMsg, SWManagerMsg};
28+
use script_traits::{LayoutControlMsg, LayoutMsg, NewLayoutInfo, ScriptMsg, SWManagerMsg, SWManagerSenders};
2929
use script_traits::{ScriptThreadFactory, TimerEventRequest, WindowSizeData};
3030
use std::collections::HashMap;
3131
use std::io::Error as IOError;
@@ -551,7 +551,10 @@ impl UnprivilegedPipelineContent {
551551
self.prefs.clone()
552552
}
553553

554-
pub fn swmanager_chan(&self) -> IpcSender<SWManagerMsg> {
555-
self.swmanager_thread.clone()
554+
pub fn swmanager_senders(&self) -> SWManagerSenders {
555+
SWManagerSenders {
556+
swmanager_sender: self.swmanager_thread.clone(),
557+
resource_sender: self.resource_threads.sender()
558+
}
556559
}
557560
}

components/net/http_loader.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ pub fn factory(user_agent: String,
5959
http_state: HttpState,
6060
devtools_chan: Option<Sender<DevtoolsControlMsg>>,
6161
profiler_chan: ProfilerChan,
62-
constellation_chan: Option<IpcSender<CustomResponseMediator>>,
62+
swmanager_chan: Option<IpcSender<CustomResponseMediator>>,
6363
connector: Arc<Pool<Connector>>)
6464
-> Box<FnBox(LoadData,
6565
LoadConsumer,
@@ -79,7 +79,7 @@ pub fn factory(user_agent: String,
7979
connector,
8080
http_state,
8181
devtools_chan,
82-
constellation_chan,
82+
swmanager_chan,
8383
cancel_listener,
8484
user_agent)
8585
})
@@ -133,7 +133,7 @@ fn load_for_consumer(load_data: LoadData,
133133
connector: Arc<Pool<Connector>>,
134134
http_state: HttpState,
135135
devtools_chan: Option<Sender<DevtoolsControlMsg>>,
136-
constellation_chan: Option<IpcSender<CustomResponseMediator>>,
136+
swmanager_chan: Option<IpcSender<CustomResponseMediator>>,
137137
cancel_listener: CancellationListener,
138138
user_agent: String) {
139139
let factory = NetworkHttpRequestFactory {
@@ -143,7 +143,7 @@ fn load_for_consumer(load_data: LoadData,
143143
let ui_provider = TFDProvider;
144144
match load(&load_data, &ui_provider, &http_state,
145145
devtools_chan, &factory,
146-
user_agent, &cancel_listener, constellation_chan) {
146+
user_agent, &cancel_listener, swmanager_chan) {
147147
Err(error) => {
148148
match error.error {
149149
LoadErrorType::ConnectionAborted { .. } => unreachable!(),
@@ -864,7 +864,7 @@ pub fn load<A, B>(load_data: &LoadData,
864864
request_factory: &HttpRequestFactory<R=A>,
865865
user_agent: String,
866866
cancel_listener: &CancellationListener,
867-
constellation_chan: Option<IpcSender<CustomResponseMediator>>)
867+
swmanager_chan: Option<IpcSender<CustomResponseMediator>>)
868868
-> Result<StreamedResponse, LoadError> where A: HttpRequest + 'static, B: UIProvider {
869869
let max_redirects = PREFS.get("network.http.redirection-limit").as_i64().unwrap() as u32;
870870
let mut iters = 0;
@@ -886,9 +886,9 @@ pub fn load<A, B>(load_data: &LoadData,
886886
response_chan: msg_sender,
887887
load_url: doc_url.clone()
888888
};
889-
if let Some(sender) = constellation_chan {
889+
if let Some(sender) = swmanager_chan {
890890
let _ = sender.send(response_mediator);
891-
if let Ok(Some(custom_response)) = msg_receiver.try_recv() {
891+
if let Ok(Some(custom_response)) = msg_receiver.recv() {
892892
let metadata = Metadata::default(doc_url.clone());
893893
let readable_response = to_readable_response(custom_response);
894894
return StreamedResponse::from_http_response(box readable_response, metadata);

components/net/resource_thread.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ impl ResourceChannelManager {
280280
consumer.send(cookie_jar.cookies_for_url(&url, source)).unwrap();
281281
}
282282
CoreResourceMsg::NetworkMediator(mediator_chan) => {
283-
self.resource_manager.constellation_chan = Some(mediator_chan)
283+
self.resource_manager.swmanager_chan = Some(mediator_chan)
284284
}
285285
CoreResourceMsg::GetCookiesDataForUrl(url, consumer, source) => {
286286
let mut cookie_jar = group.cookie_jar.write().unwrap();
@@ -459,7 +459,7 @@ pub struct CoreResourceManager {
459459
user_agent: String,
460460
mime_classifier: Arc<MimeClassifier>,
461461
devtools_chan: Option<Sender<DevtoolsControlMsg>>,
462-
constellation_chan: Option<IpcSender<CustomResponseMediator>>,
462+
swmanager_chan: Option<IpcSender<CustomResponseMediator>>,
463463
profiler_chan: ProfilerChan,
464464
filemanager_chan: IpcSender<FileManagerThreadMsg>,
465465
cancel_load_map: HashMap<ResourceId, Sender<()>>,
@@ -475,7 +475,7 @@ impl CoreResourceManager {
475475
user_agent: user_agent,
476476
mime_classifier: Arc::new(MimeClassifier::new()),
477477
devtools_chan: devtools_channel,
478-
constellation_chan: None,
478+
swmanager_chan: None,
479479
profiler_chan: profiler_chan,
480480
filemanager_chan: filemanager_chan,
481481
cancel_load_map: HashMap::new(),
@@ -547,7 +547,7 @@ impl CoreResourceManager {
547547
http_state,
548548
self.devtools_chan.clone(),
549549
self.profiler_chan.clone(),
550-
self.constellation_chan.clone(),
550+
self.swmanager_chan.clone(),
551551
resource_grp.connector.clone())
552552
},
553553
"data" => from_factory(data_loader::factory),

components/script/lib.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,8 @@ mod unpremultiplytable;
114114
mod webdriver_handlers;
115115

116116
use dom::bindings::codegen::RegisterBindings;
117-
use ipc_channel::ipc::IpcSender;
118117
use js::jsapi::{Handle, JSContext, JSObject, SetDOMProxyInformation};
119-
use script_traits::SWManagerMsg;
118+
use script_traits::SWManagerSenders;
120119
use serviceworker_manager::ServiceWorkerManager;
121120
use std::ptr;
122121
use util::opts;
@@ -163,13 +162,13 @@ fn perform_platform_specific_initialization() {
163162
fn perform_platform_specific_initialization() {}
164163

165164
#[allow(unsafe_code)]
166-
pub fn init(from_swmanager_sender: IpcSender<SWManagerMsg>) {
165+
pub fn init(sw_senders: SWManagerSenders) {
167166
unsafe {
168167
SetDOMProxyInformation(ptr::null(), 0, Some(script_thread::shadow_check_callback));
169168
}
170169

171170
// Spawn the service worker manager passing the constellation sender
172-
ServiceWorkerManager::spawn_manager(from_swmanager_sender);
171+
ServiceWorkerManager::spawn_manager(sw_senders);
173172

174173
// Create the global vtables used by the (generated) DOM
175174
// bindings to implement JS proxies.

0 commit comments

Comments
 (0)