[M73 Dev][EFL] Attach MessagePump::Delegate to MessagePumpForUIEfl 42/205642/1
authorChandan Padhi <c.padhi@samsung.com>
Wed, 8 May 2019 06:06:40 +0000 (11:36 +0530)
committerChandan Padhi <c.padhi@samsung.com>
Wed, 8 May 2019 06:37:12 +0000 (12:07 +0530)
Due to changes in chromium upstream, MessageLoop is no longer
a MessagePump::Delegate. Therefore, below piece of code becomes
invalid and had to be removed.

Delegate* delegate = MessageLoopForUI::current();

Due to this, calls to Delegate methods are not made which breaks
the loop and ecore_pipe_write() does not get executed resulting
in white screen at webview launch.

This commit attaches MessagePump::Delegate to MessagePumpForUIEfl.

Change-Id: I674dac8ca736a5c6ff2172c5f5938325b706b5ab
Signed-off-by: Chandan Padhi <c.padhi@samsung.com>
15 files changed:
base/message_loop/message_loop.cc
base/message_loop/message_loop.h
base/message_loop/message_loop_current.cc
base/message_loop/message_loop_current.h
base/message_loop/message_loop_impl.cc
base/message_loop/message_loop_impl.h
base/task/sequence_manager/sequence_manager_impl.cc
base/task/sequence_manager/sequence_manager_impl.h
base/task/sequence_manager/thread_controller.h
base/task/sequence_manager/thread_controller_impl.cc
base/task/sequence_manager/thread_controller_impl.h
base/task/sequence_manager/thread_controller_with_message_pump_impl.cc
base/task/sequence_manager/thread_controller_with_message_pump_impl.h
tizen_src/chromium_impl/base/message_loop/message_pump_for_ui_efl.cc
tizen_src/chromium_impl/base/message_loop/message_pump_for_ui_efl.h

index f72f17d..f2f8151 100644 (file)
@@ -260,6 +260,10 @@ void MessageLoop::BindToCurrentThread() {
   if (type_ == TYPE_UI || type_ == TYPE_JAVA)
     backend_->AttachToMessagePump();
 #endif
+#if defined(USE_EFL)
+  if (type_ == TYPE_UI)
+    backend_->AttachToMessagePump();
+#endif
 }
 
 std::unique_ptr<MessagePump> MessageLoop::CreateMessagePump() {
index 1adfd4c..a43edf7 100644 (file)
@@ -203,7 +203,7 @@ class BASE_EXPORT MessageLoopBase {
   // Whether task execution is allowed at the moment.
   virtual bool IsTaskExecutionAllowed() const = 0;
 
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL)
   virtual void AttachToMessagePump() = 0;
 #endif
 
index dca4654..e379005 100644 (file)
@@ -176,7 +176,7 @@ bool MessageLoopCurrentForUI::WatchFileDescriptor(
 }
 #endif
 
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL)
 void MessageLoopCurrentForUI::Attach() {
   current_->AttachToMessagePump();
 }
index 56c147d..6fe16af 100644 (file)
@@ -243,7 +243,7 @@ class BASE_EXPORT MessageLoopCurrentForUI : public MessageLoopCurrent {
                            MessagePumpForUI::FdWatcher* delegate);
 #endif
 
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL)
   // Forwards to MessageLoopForUI::Attach().
   // TODO(https://crbug.com/825327): Plumb the actual MessageLoopForUI* to
   // callers and remove ability to access this method from
index a72f713..f977b35 100644 (file)
@@ -29,6 +29,8 @@
 #include "base/message_loop/message_pump_mac.h"
 #elif defined(OS_ANDROID)
 #include "base/message_loop/message_pump_android.h"
+#elif defined(USE_EFL)
+#include "base/message_loop/message_pump_for_ui_efl.h"
 #endif
 
 namespace base {
@@ -287,6 +289,11 @@ void MessageLoopImpl::AttachToMessagePump() {
          type_ == MessageLoopBase::TYPE_JAVA);
   static_cast<MessagePumpForUI*>(pump_.get())->Attach(this);
 }
+#elif defined(USE_EFL)
+void MessageLoopImpl::AttachToMessagePump() {
+  DCHECK(type_ == MessageLoopBase::TYPE_UI);
+  static_cast<MessagePumpForUIEfl*>(pump_.get())->Attach(this);
+}
 #endif  // defined(OS_IOS)
 
 void MessageLoopImpl::SetTimerSlack(TimerSlack timer_slack) {
index bfcdf0c..7afc397 100644 (file)
@@ -70,7 +70,7 @@ class BASE_EXPORT MessageLoopImpl : public MessageLoopBase,
   bool IsIdleForTesting() override;
   void SetTaskExecutionAllowed(bool allowed) override;
   bool IsTaskExecutionAllowed() const override;
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL)
   void AttachToMessagePump() override;
 #endif
   void SetTimerSlack(TimerSlack timer_slack) override;
index 0c5cda2..2147ebd 100644 (file)
@@ -886,7 +886,7 @@ bool SequenceManagerImpl::IsTaskExecutionAllowed() const {
   return controller_->IsTaskExecutionAllowed();
 }
 
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL)
 void SequenceManagerImpl::AttachToMessagePump() {
   return controller_->AttachToMessagePump();
 }
index e3838c1..2525f77 100644 (file)
@@ -158,7 +158,7 @@ class BASE_EXPORT SequenceManagerImpl
   void SetAddQueueTimeToTasks(bool enable) override;
   void SetTaskExecutionAllowed(bool allowed) override;
   bool IsTaskExecutionAllowed() const override;
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL)
   void AttachToMessagePump() override;
 #endif
   bool IsIdleForTesting() override;
index 81fd9f9..763f399 100644 (file)
@@ -93,7 +93,7 @@ class ThreadController {
   // Returns true if the current run loop should quit when idle.
   virtual bool ShouldQuitRunLoopWhenIdle() = 0;
 
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL)
   // On iOS, the main message loop cannot be Run().  Instead call
   // AttachToMessagePump(), which connects this ThreadController to the
   // UI thread's CFRunLoop and allows PostTask() to work.
index 94f8ab3..947cc7f 100644 (file)
@@ -335,7 +335,7 @@ MessagePump* ThreadControllerImpl::GetBoundMessagePump() const {
   return nullptr;
 }
 
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL)
 void ThreadControllerImpl::AttachToMessagePump() {
   NOTREACHED();
 }
index e938f2d..675212c 100644 (file)
@@ -57,7 +57,7 @@ class BASE_EXPORT ThreadControllerImpl : public ThreadController,
   void SetTaskExecutionAllowed(bool allowed) override;
   bool IsTaskExecutionAllowed() const override;
   MessagePump* GetBoundMessagePump() const override;
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL)
   void AttachToMessagePump() override;
 #endif
   bool ShouldQuitRunLoopWhenIdle() override;
index 9ba1ab4..fa0d67b 100644 (file)
@@ -14,6 +14,8 @@
 #include "base/message_loop/message_pump_mac.h"
 #elif defined(OS_ANDROID)
 #include "base/message_loop/message_pump_android.h"
+#elif defined(USE_EFL)
+#include "base/message_loop/message_pump_for_ui_efl.h"
 #endif
 
 namespace base {
@@ -422,6 +424,10 @@ void ThreadControllerWithMessagePumpImpl::AttachToMessagePump() {
 void ThreadControllerWithMessagePumpImpl::AttachToMessagePump() {
   static_cast<MessagePumpForUI*>(pump_.get())->Attach(this);
 }
+#elif defined(USE_EFL)
+void ThreadControllerWithMessagePumpImpl::AttachToMessagePump() {
+  static_cast<MessagePumpForUIEfl*>(pump_.get())->Attach(this);
+}
 #endif
 
 bool ThreadControllerWithMessagePumpImpl::ShouldQuitRunLoopWhenIdle() {
index 7a6bd51..5f166da 100644 (file)
@@ -61,7 +61,7 @@ class BASE_EXPORT ThreadControllerWithMessagePumpImpl
   void SetTaskExecutionAllowed(bool allowed) override;
   bool IsTaskExecutionAllowed() const override;
   MessagePump* GetBoundMessagePump() const override;
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS) || defined(OS_ANDROID) || defined(USE_EFL)
   void AttachToMessagePump() override;
 #endif
   bool ShouldQuitRunLoopWhenIdle() override;
index 486fd01..9f82953 100644 (file)
@@ -125,6 +125,10 @@ void MessagePumpForUIEfl::ScheduleDelayedWork(
   }
 }
 
+void MessagePumpForUIEfl::Attach(Delegate* delegate) {
+  SetDelegate(delegate);
+}
+
 void MessagePumpForUIEfl::PipeCallback(void* data, void*, unsigned int) {
   static_cast<MessagePumpForUIEfl*>(data)->DoWork();
 }
@@ -154,34 +158,23 @@ void MessagePumpForUIEfl::DoWork() {
     work_scheduled_ = false;
   }
 
-#if !defined(EWK_BRINGUP)  // FIXME: m73 bringup
-  Delegate* delegate = base::MessageLoopForUI::current();
-
-// Added as part M67 bringup need to check why
-// MessagePumpForUIEfl::DoWork is called even after
-// MessageLoop is destructed.
-#if defined(EWK_BRINGUP)  // FIXME: m67 bringup
-  if (!delegate)
-    return;
-#endif
-
   if (!run_loop_) {
     run_loop_ = new RunLoop();
     bool result = run_loop_->BeforeRun();
     DCHECK(result);
   }
 
-  bool more_work_is_plausible = delegate->DoWork();
+  bool more_work_is_plausible = delegate_->DoWork();
 
   base::TimeTicks delayed_work_time;
-  more_work_is_plausible |= delegate->DoDelayedWork(&delayed_work_time);
+  more_work_is_plausible |= delegate_->DoDelayedWork(&delayed_work_time);
 
   if (more_work_is_plausible) {
     ScheduleWork();
     return;
   }
 
-  more_work_is_plausible |= delegate->DoIdleWork();
+  more_work_is_plausible |= delegate_->DoIdleWork();
   if (more_work_is_plausible) {
     ScheduleWork();
     return;
@@ -189,7 +182,6 @@ void MessagePumpForUIEfl::DoWork() {
 
   if (!delayed_work_time.is_null())
     ScheduleDelayedWork(delayed_work_time);
-#endif  // EWK_BRINGUP
 }
 
 void MessagePumpForUIEfl::DoDelayedWork() {
index fab5ccd..64768f5 100644 (file)
@@ -22,14 +22,17 @@ typedef std::pair<MessagePumpForUIEfl*, Ecore_Timer*> TimerPair;
 class BASE_EXPORT MessagePumpForUIEfl : public base::MessagePump {
  public:
   MessagePumpForUIEfl();
-  virtual ~MessagePumpForUIEfl();
+  ~MessagePumpForUIEfl();
 
-  virtual void Run(Delegate*) override;
-  virtual void Quit() override;
-  virtual void ScheduleWork() override;
-  virtual void ScheduleDelayedWork(const base::TimeTicks&) override;
+  void Run(Delegate*) override;
+  void Quit() override;
+  void ScheduleWork() override;
+  void ScheduleDelayedWork(const base::TimeTicks&) override;
+
+  void Attach(Delegate* delegate);
 
  private:
+  void SetDelegate(Delegate* delegate) { delegate_ = delegate; }
   static void PipeCallback(void*, void*, unsigned int);
   static Eina_Bool TimerCallback(void*);
   void DoWork();
@@ -40,7 +43,10 @@ class BASE_EXPORT MessagePumpForUIEfl : public base::MessagePump {
   std::unordered_set<TimerPair*> pending_timers_;
   Ecore_Pipe* pipe_;
   Ecore_Timer* schedule_delayed_work_timer_;
-  Delegate* delegate_;
+
+  // The MessagePump::Delegate for this pump.
+  Delegate* delegate_ = nullptr;
+
   RunLoop* run_loop_;
   base::Lock schedule_work_lock_;
   bool keep_running_;