Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: src/engine/Main.cpp

Issue 6505394822184960: Issue 1109 - Support notifications (Closed)
Left Patch Set: fix naming Created July 29, 2015, 11:18 a.m.
Right Patch Set: fix obtaining of DPI value of content (NotificationWindow) of NotificationBorderWindow Created Aug. 18, 2015, 9:43 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
LEFTRIGHT
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2015 Eyeo GmbH 3 * Copyright (C) 2006-2015 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details. 12 * GNU General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License 14 * You should have received a copy of the GNU General Public License
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18 #pragma comment(linker,"\"/manifestdependency:type='win32' \ 18 #pragma comment(linker,"\"/manifestdependency:type='win32' \
19 name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \ 19 name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
20 processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 20 processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
Eric 2015/08/19 17:43:37 I did not say it wasn't available, I said it wasn'
Oleksandr 2015/08/20 13:12:13 Common Controls 6 are essentially Windows XP UI up
21 21
22 #include <AdblockPlus.h> 22 #include <AdblockPlus.h>
23 #include <functional> 23 #include <functional>
24 #include <vector> 24 #include <vector>
25 #include <deque> 25 #include <deque>
26 #include <thread> 26 #include <thread>
27 #include <mutex> 27 #include <mutex>
28 #include <condition_variable> 28 #include <condition_variable>
29 #include <Windows.h> 29 #include <Windows.h>
30 30
(...skipping 17 matching lines...) Expand all
48 ScopedAtlAxInitializer() 48 ScopedAtlAxInitializer()
49 { 49 {
50 ATL::AtlAxWinInit(); 50 ATL::AtlAxWinInit();
51 } 51 }
52 ~ScopedAtlAxInitializer() 52 ~ScopedAtlAxInitializer()
53 { 53 {
54 ATL::AtlAxWinTerm(); 54 ATL::AtlAxWinTerm();
55 } 55 }
56 }; 56 };
57 57
58 class ABPAtlModule : public ATL::CAtlExeModuleT<ABPAtlModule> { 58 class ABPAtlModule : public ATL::CAtlExeModuleT<ABPAtlModule>
59 {
59 enum CustomMessages 60 enum CustomMessages
60 { 61 {
61 TASK_POSTED = WM_USER + 1 62 TASK_POSTED = WM_USER + 1
62 }; 63 };
64
63 public: 65 public:
Oleksandr 2015/08/10 09:13:34 Nit: A new line before public and private in class
sergei 2015/08/17 13:12:53 Done.
64 ABPAtlModule() : m_msgHWnd(nullptr) 66 ABPAtlModule() : m_msgHWnd(nullptr)
65 { 67 {
66 } 68 }
67 void Finalize(); 69 void Finalize();
68 HRESULT PreMessageLoop(int showCmd) throw(); 70 HRESULT PreMessageLoop(int showCmd) throw();
69 void RunMessageLoop() throw(); 71 void RunMessageLoop() throw();
Eric 2015/08/19 17:43:37 The only thing this message loop is doing is to pu
sergei 2015/08/20 14:45:42 What does the notification queue refers here? Righ
70 static HRESULT InitializeCom() throw() 72 static HRESULT InitializeCom() throw()
71 { 73 {
72 // The default implementation initializes multithreaded version but 74 // The default implementation initializes multithreaded version but
73 // in this case hosted ActiveX does not properly work. 75 // in this case hosted ActiveX does not properly work.
74 return CoInitialize(nullptr); 76 return CoInitialize(nullptr);
75 } 77 }
76 private: 78 private:
77 void onNewNotification(const AdblockPlus::NotificationPtr& notification); 79 void onNewNotification(const AdblockPlus::NotificationPtr& notification);
78 void DispatchTask(std::function<void()>&& task); 80 void DispatchTask(std::function<void()>&& task);
79 void ProcessTasks(); 81 void ProcessTasks();
80 private: 82
Oleksandr 2015/08/10 09:13:34 Nit: Second "private" here is redundant
sergei 2015/08/17 13:12:53 Done.
81 ScopedAtlAxInitializer m_scopedAtlAxInit; 83 ScopedAtlAxInitializer m_scopedAtlAxInit;
82 HWND m_msgHWnd; 84 HWND m_msgHWnd;
83 std::recursive_mutex m_tasksMutex; 85 std::recursive_mutex m_tasksMutex;
84 std::deque<std::function<void()>> m_tasks; 86 std::deque<std::function<void()>> m_tasks;
85 std::unique_ptr<NotificationBorderWindow> m_notificationWindow; 87 std::unique_ptr<NotificationBorderWindow> m_notificationWindow;
86 } _AtlModule; 88 } _AtlModule;
Eric 2015/08/19 17:43:37 '_AtlModule' is defined statically, yet its proper
Oleksandr 2015/08/20 13:12:13 It's not perfect right now, but good enough, IMHO.
sergei 2015/08/20 14:45:41 I faced with the troubles that it's static and yet
87 89
88 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine; 90 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine;
89 std::auto_ptr<Updater> updater; 91 std::auto_ptr<Updater> updater;
90 int activeConnections = 0; 92 int activeConnections = 0;
91 CriticalSection activeConnectionsLock; 93 CriticalSection activeConnectionsLock;
92 HWND callbackWindow; 94 HWND callbackWindow;
93 95
94 void WriteSubscriptions(Communication::OutputBuffer& response, 96 void WriteSubscriptions(Communication::OutputBuffer& response,
95 const std::vector<AdblockPlus::SubscriptionPtr>& subscriptions) 97 const std::vector<AdblockPlus::SubscriptionPtr>& subscriptions)
96 { 98 {
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 { 464 {
463 Debug("No connections left, shutting down the engine"); 465 Debug("No connections left, shutting down the engine");
464 activeConnections = 0; 466 activeConnections = 0;
465 467
466 // The following exit(0) calls the destructor of _AtlModule from the 468 // The following exit(0) calls the destructor of _AtlModule from the
467 // current thread which results in the disaster because there is a 469 // current thread which results in the disaster because there is a
468 // running message loop as well as there can be alive notification 470 // running message loop as well as there can be alive notification
469 // window which holds v8::Value as well as m_tasks can hold v8::Value 471 // window which holds v8::Value as well as m_tasks can hold v8::Value
470 // but JS Engine is destroyed before _AtlModule. BTW, various free 472 // but JS Engine is destroyed before _AtlModule. BTW, various free
471 // running threads like Timeout also cause the crash because the engine 473 // running threads like Timeout also cause the crash because the engine
472 // is already destroyed. 474 // is already destroyed.
Eric 2015/08/19 17:43:38 If it's possible for a dependency of a class to be
sergei 2015/08/20 14:45:41 Yes, this code needs attention. I would like to no
473 _AtlModule.Finalize(); 475 _AtlModule.Finalize();
474 exit(0); 476 exit(0);
475 } 477 }
476 } 478 }
477 479
478 } 480 }
479 481
480 void OnUpdateAvailable(AdblockPlus::JsValueList& params) 482 void OnUpdateAvailable(AdblockPlus::JsValueList& params)
481 { 483 {
482 if (params.size() < 1) 484 if (params.size() < 1)
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 }); 727 });
726 728
727 int retValue = _AtlModule.WinMain(cmdShow); 729 int retValue = _AtlModule.WinMain(cmdShow);
728 if (communicationThread.joinable()) 730 if (communicationThread.joinable())
729 { 731 {
730 communicationThread.join(); 732 communicationThread.join();
731 } 733 }
732 734
733 return retValue; 735 return retValue;
734 } 736 }
LEFTRIGHT

Powered by Google App Engine
This is Rietveld