aboutsummaryrefslogtreecommitdiff
path: root/src/engine/userexperience.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/userexperience.cpp')
-rw-r--r--src/engine/userexperience.cpp126
1 files changed, 81 insertions, 45 deletions
diff --git a/src/engine/userexperience.cpp b/src/engine/userexperience.cpp
index b6bd65dc..f6ae1491 100644
--- a/src/engine/userexperience.cpp
+++ b/src/engine/userexperience.cpp
@@ -395,29 +395,46 @@ EXTERN_C BAAPI UserExperienceOnCacheAcquireBegin(
395 __in BURN_USER_EXPERIENCE* pUserExperience, 395 __in BURN_USER_EXPERIENCE* pUserExperience,
396 __in_z_opt LPCWSTR wzPackageOrContainerId, 396 __in_z_opt LPCWSTR wzPackageOrContainerId,
397 __in_z_opt LPCWSTR wzPayloadId, 397 __in_z_opt LPCWSTR wzPayloadId,
398 __in BOOTSTRAPPER_CACHE_OPERATION operation, 398 __in_z LPWSTR* pwzSource,
399 __in_z LPCWSTR wzSource 399 __in_z LPWSTR* pwzDownloadUrl,
400 __in_z_opt LPCWSTR wzPayloadContainerId,
401 __out BOOTSTRAPPER_CACHE_OPERATION* pCacheOperation
400 ) 402 )
401{ 403{
402 HRESULT hr = S_OK; 404 HRESULT hr = S_OK;
403 BA_ONCACHEACQUIREBEGIN_ARGS args = { }; 405 BA_ONCACHEACQUIREBEGIN_ARGS args = { };
404 BA_ONCACHEACQUIREBEGIN_RESULTS results = { }; 406 BA_ONCACHEACQUIREBEGIN_RESULTS results = { };
407 *pCacheOperation = BOOTSTRAPPER_CACHE_OPERATION_NONE;
405 408
406 args.cbSize = sizeof(args); 409 args.cbSize = sizeof(args);
407 args.wzPackageOrContainerId = wzPackageOrContainerId; 410 args.wzPackageOrContainerId = wzPackageOrContainerId;
408 args.wzPayloadId = wzPayloadId; 411 args.wzPayloadId = wzPayloadId;
409 args.operation = operation; 412 args.wzSource = *pwzSource;
410 args.wzSource = wzSource; 413 args.wzDownloadUrl = *pwzDownloadUrl;
414 args.wzPayloadContainerId = wzPayloadContainerId;
415 args.recommendation = *pCacheOperation;
411 416
412 results.cbSize = sizeof(results); 417 results.cbSize = sizeof(results);
418 results.action = *pCacheOperation;
413 419
414 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIREBEGIN, &args, &results); 420 hr = SendBAMessageFromInactiveEngine(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIREBEGIN, &args, &results);
415 ExitOnFailure(hr, "BA OnCacheAcquireBegin failed."); 421 ExitOnFailure(hr, "BA OnCacheAcquireBegin failed.");
416 422
417 if (results.fCancel) 423 if (results.fCancel)
418 { 424 {
419 hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); 425 hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT);
420 } 426 }
427 else
428 {
429 // Verify the BA requested an action that is possible.
430 if (BOOTSTRAPPER_CACHE_OPERATION_DOWNLOAD == results.action && *pwzDownloadUrl && **pwzDownloadUrl ||
431 BOOTSTRAPPER_CACHE_OPERATION_EXTRACT == results.action && wzPayloadContainerId ||
432 BOOTSTRAPPER_CACHE_OPERATION_COPY == results.action ||
433 BOOTSTRAPPER_CACHE_OPERATION_NONE == results.action)
434 {
435 *pCacheOperation = results.action;
436 }
437 }
421 438
422LExit: 439LExit:
423 return hr; 440 return hr;
@@ -444,7 +461,7 @@ EXTERN_C BAAPI UserExperienceOnCacheAcquireComplete(
444 results.cbSize = sizeof(results); 461 results.cbSize = sizeof(results);
445 results.action = args.recommendation; 462 results.action = args.recommendation;
446 463
447 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIRECOMPLETE, &args, &results); 464 hr = SendBAMessageFromInactiveEngine(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIRECOMPLETE, &args, &results);
448 ExitOnFailure(hr, "BA OnCacheAcquireComplete failed."); 465 ExitOnFailure(hr, "BA OnCacheAcquireComplete failed.");
449 466
450 if (FAILED(hrStatus)) 467 if (FAILED(hrStatus))
@@ -490,6 +507,64 @@ LExit:
490 return hr; 507 return hr;
491} 508}
492 509
510EXTERN_C BAAPI UserExperienceOnCacheAcquireResolving(
511 __in BURN_USER_EXPERIENCE* pUserExperience,
512 __in_z_opt LPCWSTR wzPackageOrContainerId,
513 __in_z_opt LPCWSTR wzPayloadId,
514 __in_z LPWSTR* rgSearchPaths,
515 __in DWORD cSearchPaths,
516 __in BOOL fFoundLocal,
517 __in DWORD* pdwChosenSearchPath,
518 __in_z_opt LPCWSTR wzDownloadUrl,
519 __in_z_opt LPCWSTR wzPayloadContainerId,
520 __inout BOOTSTRAPPER_CACHE_OPERATION* pCacheOperation
521 )
522{
523 HRESULT hr = S_OK;
524 BA_ONCACHEACQUIRERESOLVING_ARGS args = { };
525 BA_ONCACHEACQUIRERESOLVING_RESULTS results = { };
526
527 args.cbSize = sizeof(args);
528 args.wzPackageOrContainerId = wzPackageOrContainerId;
529 args.wzPayloadId = wzPayloadId;
530 args.rgSearchPaths = const_cast<LPCWSTR*>(rgSearchPaths);
531 args.cSearchPaths = cSearchPaths;
532 args.fFoundLocal = fFoundLocal;
533 args.dwRecommendedSearchPath = *pdwChosenSearchPath;
534 args.wzDownloadUrl = wzDownloadUrl;
535 args.recommendation = *pCacheOperation;
536
537 results.cbSize = sizeof(results);
538 results.dwChosenSearchPath = *pdwChosenSearchPath;
539 results.action = *pCacheOperation;
540
541 hr = SendBAMessage(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIRERESOLVING, &args, &results);
542 ExitOnFailure(hr, "BA OnCacheAcquireResolving failed.");
543
544 if (results.fCancel)
545 {
546 hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT);
547 }
548 else
549 {
550 // Verify the BA requested an action that is possible.
551 if (BOOTSTRAPPER_CACHE_OPERATION_DOWNLOAD == results.action && wzDownloadUrl && *wzDownloadUrl ||
552 BOOTSTRAPPER_CACHE_OPERATION_EXTRACT == results.action && wzPayloadContainerId ||
553 BOOTSTRAPPER_CACHE_OPERATION_NONE == results.action)
554 {
555 *pCacheOperation = results.action;
556 }
557 else if (BOOTSTRAPPER_CACHE_OPERATION_COPY == results.action && results.dwChosenSearchPath < cSearchPaths)
558 {
559 *pdwChosenSearchPath = results.dwChosenSearchPath;
560 *pCacheOperation = results.action;
561 }
562 }
563
564LExit:
565 return hr;
566}
567
493EXTERN_C BAAPI UserExperienceOnCacheBegin( 568EXTERN_C BAAPI UserExperienceOnCacheBegin(
494 __in BURN_USER_EXPERIENCE* pUserExperience 569 __in BURN_USER_EXPERIENCE* pUserExperience
495 ) 570 )
@@ -1861,45 +1936,6 @@ LExit:
1861 return hr; 1936 return hr;
1862} 1937}
1863 1938
1864EXTERN_C BAAPI UserExperienceOnResolveSource(
1865 __in BURN_USER_EXPERIENCE* pUserExperience,
1866 __in_z LPCWSTR wzPackageOrContainerId,
1867 __in_z_opt LPCWSTR wzPayloadId,
1868 __in_z LPCWSTR wzLocalSource,
1869 __in_z_opt LPCWSTR wzDownloadSource,
1870 __inout BOOTSTRAPPER_RESOLVESOURCE_ACTION* pAction
1871 )
1872{
1873 HRESULT hr = S_OK;
1874 BA_ONRESOLVESOURCE_ARGS args = { };
1875 BA_ONRESOLVESOURCE_RESULTS results = { };
1876
1877 args.cbSize = sizeof(args);
1878 args.wzPackageOrContainerId = wzPackageOrContainerId;
1879 args.wzPayloadId = wzPayloadId;
1880 args.wzLocalSource = wzLocalSource;
1881 args.wzDownloadSource = wzDownloadSource;
1882 args.recommendation = *pAction;
1883
1884 results.cbSize = sizeof(results);
1885 results.action = *pAction;
1886
1887 hr = SendBAMessageFromInactiveEngine(pUserExperience, BOOTSTRAPPER_APPLICATION_MESSAGE_ONRESOLVESOURCE, &args, &results);
1888 ExitOnFailure(hr, "BA OnResolveSource failed.");
1889
1890 if (results.fCancel)
1891 {
1892 hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT);
1893 }
1894 else
1895 {
1896 *pAction = results.action;
1897 }
1898
1899LExit:
1900 return hr;
1901}
1902
1903EXTERN_C BAAPI UserExperienceOnRollbackMsiTransactionBegin( 1939EXTERN_C BAAPI UserExperienceOnRollbackMsiTransactionBegin(
1904 __in BURN_USER_EXPERIENCE* pUserExperience, 1940 __in BURN_USER_EXPERIENCE* pUserExperience,
1905 __in LPCWSTR wzTransactionId 1941 __in LPCWSTR wzTransactionId