mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Storage notifications routed via the constellation.
This commit is contained in:
parent
ef74d8da3b
commit
c91ef86a20
8 changed files with 67 additions and 39 deletions
|
@ -32,7 +32,7 @@ use msg::constellation_msg::{Key, KeyModifiers, KeyState};
|
|||
use msg::constellation_msg::{PipelineNamespace, PipelineNamespaceId, TraversalDirection};
|
||||
use net_traits::{self, IpcSend, ResourceThreads};
|
||||
use net_traits::image_cache_thread::ImageCacheThread;
|
||||
use net_traits::storage_thread::StorageThreadMsg;
|
||||
use net_traits::storage_thread::{StorageThreadMsg, StorageType};
|
||||
use offscreen_gl_context::{GLContextAttributes, GLLimits};
|
||||
use pipeline::{ChildProcess, InitialPipelineState, Pipeline};
|
||||
use profile_traits::mem;
|
||||
|
@ -1026,6 +1026,9 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
|||
warn!("Unable to forward DOMMessage for postMessage call");
|
||||
}
|
||||
}
|
||||
FromScriptMsg::BroadcastStorageEvent(pipeline_id, storage, url, key, old_value, new_value) => {
|
||||
self.handle_broadcast_storage_event(pipeline_id, storage, url, key, old_value, new_value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1052,6 +1055,21 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
|
|||
}
|
||||
}
|
||||
|
||||
fn handle_broadcast_storage_event(&self, pipeline_id: PipelineId, storage: StorageType, url: Url,
|
||||
key: Option<String>, old_value: Option<String>, new_value: Option<String>) {
|
||||
let origin = url.origin();
|
||||
for pipeline in self.pipelines.values() {
|
||||
if (pipeline.id != pipeline_id) && (pipeline.url.origin() == origin) {
|
||||
let msg = ConstellationControlMsg::DispatchStorageEvent(
|
||||
pipeline.id, storage, url.clone(), key.clone(), old_value.clone(), new_value.clone()
|
||||
);
|
||||
if let Err(err) = pipeline.script_chan.send(msg) {
|
||||
warn!("Failed to broadcast storage event to pipeline {} ({:?}).", pipeline.id, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn handle_exit(&mut self) {
|
||||
// TODO: add a timer, which forces shutdown if threads aren't responsive.
|
||||
if self.shutting_down { return; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue