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

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

Issue 11756012: Enhanced Protected Mode support (Closed)
Left Patch Set: Created Sept. 15, 2013, 1 a.m.
Right Patch Set: Addressing comments Created Sept. 17, 2013, 2:51 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 #include <AdblockPlus.h> 1 #include <AdblockPlus.h>
2 #include <functional> 2 #include <functional>
3 #include <vector> 3 #include <vector>
4 #include <Windows.h> 4 #include <Windows.h>
5 5
6 #include "../shared/AutoHandle.h" 6 #include "../shared/AutoHandle.h"
7 #include "../shared/Communication.h" 7 #include "../shared/Communication.h"
8 #include "../shared/Dictionary.h" 8 #include "../shared/Dictionary.h"
9 #include "../shared/Utils.h" 9 #include "../shared/Utils.h"
10 #include "../shared/Version.h" 10 #include "../shared/Version.h"
11 #include "../shared/CriticalSection.h" 11 #include "../shared/CriticalSection.h"
12 #include "Debug.h" 12 #include "Debug.h"
13 #include "Updater.h" 13 #include "Updater.h"
14 14
15
16 namespace 15 namespace
17 { 16 {
18 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine; 17 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine;
19 std::auto_ptr<Updater> updater; 18 std::auto_ptr<Updater> updater;
20 int activeConnections = 0; 19 int activeConnections = 0;
21 CriticalSection activeConnectionsLock; 20 CriticalSection activeConnectionsLock;
22 HWND callbackWindow;
23 21
24 void WriteStrings(Communication::OutputBuffer& response, 22 void WriteStrings(Communication::OutputBuffer& response,
25 const std::vector<std::string>& strings) 23 const std::vector<std::string>& strings)
26 { 24 {
27 int32_t count = static_cast<int32_t>(strings.size()); 25 int32_t count = static_cast<int32_t>(strings.size());
28 response << count; 26 response << count;
29 for (int32_t i = 0; i < count; i++) 27 for (int32_t i = 0; i < count; i++)
30 response << strings[i]; 28 response << strings[i];
31 } 29 }
32 30
33 void WriteSubscriptions(Communication::OutputBuffer& response, 31 void WriteSubscriptions(Communication::OutputBuffer& response,
34 const std::vector<AdblockPlus::SubscriptionPtr>& subscriptions) 32 const std::vector<AdblockPlus::SubscriptionPtr>& subscriptions)
35 { 33 {
36 int32_t count = static_cast<int32_t>(subscriptions.size()); 34 int32_t count = static_cast<int32_t>(subscriptions.size());
37 response << count; 35 response << count;
38 for (int32_t i = 0; i < count; i++) 36 for (int32_t i = 0; i < count; i++)
39 { 37 {
40 AdblockPlus::SubscriptionPtr subscription = subscriptions[i]; 38 AdblockPlus::SubscriptionPtr subscription = subscriptions[i];
41 response << subscription->GetProperty("url")->AsString() 39 response << subscription->GetProperty("url")->AsString()
42 << subscription->GetProperty("title")->AsString() 40 << subscription->GetProperty("title")->AsString()
43 << subscription->GetProperty("specialization")->AsString() 41 << subscription->GetProperty("specialization")->AsString()
44 << subscription->IsListed(); 42 << subscription->IsListed();
45 } 43 }
46 } 44 }
47 45
48 bool updateAvailable; 46 bool updateAvailable;
49 volatile bool checkingForUpdate = false;
50 void UpdateCallback(const std::string res) 47 void UpdateCallback(const std::string res)
51 { 48 {
52 checkingForUpdate = false;
53 if (updateAvailable) 49 if (updateAvailable)
54 {
55 if (callbackWindow != 0)
56 {
57 SendMessage(callbackWindow, WM_DOWNLOADING_UPDATE, 0, 0);
58 callbackWindow = 0;
59 }
60 return; 50 return;
61 }
62 Dictionary* dictionary = Dictionary::GetInstance(); 51 Dictionary* dictionary = Dictionary::GetInstance();
63 if (res.length() == 0) 52 if (res.length() == 0)
64 { 53 {
65 if (callbackWindow != 0) 54 std::wstring upToDateText = dictionary->Lookup("updater", "update-already- up-to-date-text");
66 { 55 std::wstring upToDateTitle = dictionary->Lookup("updater", "update-already -up-to-date-title");
67 SendMessage(callbackWindow, WM_ALREADY_UP_TO_DATE, 0, 0); 56 MessageBoxW(NULL, upToDateText.c_str(), upToDateTitle.c_str(), MB_OK);
68 }
69 } 57 }
70 else 58 else
71 { 59 {
72 if (callbackWindow != 0) 60 std::wstring errorText = dictionary->Lookup("updater", "update-error-text" );
73 { 61 std::wstring errorTitle = dictionary->Lookup("updater", "update-error-titl e");
74 SendMessage(callbackWindow, WM_UPDATE_CHECK_ERROR, 0, 0); 62 ReplaceString(errorText, L"?1?", ToUtf16String(res));
75 } 63 MessageBoxW(NULL, errorText.c_str(), errorTitle.c_str(), MB_OK);
76 } 64 }
77 callbackWindow = 0;
78 return; 65 return;
79 } 66 }
80 67
81 68
82 CriticalSection firstRunLock; 69 CriticalSection firstRunLock;
83 bool firstRunActionExecuted = false; 70 bool firstRunActionExecuted = false;
84 Communication::OutputBuffer HandleRequest(Communication::InputBuffer& request) 71 Communication::OutputBuffer HandleRequest(Communication::InputBuffer& request)
85 { 72 {
86 Communication::OutputBuffer response; 73 Communication::OutputBuffer response;
87 74
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 } 236 }
250 else 237 else
251 { 238 {
252 // Report failure 239 // Report failure
253 response << false; 240 response << false;
254 } 241 }
255 break; 242 break;
256 } 243 }
257 case Communication::PROC_CHECK_FOR_UPDATES: 244 case Communication::PROC_CHECK_FOR_UPDATES:
258 { 245 {
259 request >> (int32_t&)callbackWindow;
260 updateAvailable = false; 246 updateAvailable = false;
261 if (!checkingForUpdate) 247 filterEngine->ForceUpdateCheck(UpdateCallback);
262 {
263 checkingForUpdate = true;
264 filterEngine->ForceUpdateCheck(UpdateCallback);
265 }
266 break; 248 break;
267 } 249 }
268 case Communication::PROC_IS_FIRST_RUN_ACTION_NEEDED: 250 case Communication::PROC_IS_FIRST_RUN_ACTION_NEEDED:
269 { 251 {
270 CriticalSection::Lock lock(firstRunLock); 252 CriticalSection::Lock lock(firstRunLock);
271 if (!firstRunActionExecuted && filterEngine->IsFirstRun()) 253 if (!firstRunActionExecuted && filterEngine->IsFirstRun())
272 { 254 {
273 response << true; 255 response << true;
274 firstRunActionExecuted = true; 256 firstRunActionExecuted = true;
275 } 257 }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 #endif 358 #endif
377 359
378 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(appInfo); 360 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(appInfo);
379 jsEngine->SetEventCallback("updateAvailable", &OnUpdateAvailable); 361 jsEngine->SetEventCallback("updateAvailable", &OnUpdateAvailable);
380 362
381 std::string dataPath = ToUtf8String(GetAppDataPath()); 363 std::string dataPath = ToUtf8String(GetAppDataPath());
382 dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get()) ->SetBasePath(dataPath); 364 dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get()) ->SetBasePath(dataPath);
383 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterE ngine(jsEngine)); 365 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterE ngine(jsEngine));
384 return filterEngine; 366 return filterEngine;
385 } 367 }
386 368
Felix Dahlke 2013/09/16 16:30:12 Why this extra whitespace?
387
388
389 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) 369 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
390 { 370 {
391 AutoHandle mutex(CreateMutexW(0, false, L"AdblockPlusEngine")); 371 AutoHandle mutex(CreateMutexW(0, false, L"AdblockPlusEngine"));
392 if (!mutex) 372 if (!mutex)
393 { 373 {
394 DebugLastError("CreateMutex failed"); 374 DebugLastError("CreateMutex failed");
395 return 1; 375 return 1;
396 } 376 }
397 377
398 if (GetLastError() == ERROR_ALREADY_EXISTS) 378 if (GetLastError() == ERROR_ALREADY_EXISTS)
399 { 379 {
400 DebugLastError("Named pipe exists, another engine instance appears to be run ning"); 380 DebugLastError("Named pipe exists, another engine instance appears to be run ning");
401 return 1; 381 return 1;
402 } 382 }
403 383
404 int argc; 384 int argc;
405 LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc); 385 LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc);
406 std::wstring locale(argc >= 2 ? argv[1] : L""); 386 std::wstring locale(argc >= 2 ? argv[1] : L"");
407 Communication::browserSID = argv[2]; 387 Communication::browserSID = argc >= 3 ? argv[2] : L"";
Wladimir Palant 2013/09/16 13:45:07 This will cause a crash if too few parameters are
Felix Dahlke 2013/09/16 16:30:12 What if argc is <3?
Oleksandr 2013/09/17 03:11:37 <3. Teehee :)
408 LocalFree(argv); 388 LocalFree(argv);
409 Dictionary::Create(locale); 389 Dictionary::Create(locale);
410 filterEngine = CreateFilterEngine(locale); 390 filterEngine = CreateFilterEngine(locale);
411 updater.reset(new Updater(filterEngine->GetJsEngine())); 391 updater.reset(new Updater(filterEngine->GetJsEngine()));
412 392
413 for (;;) 393 for (;;)
414 { 394 {
415 try 395 try
416 { 396 {
417 Communication::Pipe* pipe = new Communication::Pipe(Communication::pipeNam e, 397 Communication::Pipe* pipe = new Communication::Pipe(Communication::pipeNam e,
418 Communication::Pipe::MODE_CREATE); 398 Communication::Pipe::MODE_CREATE);
419 399
420 AutoHandle thread(CreateThread(0, 0, ClientThread, static_cast<LPVOID>(pip e), 0, 0)); 400 AutoHandle thread(CreateThread(0, 0, ClientThread, static_cast<LPVOID>(pip e), 0, 0));
421 if (!thread) 401 if (!thread)
422 { 402 {
423 delete pipe; 403 delete pipe;
424 DebugLastError("CreateThread failed"); 404 DebugLastError("CreateThread failed");
425 return 1; 405 return 1;
426 } 406 }
427 } 407 }
428 catch (std::runtime_error e) 408 catch (std::runtime_error e)
429 { 409 {
430 DebugException(e); 410 DebugException(e);
431 return 1; 411 return 1;
432 } 412 }
433 } 413 }
434 414
435 return 0; 415 return 0;
436 } 416 }
LEFTRIGHT

Powered by Google App Engine
This is Rietveld