void Vibrate(const nsTArray<uint32_t>& pattern, const WindowIdentifier &id) { AssertMainThread(); // Only active windows may start vibrations. If |id| hasn't gone // through the IPC layer -- that is, if our caller is the outside // world, not hal_proxy -- check whether the window is active. If // |id| has gone through IPC, don't check the window's visibility; // only the window corresponding to the bottommost process has its // visibility state set correctly. if (!id.HasTraveledThroughIPC() && !WindowIsActive(id.GetWindow())) { HAL_LOG(("Vibrate: Window is inactive, dropping vibrate.")); return; } if (!InSandbox()) { if (!gLastIDToVibrate) { InitLastIDToVibrate(); } *gLastIDToVibrate = id.AsArray(); } // Don't forward our ID if we are not in the sandbox, because hal_impl // doesn't need it, and we don't want it to be tempted to read it. The // empty identifier will assert if it's used. PROXY_IF_SANDBOXED(Vibrate(pattern, InSandbox() ? id : WindowIdentifier())); }
void Vibrate(const nsTArray<uint32>& pattern, const WindowIdentifier &id) { AssertMainThread(); // Only active windows may start vibrations. If |id| hasn't gone // through the IPC layer -- that is, if our caller is the outside // world, not hal_proxy -- check whether the window is active. If // |id| has gone through IPC, don't check the window's visibility; // only the window corresponding to the bottommost process has its // visibility state set correctly. if (!id.HasTraveledThroughIPC() && !WindowIsActive(id.GetWindow())) { HAL_LOG(("Vibrate: Window is inactive, dropping vibrate.")); return; } if (InSandbox()) { hal_sandbox::Vibrate(pattern, id); } else { if (!gLastIDToVibrate) InitLastIDToVibrate(); *gLastIDToVibrate = id.AsArray(); HAL_LOG(("Vibrate: Forwarding to hal_impl.")); // hal_impl doesn't need |id|. Send it an empty id, which will // assert if it's used. hal_impl::Vibrate(pattern, WindowIdentifier()); } }