From: deepti Date: Wed, 11 Jul 2018 10:39:49 +0000 (+0530) Subject: Implementation of Resume and Suspend function. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f95603be440503ae853f0daa92f1bb6c36348207;p=platform%2Fframework%2Fweb%2Fcrosswalk-tizen.git Implementation of Resume and Suspend function. Created IPC for Resume and Suspend operation to reach at Chromium level. Change-Id: I2a38c77f225b102da14607b3a5dde787c78e697a Signed-off-by: deepti --- diff --git a/atom/browser/browser.cc b/atom/browser/browser.cc index dcfc6bc6b..0cd2e39b2 100644 --- a/atom/browser/browser.cc +++ b/atom/browser/browser.cc @@ -18,6 +18,8 @@ #include "base/threading/thread_task_runner_handle.h" #include "brightray/browser/brightray_paths.h" #include "content/public/browser/render_frame_host.h" +#include "content/public/browser/render_view_host.h" + #if defined(OS_TIZEN) #include "tizen/common/command_line.h" #include "tizen/common/application_data.h" @@ -264,14 +266,22 @@ void Browser::OnWindowAllClosed() { #if defined(OS_TIZEN) void Browser::Hide() { NativeWindow *last_window = WindowList::GetLastWindow(); - if (last_window) - last_window->NotifySuspend(); + if (!last_window) + return; + + last_window->NotifySuspend(); + auto rvh = last_window->web_contents()->GetRenderViewHost(); + atom::Browser::Get()->Suspend(rvh); } void Browser::Show() { NativeWindow *last_window = WindowList::GetLastWindow(); - if (last_window) - last_window->NotifyResume(); + if (!last_window) + return; + + last_window->NotifyResume(); + auto rvh = last_window->web_contents()->GetRenderViewHost(); + atom::Browser::Get()->Resume(rvh); } void Browser::AppControl(std::unique_ptr appcontrol) { diff --git a/atom/common/api/api_messages.h b/atom/common/api/api_messages.h index 44e8ad61c..8335a4ec9 100644 --- a/atom/common/api/api_messages.h +++ b/atom/common/api/api_messages.h @@ -71,4 +71,9 @@ IPC_SYNC_MESSAGE_ROUTED0_2(WrtViewMsg_GetCSP, std::string) IPC_MESSAGE_ROUTED1(WrtViewMsg_SetLongPolling, - unsigned long) \ No newline at end of file + unsigned long) + +IPC_MESSAGE_ROUTED0(WrtViewMsg_SuspendScheduledTask) +IPC_MESSAGE_ROUTED0(WrtViewMsg_ResumeScheduledTasks) + + diff --git a/atom/renderer/atom_render_view_observer.cc b/atom/renderer/atom_render_view_observer.cc index 8923fdfd0..a608567b3 100644 --- a/atom/renderer/atom_render_view_observer.cc +++ b/atom/renderer/atom_render_view_observer.cc @@ -139,12 +139,32 @@ bool AtomRenderViewObserver::OnMessageReceived(const IPC::Message& message) { IPC_BEGIN_MESSAGE_MAP(AtomRenderViewObserver, message) IPC_MESSAGE_HANDLER(AtomViewMsg_Message, OnBrowserMessage) IPC_MESSAGE_HANDLER(WrtViewMsg_SetLongPolling, OnSetLongPolling) + IPC_MESSAGE_HANDLER(WrtViewMsg_SuspendScheduledTask, OnSuspendScheduledTasks) + IPC_MESSAGE_HANDLER(WrtViewMsg_ResumeScheduledTasks, OnResumeScheduledTasks) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; } +void AtomRenderViewObserver::OnSuspendScheduledTasks() { + if (!document_created_) + return; + + blink::WebView* view = render_view()->GetWebView(); + if (view) + view->suspendScheduledTasks(); +} + +void AtomRenderViewObserver::OnResumeScheduledTasks() { + if (!document_created_) + return; + + blink::WebView* view = render_view()->GetWebView(); + if (view) + view->resumeScheduledTasks(); +} + void AtomRenderViewObserver::OnDestruct() { delete this; } diff --git a/atom/renderer/atom_render_view_observer.h b/atom/renderer/atom_render_view_observer.h index cd69e2a72..00cfb3bb0 100644 --- a/atom/renderer/atom_render_view_observer.h +++ b/atom/renderer/atom_render_view_observer.h @@ -21,7 +21,8 @@ class AtomRenderViewObserver : public content::RenderViewObserver { public: explicit AtomRenderViewObserver(content::RenderView* render_view, AtomRendererClient* renderer_client); - + void OnSuspendScheduledTasks(); + void OnResumeScheduledTasks(); protected: virtual ~AtomRenderViewObserver(); diff --git a/tizen/browser/tizen_browser_parts.cc b/tizen/browser/tizen_browser_parts.cc index d037cfc61..10dd2f64d 100644 --- a/tizen/browser/tizen_browser_parts.cc +++ b/tizen/browser/tizen_browser_parts.cc @@ -73,4 +73,18 @@ void TizenBrowserParts::RenderViewCreated(content::RenderViewHost* render_view_h SetLongPollingTimeout(render_view_host); } -} \ No newline at end of file +void TizenBrowserParts::Suspend(content::RenderViewHost* rvh) { + if(!rvh) + return; + + rvh->Send(new WrtViewMsg_SuspendScheduledTask(rvh->GetRoutingID())); +} + +void TizenBrowserParts::Resume(content::RenderViewHost* rvh) { + if(!rvh) + return; + + rvh->Send(new WrtViewMsg_ResumeScheduledTasks(rvh->GetRoutingID())); +} + +} diff --git a/tizen/browser/tizen_browser_parts.h b/tizen/browser/tizen_browser_parts.h index 4f6d552b5..a280f2fec 100644 --- a/tizen/browser/tizen_browser_parts.h +++ b/tizen/browser/tizen_browser_parts.h @@ -32,6 +32,8 @@ class TizenBrowserParts { virtual void Launch(std::unique_ptr appcontrol) = 0; virtual bool launched() const = 0; void RenderViewCreated(content::RenderViewHost* render_view_host); + void Suspend(content::RenderViewHost* rvh); + void Resume(content::RenderViewHost* rvh); void GetCSP(std::string &csp_rule, std::string &csp_report_rule); void Initialize(); @@ -51,4 +53,4 @@ class TizenBrowserParts { } // namespace tizen -#endif // TIZEN_BROWSER_TIZEN_BROWSER_PARTS_H_ \ No newline at end of file +#endif // TIZEN_BROWSER_TIZEN_BROWSER_PARTS_H_