diff --git a/DEPS b/DEPS index 7f7e48d8..f80f8a4 100644 --- a/DEPS +++ b/DEPS
@@ -126,11 +126,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'e59d40e0bcab551b47d5c009f8b4d9a94b53e0fb', + 'skia_revision': '706a7cd1e8269039c7a9a3f66f0334673bb1e8dd', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '37a08a2a6e599bb0a432f117b0bd3cba2e4dccfe', + 'v8_revision': 'b3e709a8d204ef93262ebeba15f504fbe080facc', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -138,15 +138,15 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': 'f256339a19591e6a9286ba306d667cbb6c3c9a4d', + 'angle_revision': '2b0553ce59c368b6f3e0c4a10a058f8f1addf35c', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '7fb0b73b1aa74b33c08258cef1fe800dc8a94e26', + 'swiftshader_revision': '9686153413f37c9150e511ee19b6e3fb94d7c98f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '762247be1246942790637504f6a726f522a3b399', + 'pdfium_revision': '471510ee209e8763f1ec3e7424def974bd59c3b0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling openmax_dl # and whatever else without interference from each other. @@ -186,7 +186,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': 'd77957d206cc21a12ebc213cd1239fcb0e5cc5be', + 'catapult_revision': '8bfeef929cbe262c6987b70706a22750d2b201cb', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -729,7 +729,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '43ecc6793a5c6b4962df615e644a2a79014b339c', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '6b5dce0608657cbf19a6a5ed409a95defcbec4da', 'condition': 'checkout_linux', }, @@ -1293,7 +1293,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@de578cdd6b58dab6721679f2a5f56f87c7e0e3ce', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@295aca65583b50d01a6232df43e3359dd95f3bd3', 'condition': 'checkout_src_internal', },
diff --git a/android_webview/browser/surfaces_instance.cc b/android_webview/browser/surfaces_instance.cc index 5b3a948a..b9b0c80 100644 --- a/android_webview/browser/surfaces_instance.cc +++ b/android_webview/browser/surfaces_instance.cc
@@ -28,6 +28,7 @@ #include "gpu/command_buffer/service/shared_context_state.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/size.h" +#include "ui/gfx/presentation_feedback.h" #include "ui/gfx/transform.h" #include "ui/gl/gl_context.h" #include "ui/gl/gl_share_group.h" @@ -228,6 +229,8 @@ display_->Resize(viewport); display_->DrawAndSwap(); display_->DidReceiveSwapBuffersAck(); + display_->DidReceivePresentationFeedback(gfx::PresentationFeedback( + base::TimeTicks::Now(), base::TimeDelta(), 0 /* flags */)); } void SurfacesInstance::AddChildId(const viz::SurfaceId& child_id) {
diff --git a/apps/saved_files_service_unittest.cc b/apps/saved_files_service_unittest.cc index 3d7c373c..d0679e9 100644 --- a/apps/saved_files_service_unittest.cc +++ b/apps/saved_files_service_unittest.cc
@@ -29,7 +29,7 @@ namespace { std::string GenerateId(int i) { - return base::IntToString(i) + ":filename.ext"; + return base::NumberToString(i) + ":filename.ext"; } } // namespace
diff --git a/ash/metrics/demo_session_metrics_recorder.cc b/ash/metrics/demo_session_metrics_recorder.cc index 2689f69..ca1230ac8 100644 --- a/ash/metrics/demo_session_metrics_recorder.cc +++ b/ash/metrics/demo_session_metrics_recorder.cc
@@ -98,27 +98,43 @@ return DemoModeApp::kOtherArcApp; } +AppType GetAppType(const aura::Window* window) { + return static_cast<AppType>(window->GetProperty(aura::client::kAppType)); +} + +bool IsArcWindow(const aura::Window* window) { + return (GetAppType(window) == AppType::ARC_APP); +} + const std::string* GetArcPackageName(const aura::Window* window) { + DCHECK(IsArcWindow(window)); return window->GetProperty(kArcPackageNameKey); } +bool CanGetAppFromWindow(const aura::Window* window) { + // For ARC apps we can only get the App if the package + // name is not null. + if (IsArcWindow(window)) { + return GetArcPackageName(window) != nullptr; + } + // We can always get the App for non-ARC windows. + return true; +} + const ShelfID GetShelfID(const aura::Window* window) { return ShelfID::Deserialize(window->GetProperty(kShelfIDKey)); } -AppType GetAppType(const aura::Window* window) { - return static_cast<AppType>(window->GetProperty(aura::client::kAppType)); -} - // Maps the app-like thing in |window| to a DemoModeApp value for metrics. DemoModeApp GetAppFromWindow(const aura::Window* window) { + DCHECK(CanGetAppFromWindow(window)); + AppType app_type = GetAppType(window); if (app_type == AppType::ARC_APP) { // The ShelfID app id isn't used to identify ARC++ apps since it's a hash of // both the package name and the activity. const std::string* package_name = GetArcPackageName(window); - return package_name ? GetAppFromPackageName(*package_name) - : DemoModeApp::kOtherArcApp; + return GetAppFromPackageName(*package_name); } std::string app_id = GetShelfID(window).app_id; @@ -150,6 +166,49 @@ } // namespace // Observes for changes in a window's ArcPackageName property for the purpose of +// logging of active app samples. +class DemoSessionMetricsRecorder::ActiveAppArcPackageNameObserver + : public aura::WindowObserver { + public: + explicit ActiveAppArcPackageNameObserver( + DemoSessionMetricsRecorder* metrics_recorder) + : metrics_recorder_(metrics_recorder), scoped_observer_(this) {} + + // aura::WindowObserver + void OnWindowPropertyChanged(aura::Window* window, + const void* key, + intptr_t old) override { + if (key != kArcPackageNameKey) + return; + + const std::string* package_name = GetArcPackageName(window); + + if (package_name) { + metrics_recorder_->RecordActiveAppSample( + GetAppFromPackageName(*package_name)); + } else { + VLOG(1) << "Got null ARC package name"; + } + + scoped_observer_.Remove(window); + } + + void OnWindowDestroyed(aura::Window* window) override { + if (scoped_observer_.IsObserving(window)) + scoped_observer_.Remove(window); + } + + void ObserveWindow(aura::Window* window) { scoped_observer_.Add(window); } + + private: + DemoSessionMetricsRecorder* metrics_recorder_; + ScopedObserver<aura::Window, ActiveAppArcPackageNameObserver> + scoped_observer_; + + DISALLOW_COPY_AND_ASSIGN(ActiveAppArcPackageNameObserver); +}; + +// Observes changes in a window's ArcPackageName property for the purpose of // logging of unique launches of ARC apps. class DemoSessionMetricsRecorder::UniqueAppsLaunchedArcPackageNameObserver : public aura::WindowObserver { @@ -167,21 +226,22 @@ const std::string* package_name = GetArcPackageName(window); - if (package_name != nullptr) { + if (package_name) { metrics_recorder_->RecordAppLaunch(*package_name, AppType::ARC_APP); } else { VLOG(1) << "Got null ARC package name"; } - window->RemoveObserver(this); + scoped_observer_.Remove(window); + } + + void OnWindowDestroyed(aura::Window* window) override { + if (scoped_observer_.IsObserving(window)) + scoped_observer_.Remove(window); } void ObserveWindow(aura::Window* window) { scoped_observer_.Add(window); } - void OnWindowDestroyed(aura::Window* window) override { - window->RemoveObserver(this); - } - private: DemoSessionMetricsRecorder* metrics_recorder_; ScopedObserver<aura::Window, UniqueAppsLaunchedArcPackageNameObserver> @@ -195,7 +255,9 @@ : timer_(std::move(timer)), observer_(this), unique_apps_arc_package_name_observer_( - std::make_unique<UniqueAppsLaunchedArcPackageNameObserver>(this)) { + std::make_unique<UniqueAppsLaunchedArcPackageNameObserver>(this)), + active_app_arc_package_name_observer_( + std::make_unique<ActiveAppArcPackageNameObserver>(this)) { // Outside of tests, use a normal repeating timer. if (!timer_.get()) timer_ = std::make_unique<base::RepeatingTimer>(); @@ -311,6 +373,10 @@ &DemoSessionMetricsRecorder::TakeSampleOrPause); } +void DemoSessionMetricsRecorder::RecordActiveAppSample(DemoModeApp app) { + unreported_samples_.push_back(app); +} + void DemoSessionMetricsRecorder::TakeSampleOrPause() { // After enough inactive time, assume the user left. if (++periods_since_activity_ > kMaxPeriodsWithoutActivity) { @@ -320,15 +386,21 @@ return; } - const aura::Window* window = - Shell::Get()->activation_client()->GetActiveWindow(); + aura::Window* window = Shell::Get()->activation_client()->GetActiveWindow(); if (!window) return; + // If there is no ARC package name available, set up a listener + // to be informed when it is available. + if (IsArcWindow(window) && !CanGetAppFromWindow(window)) { + active_app_arc_package_name_observer_->ObserveWindow(window); + return; + } + DemoModeApp app = window->type() == aura::client::WINDOW_TYPE_NORMAL ? GetAppFromWindow(window) : DemoModeApp::kOtherWindow; - unreported_samples_.push_back(app); + RecordActiveAppSample(app); } void DemoSessionMetricsRecorder::ReportSamples() {
diff --git a/ash/metrics/demo_session_metrics_recorder.h b/ash/metrics/demo_session_metrics_recorder.h index a92a803..639383f 100644 --- a/ash/metrics/demo_session_metrics_recorder.h +++ b/ash/metrics/demo_session_metrics_recorder.h
@@ -91,6 +91,9 @@ // Emits histograms for recorded samples. void ReportSamples(); + // Records |app| as being seen while sampling all active apps. + void RecordActiveAppSample(DemoModeApp app); + // Indicates whether the specified app_id should be recorded for // the unique-apps-launched stat. bool ShouldRecordAppLaunch(const std::string& app_id); @@ -123,11 +126,15 @@ ScopedObserver<ui::UserActivityDetector, DemoSessionMetricsRecorder> observer_; + class ActiveAppArcPackageNameObserver; class UniqueAppsLaunchedArcPackageNameObserver; std::unique_ptr<UniqueAppsLaunchedArcPackageNameObserver> unique_apps_arc_package_name_observer_; + std::unique_ptr<ActiveAppArcPackageNameObserver> + active_app_arc_package_name_observer_; + DISALLOW_COPY_AND_ASSIGN(DemoSessionMetricsRecorder); };
diff --git a/ash/metrics/demo_session_metrics_recorder_unittest.cc b/ash/metrics/demo_session_metrics_recorder_unittest.cc index 26b9c6c..e44ded46 100644 --- a/ash/metrics/demo_session_metrics_recorder_unittest.cc +++ b/ash/metrics/demo_session_metrics_recorder_unittest.cc
@@ -239,6 +239,54 @@ histogram_tester_->ExpectTotalCount("DemoMode.ActiveApp", 10); } +// Verify samples are correct when multiple windows types become active. +TEST_F(DemoSessionMetricsRecorderTest, ActiveAppAfterDelayedArcPackageName) { + // Create an ARC window with an empty package name. + std::unique_ptr<aura::Window> arc_window = CreateArcWindow(""); + + wm::ActivateWindow(arc_window.get()); + FireTimer(); + SendUserActivity(); + + // There should be no app activity recorded yet, because there was + // no package name in the ARC window. + histogram_tester_->ExpectTotalCount("DemoMode.ActiveApp", 0); + + // Set the package name after window creation/activation. + arc_window->SetProperty(kArcPackageNameKey, + new std::string("com.google.Photos")); + + // Trigger sample reporting by sending user activity. + SendUserActivity(); + + histogram_tester_->ExpectBucketCount( + "DemoMode.ActiveApp", + DemoSessionMetricsRecorder::DemoModeApp::kGooglePhotos, 1); + + // Set the package name again. The count shouldn't change because + // after getting the package name once, we stop observing the + // window. + arc_window->SetProperty(kArcPackageNameKey, + new std::string("com.google.Photos")); + // Trigger sample reporting by sending user activity. + SendUserActivity(); + + histogram_tester_->ExpectBucketCount( + "DemoMode.ActiveApp", + DemoSessionMetricsRecorder::DemoModeApp::kGooglePhotos, 1); + + // Delete the window. + arc_window.reset(); + + // Trigger sample reporting by sending user activity. + SendUserActivity(); + + // The count should not be affected. + histogram_tester_->ExpectBucketCount( + "DemoMode.ActiveApp", + DemoSessionMetricsRecorder::DemoModeApp::kGooglePhotos, 1); +} + // Verify popup windows are categorized as kOtherWindow. TEST_F(DemoSessionMetricsRecorderTest, PopupWindows) { std::unique_ptr<aura::Window> chrome_app_window = @@ -516,6 +564,14 @@ arc_window_1->SetProperty(kArcPackageNameKey, new std::string("com.google.Photos")); + // Set the package name again. This shouldn't cause a double-recording + // of the stat. + arc_window_1->SetProperty(kArcPackageNameKey, + new std::string("com.google.Photos")); + + // Delete the window. + arc_window_1.reset(); + std::unique_ptr<aura::Window> arc_window_2 = CreateArcWindow("com.google.Maps"); wm::ActivateWindow(arc_window_2.get());
diff --git a/ash/public/cpp/shelf_struct_mojom_traits.h b/ash/public/cpp/shelf_struct_mojom_traits.h index 3f6dad6c..093f9e8 100644 --- a/ash/public/cpp/shelf_struct_mojom_traits.h +++ b/ash/public/cpp/shelf_struct_mojom_traits.h
@@ -160,6 +160,8 @@ return ash::mojom::ShelfLaunchSource::APP_LIST; case ash::LAUNCH_FROM_APP_LIST_SEARCH: return ash::mojom::ShelfLaunchSource::APP_LIST_SEARCH; + case ash::LAUNCH_FROM_SHELF: + return ash::mojom::ShelfLaunchSource::SHELF; } NOTREACHED(); return ash::mojom::ShelfLaunchSource::UNKNOWN; @@ -177,6 +179,9 @@ case ash::mojom::ShelfLaunchSource::APP_LIST_SEARCH: *out = ash::LAUNCH_FROM_APP_LIST_SEARCH; return true; + case ash::mojom::ShelfLaunchSource::SHELF: + *out = ash::LAUNCH_FROM_SHELF; + return true; } NOTREACHED(); return false;
diff --git a/ash/public/cpp/shelf_types.h b/ash/public/cpp/shelf_types.h index ed21eaf..fdf2c1f2 100644 --- a/ash/public/cpp/shelf_types.h +++ b/ash/public/cpp/shelf_types.h
@@ -78,7 +78,7 @@ // Source of the launch or activation request, for tracking. enum ShelfLaunchSource { - // The item was launched from an unknown source (ie. not the app list). + // The item was launched from an unknown source. LAUNCH_FROM_UNKNOWN, // The item was launched from a generic app list view. @@ -86,6 +86,9 @@ // The item was launched from an app list search view. LAUNCH_FROM_APP_LIST_SEARCH, + + // The item was launched from the shelf itself. + LAUNCH_FROM_SHELF, }; // The actions that may be performed when a shelf item is selected.
diff --git a/ash/public/interfaces/shelf.mojom b/ash/public/interfaces/shelf.mojom index 8bb2c6f..b048e03 100644 --- a/ash/public/interfaces/shelf.mojom +++ b/ash/public/interfaces/shelf.mojom
@@ -46,9 +46,10 @@ // Source of the launch or activation request, for tracking. // These values match ash::ShelfLaunchSource. enum ShelfLaunchSource { - UNKNOWN, // The item was launched from outside the app list. + UNKNOWN, // The item was launched from elsewhere. APP_LIST, // The item was launched from a generic app list view. APP_LIST_SEARCH, // The item was launched from an app list search view. + SHELF, // The item was launched from the shelf. }; // The Shelf controller allows clients (eg. Chrome) to control the ash shelf.
diff --git a/ash/shelf/app_list_shelf_item_delegate_unittest.cc b/ash/shelf/app_list_shelf_item_delegate_unittest.cc index 8f1d785d..96d55ee 100644 --- a/ash/shelf/app_list_shelf_item_delegate_unittest.cc +++ b/ash/shelf/app_list_shelf_item_delegate_unittest.cc
@@ -51,7 +51,7 @@ ui::EventType::ET_MOUSE_PRESSED, ui::VKEY_UNKNOWN, ui::EF_NONE); delegate()->ItemSelected( std::move(test_event), GetPrimaryDisplay().id(), - ShelfLaunchSource::LAUNCH_FROM_UNKNOWN, + ShelfLaunchSource::LAUNCH_FROM_SHELF, base::BindOnce( [](ash::ShelfAction, base::Optional<ash::MenuItemList>) {})); ASSERT_TRUE(wm::GetWindowState(w1.get())->IsMinimized());
diff --git a/ash/shelf/shelf.cc b/ash/shelf/shelf.cc index ad6ce8d..a2a91716 100644 --- a/ash/shelf/shelf.cc +++ b/ash/shelf/shelf.cc
@@ -106,7 +106,7 @@ ShelfItemDelegate* item_delegate = shelf_model->GetShelfItemDelegate(item.id); std::unique_ptr<ui::Event> event = std::make_unique<ui::KeyEvent>( ui::ET_KEY_RELEASED, ui::VKEY_UNKNOWN, ui::EF_NONE); - item_delegate->ItemSelected(std::move(event), display_id, LAUNCH_FROM_UNKNOWN, + item_delegate->ItemSelected(std::move(event), display_id, LAUNCH_FROM_SHELF, base::DoNothing()); }
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc index 43aba252..8b4e6b0 100644 --- a/ash/shelf/shelf_view.cc +++ b/ash/shelf/shelf_view.cc
@@ -684,7 +684,7 @@ // Notify the item of its selection; handle the result in AfterItemSelected. item_awaiting_response_ = item.id; model_->GetShelfItemDelegate(item.id)->ItemSelected( - ui::Event::Clone(event), GetDisplayIdForView(this), LAUNCH_FROM_UNKNOWN, + ui::Event::Clone(event), GetDisplayIdForView(this), LAUNCH_FROM_SHELF, base::BindOnce(&ShelfView::AfterItemSelected, weak_factory_.GetWeakPtr(), item, sender, base::Passed(ui::Event::Clone(event)), ink_drop));
diff --git a/base/android/java/src/org/chromium/base/LocaleUtils.java b/base/android/java/src/org/chromium/base/LocaleUtils.java index 05d39029a..a993647 100644 --- a/base/android/java/src/org/chromium/base/LocaleUtils.java +++ b/base/android/java/src/org/chromium/base/LocaleUtils.java
@@ -172,6 +172,29 @@ } /** + * Extracts language from a language tag. + * @param languageTag language tag of the form xx-XX or xx. + * @return the xx part of the language tag. + */ + public static String toLanguage(String languageTag) { + int pos = languageTag.indexOf('-'); + if (pos < 0) { + return languageTag; + } + return languageTag.substring(0, pos); + } + + /** @return true if the language is supported by Chrome. */ + public static boolean isLanguageSupported(String language) { + for (String languageTag : BuildConfig.COMPRESSED_LOCALES) { + if (toLanguage(languageTag).equals(language)) { + return true; + } + } + return false; + } + + /** * @return a comma separated language tags string that represents a default locale. * Each language tag is well-formed IETF BCP 47 language tag with language and country * code.
diff --git a/base/android/javatests/src/org/chromium/base/LocaleUtilsTest.java b/base/android/javatests/src/org/chromium/base/LocaleUtilsTest.java index fc37a1f..37db141 100644 --- a/base/android/javatests/src/org/chromium/base/LocaleUtilsTest.java +++ b/base/android/javatests/src/org/chromium/base/LocaleUtilsTest.java
@@ -259,4 +259,16 @@ locale = new Locale("en"); Assert.assertEquals(locale, LocaleUtils.forLanguageTagCompat(languageTag)); } + + // Test for toLanguage. + @Test + @SmallTest + public void testToLanguage() { + Assert.assertEquals("en", LocaleUtils.toLanguage("en-US")); + Assert.assertEquals("en", LocaleUtils.toLanguage("en")); + Assert.assertEquals("", LocaleUtils.toLanguage("-")); + Assert.assertEquals("", LocaleUtils.toLanguage("-US")); + Assert.assertEquals("", LocaleUtils.toLanguage("")); + Assert.assertEquals("fil", LocaleUtils.toLanguage("fil")); + } }
diff --git a/base/task/task_scheduler/scheduler_worker_pool_impl.cc b/base/task/task_scheduler/scheduler_worker_pool_impl.cc index e4253a8b..34d6de2 100644 --- a/base/task/task_scheduler/scheduler_worker_pool_impl.cc +++ b/base/task/task_scheduler/scheduler_worker_pool_impl.cc
@@ -919,39 +919,33 @@ DCHECK_CALLED_ON_VALID_THREAD(worker_thread_checker_); DCHECK(worker_only().is_running_task); - bool must_schedule_adjust_max_tasks = false; SchedulerWorkerActionExecutor executor(outer_); - { - AutoSchedulerLock auto_lock(outer_->lock_); + AutoSchedulerLock auto_lock(outer_->lock_); - DCHECK(!incremented_max_tasks_since_blocked_); - DCHECK(read_worker().may_block_start_time.is_null()); - incremented_max_tasks_since_blocked_ = true; - outer_->IncrementMaxTasksLockRequired( - read_worker().is_running_best_effort_task); + DCHECK(!incremented_max_tasks_since_blocked_); + DCHECK(read_worker().may_block_start_time.is_null()); + incremented_max_tasks_since_blocked_ = true; + outer_->IncrementMaxTasksLockRequired( + read_worker().is_running_best_effort_task); - // If the number of workers was less than the old max tasks, PostTask - // would've handled creating extra workers during WakeUpOneWorker. - // Therefore, we don't need to do anything here. - if (outer_->workers_.size() < outer_->max_tasks_ - 1) - return; + // If the number of workers was less than the old max tasks, PostTask would've + // handled creating extra workers during WakeUpOneWorker. Therefore, we don't + // need to do anything here. + if (outer_->workers_.size() < outer_->max_tasks_ - 1) + return; - if (outer_->priority_queue_.IsEmpty()) { - outer_->MaintainAtLeastOneIdleWorkerLockRequired(&executor); - } else { - // TODO(crbug.com/757897): We may create extra workers in this case: - // |workers.size()| was equal to the old |max_tasks_|, we had multiple - // ScopedBlockingCalls in parallel and we had work on the PQ. - outer_->WakeUpOneWorkerLockRequired(&executor); - } - - must_schedule_adjust_max_tasks = - outer_->MustScheduleAdjustMaxTasksLockRequired(); + if (outer_->priority_queue_.IsEmpty()) { + outer_->MaintainAtLeastOneIdleWorkerLockRequired(&executor); + } else { + // TODO(crbug.com/757897): We may create extra workers in this case: + // |workers.size()| was equal to the old |max_tasks_|, we had multiple + // ScopedBlockingCalls in parallel and we had work on the PQ. + outer_->WakeUpOneWorkerLockRequired(&executor); } - // TODO(crbug.com/813857): This can be better handled in the PostTask() - // codepath. We really only should do this if there are tasks pending. - if (must_schedule_adjust_max_tasks) - outer_->ScheduleAdjustMaxTasks(); + + // Entering a WILL_BLOCK ScopedBlockingCall is not expected to require + // AdjustMaxTasks() to be scheduled. + DCHECK(!outer_->MustScheduleAdjustMaxTasksLockRequired()); } bool SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::
diff --git a/ui/android/build/create_ui_locale_resources.py b/build/android/gyp/create_ui_locale_resources.py similarity index 80% rename from ui/android/build/create_ui_locale_resources.py rename to build/android/gyp/create_ui_locale_resources.py index d62f636..97868cb 100755 --- a/ui/android/build/create_ui_locale_resources.py +++ b/build/android/gyp/create_ui_locale_resources.py
@@ -20,8 +20,10 @@ import sys import zipfile -sys.path.insert(0, os.path.join( - os.path.dirname(__file__), '..', '..', '..', 'build', 'android', 'gyp')) +sys.path.insert( + 0, + os.path.join( + os.path.dirname(__file__), '..', '..', '..', 'build', 'android', 'gyp')) from util import build_utils from util import resource_utils @@ -50,20 +52,21 @@ zip_path = 'values-%s/strings.xml' % android_locale else: zip_path = 'values/strings.xml' - build_utils.AddToZipHermetic(out_zip, zip_path, data=locale_data, - compress=False) + build_utils.AddToZipHermetic( + out_zip, zip_path, data=locale_data, compress=False) def main(): parser = argparse.ArgumentParser( - description=__doc__, - formatter_class=argparse.RawDescriptionHelpFormatter) + description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) build_utils.AddDepfileOption(parser) - parser.add_argument('--locale-list', required=True, - help='GN-list of Chrome-specific locale names.') - parser.add_argument('--output-zip', required=True, - help='Output zip archive path.') + parser.add_argument( + '--locale-list', + required=True, + help='GN-list of Chrome-specific locale names.') + parser.add_argument( + '--output-zip', required=True, help='Output zip archive path.') args = parser.parse_args() @@ -83,5 +86,6 @@ if args.depfile: build_utils.WriteDepfile(args.depfile, args.output_zip) + if __name__ == '__main__': main()
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni index 9cb11ab8..4743b20 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni
@@ -4231,3 +4231,41 @@ } } } + +# Generate an Android resources target that contains localized strings +# describing the current locale used by the Android framework to display +# UI strings. These are used by +# org.chromium.chrome.browser.ChromeLocalizationUtils. +# +# Variables: +# ui_locales: List of Chromium locale names to generate resources for. +# +template("generate_ui_locale_resources") { + _generating_target_name = "${target_name}__generate" + _rebased_output_zip_path = rebase_path(target_gen_dir, root_gen_dir) + _output_zip = "${root_out_dir}/resource_zips/${_rebased_output_zip_path}/" + + "${target_name}.zip" + + _locales = invoker.ui_locales + _depfile = "$target_gen_dir/$target_name.d" + + action(_generating_target_name) { + script = "//build/android/gyp/create_ui_locale_resources.py" + depfile = _depfile + outputs = [ + _output_zip, + ] + args = [ + "--locale-list=$_locales", + "--depfile", + rebase_path(_depfile, root_build_dir), + "--output-zip", + rebase_path(_output_zip, root_build_dir), + ] + } + + android_generated_resources(target_name) { + generating_target_name = ":$_generating_target_name" + generated_resources_zip = _output_zip + } +}
diff --git a/build/config/gcc/BUILD.gn b/build/config/gcc/BUILD.gn index 5499644..28b0bf7 100644 --- a/build/config/gcc/BUILD.gn +++ b/build/config/gcc/BUILD.gn
@@ -65,11 +65,10 @@ config("rpath_for_built_shared_libraries") { if (!is_android) { # Note: Android doesn't support rpath. - rpath_link = "." if (current_toolchain != default_toolchain || gcc_target_rpath == "") { ldflags = [ # Want to pass "\$". GN will re-escape as required for ninja. - "-Wl,-rpath=\$ORIGIN/${rpath_link}", + "-Wl,-rpath=\$ORIGIN/.", ] } else { ldflags = [ "-Wl,-rpath=${gcc_target_rpath}" ]
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index b314812..84c781a 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -7f1a007213780da98da29a3c80afc84e4f896e79 \ No newline at end of file +e9b630cce9b6602293613dd32852599dbc48198e \ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index abe730e..ff2878ec 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -88f471b1f1b5b6a38a905f77ca2ff8d40cf6a9ed \ No newline at end of file +2a404570a08c9e1687c7b896cb63af773fc88b42 \ No newline at end of file
diff --git a/build/fuchsia/test_runner.py b/build/fuchsia/test_runner.py index cd45024..32a0ea4a 100755 --- a/build/fuchsia/test_runner.py +++ b/build/fuchsia/test_runner.py
@@ -21,8 +21,11 @@ from run_package import RunPackage, RunPackageArgs DEFAULT_TEST_CONCURRENCY = 4 +# TODO(https://crbug.com/930182): Migrate off of deprecated global storage. TEST_RESULT_PATH = '/data/test_summary.json' +TEST_RESULT_SCP_PATH = '/data/deprecated-global-persistent-storage/test_summary.json' TEST_FILTER_PATH = '/data/test_filter.txt' +TEST_FILTER_SCP_PATH = '/data/deprecated-global-persistent-storage/test_filter.txt' def main(): parser = argparse.ArgumentParser() @@ -103,7 +106,7 @@ target.Start() if args.test_launcher_filter_file: - target.PutFile(args.test_launcher_filter_file, TEST_FILTER_PATH) + target.PutFile(args.test_launcher_filter_file, TEST_FILTER_SCP_PATH) child_args.append('--test-launcher-filter-file=' + TEST_FILTER_PATH) test_server = None @@ -119,7 +122,7 @@ test_server.Stop() if args.test_launcher_summary_output: - target.GetFile(TEST_RESULT_PATH, args.test_launcher_summary_output) + target.GetFile(TEST_RESULT_SCP_PATH, args.test_launcher_summary_output) return returncode
diff --git a/cc/test/skia_common.cc b/cc/test/skia_common.cc index e942b7a..0efdbef 100644 --- a/cc/test/skia_common.cc +++ b/cc/test/skia_common.cc
@@ -171,19 +171,19 @@ for (size_t pos = json.find(kSkottieWidthToken); pos != std::string::npos; pos = json.find(kSkottieWidthToken)) { json.replace(pos, strlen(kSkottieWidthToken), - base::IntToString(size.width())); + base::NumberToString(size.width())); } for (size_t pos = json.find(kSkottieHeightToken); pos != std::string::npos; pos = json.find(kSkottieHeightToken)) { json.replace(pos, strlen(kSkottieHeightToken), - base::IntToString(size.height())); + base::NumberToString(size.height())); } for (size_t pos = json.find(kSkottieDurationToken); pos != std::string::npos; pos = json.find(kSkottieDurationToken)) { json.replace(pos, strlen(kSkottieDurationToken), - base::IntToString(duration_secs * kFps)); + base::NumberToString(duration_secs * kFps)); } return base::MakeRefCounted<SkottieWrapper>(
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index 7eee69f..781a2066 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -1648,22 +1648,18 @@ void LayerTreeHostImpl::NotifyTileStateChanged(const Tile* tile) { TRACE_EVENT0("cc", "LayerTreeHostImpl::NotifyTileStateChanged"); - if (active_tree_) { - LayerImpl* layer_impl = - active_tree_->FindActiveTreeLayerById(tile->layer_id()); - if (layer_impl) - layer_impl->NotifyTileStateChanged(tile); - } + LayerImpl* layer_impl = nullptr; - if (pending_tree_) { - LayerImpl* layer_impl = - pending_tree_->FindPendingTreeLayerById(tile->layer_id()); - if (layer_impl) - layer_impl->NotifyTileStateChanged(tile); - } + // We must have a pending or active tree layer here, since the layer is + // guaranteed to outlive its tiles. + if (tile->tiling()->tree() == WhichTree::PENDING_TREE) + layer_impl = pending_tree_->FindPendingTreeLayerById(tile->layer_id()); + else + layer_impl = active_tree_->FindActiveTreeLayerById(tile->layer_id()); - // Check for a non-null active tree to avoid doing this during shutdown. - if (active_tree_ && !client_->IsInsideDraw() && tile->required_for_draw()) { + layer_impl->NotifyTileStateChanged(tile); + + if (!client_->IsInsideDraw() && tile->required_for_draw()) { // The LayerImpl::NotifyTileStateChanged() should damage the layer, so this // redraw will make those tiles be displayed. SetNeedsRedraw();
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc index bbdc75f..1f18015 100644 --- a/cc/trees/layer_tree_host_unittest.cc +++ b/cc/trees/layer_tree_host_unittest.cc
@@ -9033,5 +9033,65 @@ SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestRequestForceSendMetadata); +class LayerTreeHostTestPartialTileDamage : public LayerTreeHostTest { + public: + LayerTreeHostTestPartialTileDamage() + : partial_damage_(20, 20, 45, 60), layer_size_(512, 512) {} + + void BeginTest() override { PostSetNeedsCommitToMainThread(); } + void AfterTest() override {} + + void InitializeSettings(LayerTreeSettings* settings) override { + settings->default_tile_size = gfx::Size(256, 256); + } + + void SetupTree() override { + content_layer_client_.set_bounds(layer_size_); + content_layer_client_.set_fill_with_nonsolid_color(true); + layer_tree_host()->SetRootLayer( + FakePictureLayer::Create(&content_layer_client_)); + layer_tree_host()->root_layer()->SetBounds(layer_size_); + LayerTreeTest::SetupTree(); + } + + void DoPartialTileInvalidation() { + layer_tree_host()->root_layer()->SetNeedsDisplayRect(partial_damage_); + } + + void DisplayReceivedCompositorFrameOnThread( + const viz::CompositorFrame& frame) override { + frame_count_on_impl_thread_++; + gfx::Rect frame_damage = frame.render_pass_list.back()->damage_rect; + + switch (frame_count_on_impl_thread_) { + case 1: + // We have the first frame, which should damage everything. Schedule + // another which partially damages one of tiles. + MainThreadTaskRunner()->PostTask( + FROM_HERE, + base::BindOnce( + &LayerTreeHostTestPartialTileDamage::DoPartialTileInvalidation, + base::Unretained(this))); + EXPECT_EQ(frame_damage, gfx::Rect(layer_size_)); + break; + case 2: + EXPECT_EQ(frame_damage, partial_damage_); + EndTest(); + } + } + + protected: + const gfx::Rect partial_damage_; + const gfx::Size layer_size_; + + // Main thread. + FakeContentLayerClient content_layer_client_; + + // Impl thread. + int frame_count_on_impl_thread_ = 0; +}; + +MULTI_THREAD_TEST_F(LayerTreeHostTestPartialTileDamage); + } // namespace } // namespace cc
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 44ad8773..56fd3bb 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -90,6 +90,10 @@ [ "manifest_package=$trichrome_library_package" ] } +generate_ui_locale_resources("ui_locale_string_resources") { + ui_locales = locales +} + android_resources("chrome_app_java_resources") { resource_dirs = [ "java/res", @@ -106,6 +110,7 @@ deps = [ ":chrome_strings_grd", + ":ui_locale_string_resources", "//chrome/android/webapk/libs/common:splash_resources", "//chrome/app:java_strings_grd", "//components/autofill/android:autofill_java_resources",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java index 72f8c07..d0bd7b2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -1500,13 +1500,6 @@ mComponent.resolveContextualSuggestionsCoordinator(); } - - // TODO(yusufo) : Move the condition here to FeatureUtils and the resolution to a - // ChromeTabbedActivity specific place. - if (!isTablet() && !SysUtils.isLowEndDevice() - && ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID)) { - mComponent.resolveTabGridCoordinator(); - } } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java index 0b5dafc..dd496cc 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivitySessionTracker.java
@@ -35,6 +35,8 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.util.FeatureUtilities; +import java.util.Locale; + /** * Tracks the foreground session state for the Chrome activities. */ @@ -133,6 +135,7 @@ UmaUtils.recordForegroundStartTime(); updatePasswordEchoState(); FontSizePrefs.getInstance(mApplication).onSystemFontScaleChanged(); + recordWhetherSystemAndAppLanguagesDiffer(); updateAcceptLanguages(); mVariationsSession.start(mApplication); mPowerBroadcastReceiver.onForegroundSessionStart(); @@ -248,6 +251,22 @@ } /** + * Records whether Chrome was started in a language other than the system language but we + * support the system language. That can happen if the user changes the system language and the + * required language split cannot be installed in time. + */ + private void recordWhetherSystemAndAppLanguagesDiffer() { + String uiLanguage = + LocaleUtils.toLanguage(ChromeLocalizationUtils.getUiLocaleStringForCompressedPak()); + String systemLanguage = + LocaleUtils.toLanguage(LocaleUtils.toLanguageTag(Locale.getDefault())); + boolean isWrongLanguage = !systemLanguage.equals(uiLanguage) + && LocaleUtils.isLanguageSupported(systemLanguage); + RecordHistogram.recordBooleanHistogram( + "Android.Language.WrongLanguageAfterResume", isWrongLanguage); + } + + /** * @return The PowerBroadcastReceiver for the browser process. */ @VisibleForTesting
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeLocalizationUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeLocalizationUtils.java new file mode 100644 index 0000000..2f53c4c1 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeLocalizationUtils.java
@@ -0,0 +1,34 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser; + +import org.chromium.base.ContextUtils; +import org.chromium.chrome.R; + +/** + * This class provides the locale related methods for Chrome. + */ +public class ChromeLocalizationUtils { + /** + * @return the current Chromium locale used to display UI elements. + * + * This matches what the Android framework resolves localized string resources to, using the + * system locale and the application's resources. For example, if the system uses a locale + * that is not supported by Chromium resources (e.g. 'fur-rIT'), Android will likely fallback + * to 'en-rUS' strings when Resources.getString() is called, and this method will return the + * matching Chromium name (i.e. 'en-US'). + * + * Using this value is necessary to ensure that the strings accessed from the locale .pak files + * from C++ match the resources displayed by the Java-based UI views. + */ + public static String getUiLocaleStringForCompressedPak() { + return ContextUtils.getApplicationContext().getResources().getString( + R.string.current_detected_ui_locale_name); + } + + private ChromeLocalizationUtils() { + /* cannot be instantiated */ + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java index 3a54e26..14368f2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -645,6 +645,10 @@ UsageStatsService.getInstance().createPageViewObserver(mTabModelSelectorImpl, this); } + if (FeatureUtilities.isGridTabSwitcherEnabled(this)) { + getComponent().resolveGridTabSwitcherCoordinator(); + } + super.finishNativeInitialization(); } finally { TraceEvent.end("ChromeTabbedActivity.finishNativeInitialization");
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dependency_injection/ChromeActivityComponent.java b/chrome/android/java/src/org/chromium/chrome/browser/dependency_injection/ChromeActivityComponent.java index c3ee20b..cc47e66 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/dependency_injection/ChromeActivityComponent.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/dependency_injection/ChromeActivityComponent.java
@@ -6,7 +6,7 @@ import org.chromium.chrome.browser.contextual_suggestions.ContextualSuggestionsCoordinator; import org.chromium.chrome.browser.contextual_suggestions.ContextualSuggestionsModule; -import org.chromium.chrome.browser.tasks.tab_list_ui.TabGridCoordinator; +import org.chromium.chrome.browser.tasks.tab_list_ui.GridTabSwitcherCoordinator; import dagger.Subcomponent; @@ -20,5 +20,5 @@ // Temporary getters for DI migration process. ContextualSuggestionsCoordinator resolveContextualSuggestionsCoordinator(); - TabGridCoordinator resolveTabGridCoordinator(); + GridTabSwitcherCoordinator resolveGridTabSwitcherCoordinator(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java index cb77242..0eca769 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
@@ -16,6 +16,7 @@ import org.chromium.base.CommandLine; import org.chromium.base.ContentUriUtils; import org.chromium.base.ContextUtils; +import org.chromium.base.LocaleUtils; import org.chromium.base.Log; import org.chromium.base.PathUtils; import org.chromium.base.SysUtils; @@ -28,6 +29,7 @@ import org.chromium.base.task.AsyncTask; import org.chromium.chrome.browser.AppHooks; import org.chromium.chrome.browser.ChromeApplication; +import org.chromium.chrome.browser.ChromeLocalizationUtils; import org.chromium.chrome.browser.ChromeStrictMode; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.FileProviderHelper; @@ -257,7 +259,8 @@ // Check to see if we need to extract any new resources from the APK. This could // be on first run when we need to extract all the .pak files we need, or after // the user has switched locale, in which case we want new locale resources. - ResourceExtractor.get().startExtractingResources(); + ResourceExtractor.get().startExtractingResources(LocaleUtils.toLanguage( + ChromeLocalizationUtils.getUiLocaleStringForCompressedPak())); mPostInflationStartupComplete = true; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilder.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilder.java index ea63751..a085395f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilder.java
@@ -103,5 +103,8 @@ Notification buildWithBigTextStyle(String bigText); + @Deprecated Notification build(); + + ChromeNotification buildChromeNotification(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilder.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilder.java index df09a54..cdfd21754 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilder.java
@@ -349,4 +349,10 @@ public Notification build() { return mBuilder.build(); } + + @Override + public ChromeNotification buildChromeNotification() { + assert mMetadata != null; + return new ChromeNotification(build(), mMetadata); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationCompatBuilder.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationCompatBuilder.java index bfa7d8a..8375669 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationCompatBuilder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationCompatBuilder.java
@@ -289,4 +289,10 @@ public Notification build() { return mBuilder.build(); } + + @Override + public ChromeNotification buildChromeNotification() { + assert mMetadata != null; + return new ChromeNotification(build(), mMetadata); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxy.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxy.java index d6a69a1..aeaec77c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxy.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxy.java
@@ -40,9 +40,13 @@ @TargetApi(Build.VERSION_CODES.O) void deleteNotificationChannel(String id); + @Deprecated void notify(int id, Notification notification); + @Deprecated void notify(String tag, int id, Notification notification); + void notify(ChromeNotification notification); + @TargetApi(Build.VERSION_CODES.O) NotificationChannel getNotificationChannel(String channelId);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxyImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxyImpl.java index ce84f25..b7f4035 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxyImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationManagerProxyImpl.java
@@ -100,6 +100,13 @@ mNotificationManager.notify(tag, id, notification); } + @Override + public void notify(ChromeNotification notification) { + assert notification.getMetadata() != null; + mNotificationManager.notify(notification.getMetadata().tag, notification.getMetadata().id, + notification.getNotification()); + } + @TargetApi(Build.VERSION_CODES.O) @Override public NotificationChannel getNotificationChannel(String channelId) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/AutoFetchNotifier.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/AutoFetchNotifier.java index c2820ad2..2ada247 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/AutoFetchNotifier.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/AutoFetchNotifier.java
@@ -19,6 +19,7 @@ import org.chromium.base.VisibleForTesting; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; +import org.chromium.base.metrics.CachedMetrics.EnumeratedHistogramSample; import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.R; import org.chromium.chrome.browser.IntentHandler; @@ -340,9 +341,11 @@ } private static void reportCompleteNotificationAction(@NotificationAction int action) { - RecordHistogram.recordEnumeratedHistogram( - "OfflinePages.AutoFetch.CompleteNotificationAction", action, - NotificationAction.NUM_ENTRIES); + // Native may or may not be running, so use CachedMetrics.EnumeratedHistogramSample. + EnumeratedHistogramSample sample = + new EnumeratedHistogramSample("OfflinePages.AutoFetch.CompleteNotificationAction", + NotificationAction.NUM_ENTRIES); + sample.record(action); } private static boolean isShowingInProgressNotification() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerSuggestionProcessor.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerSuggestionProcessor.java index 9cc5902..8ff1a73 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerSuggestionProcessor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerSuggestionProcessor.java
@@ -129,7 +129,6 @@ * Sets both lines of the Omnibox suggestion based on an Answers in Suggest result. */ private void setStateForSuggestion(PropertyModel model, SuggestionAnswer answer) { - float density = mContext.getResources().getDisplayMetrics().density; SuggestionAnswer.ImageLine firstLine = answer.getFirstLine(); SuggestionAnswer.ImageLine secondLine = answer.getSecondLine(); int numAnswerLines = parseNumAnswerLines(secondLine.getTextFields()); @@ -140,7 +139,7 @@ if (mEnableNewAnswerLayout) { details = AnswerTextNewLayout.from(mContext, answer); } else { - details = AnswerTextClassic.from(mContext, answer, density); + details = AnswerTextClassic.from(mContext, answer); } model.set(SuggestionViewProperties.TEXT_LINE_1_SIZING,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerText.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerText.java index f6e0944..748dda6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerText.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerText.java
@@ -20,10 +20,23 @@ * AnswerText specifies details to be presented in a single line of omnibox suggestion. */ abstract class AnswerText { - Context mContext; + final Context mContext; + /** Density of current display. */ + final float mDensity; /** Content of the line of text in omnibox suggestion. */ SpannableStringBuilder mText; - /** Max height of the text. */ + /** + * Height of the mText. + * Each AnswerText can be a combination of multiple text styles (both sizes and colors). + * This height holds either + * - running maximum (during build phase) + * - final maximum (after build phase) + * height of the text contained in mText. + * Note: since all our AnswerTexts always use the largest text as the very first span of the + * whole content, it is safe to assume that this field contains the height of the largest text + * element in all cases, except when computing styles for the first span (= during the very + * first call to getAppearanceForText()). + */ int mHeightSp; /** Whether content can wrap around to present more details. */ int mMaxLines; @@ -35,6 +48,7 @@ */ AnswerText(Context context) { mContext = context; + mDensity = context.getResources().getDisplayMetrics().density; } /** @@ -47,6 +61,10 @@ mText = new SpannableStringBuilder(); mMaxLines = 1; + // This method also computes height of the entire text span. + // Ensure we're not rebuilding or appending once AnswerText has been constructed. + assert mHeightSp == 0; + List<SuggestionAnswer.TextField> textFields = line.getTextFields(); for (int i = 0; i < textFields.size(); i++) { appendAndStyleText(textFields.get(i)); @@ -73,10 +91,12 @@ @SuppressWarnings("deprecation") // Update usage of Html.fromHtml when API min is 24 private void appendAndStyleText(SuggestionAnswer.TextField textField) { MetricAffectingSpan[] styles = getAppearanceForText(textField.getType()); + // Determine the maximum height of the TextAppearanceSpans that are applied for this field. for (MetricAffectingSpan style : styles) { if (!(style instanceof TextAppearanceSpan)) continue; TextAppearanceSpan textStyle = (TextAppearanceSpan) style; - if (mHeightSp < textStyle.getTextSize()) mHeightSp = textStyle.getTextSize(); + int textHeightSp = (int) (textStyle.getTextSize() / mDensity); + if (mHeightSp < textHeightSp) mHeightSp = textHeightSp; } // Unescape HTML entities (e.g. """, ">").
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerTextClassic.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerTextClassic.java index 5293077d..77903e2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerTextClassic.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/basic/AnswerTextClassic.java
@@ -21,7 +21,6 @@ */ class AnswerTextClassic extends AnswerText { private static final String TAG = "AnswerTextClassic"; - private final float mDensity; /** * Convert SuggestionAnswer to array of elements that directly translate to user-presented @@ -29,15 +28,13 @@ * * @param context Current context. * @param answer Specifies answer to be converted. - * @param density Screen density which will be used to properly size and layout images and top- - * aligned text. * @return array of AnswerText elements to use to construct suggestion item. */ - static AnswerText[] from(Context context, SuggestionAnswer answer, final float density) { + static AnswerText[] from(Context context, SuggestionAnswer answer) { AnswerText[] result = new AnswerText[2]; - result[0] = new AnswerTextClassic(context, answer.getFirstLine(), density); - result[1] = new AnswerTextClassic(context, answer.getSecondLine(), density); + result[0] = new AnswerTextClassic(context, answer.getFirstLine()); + result[1] = new AnswerTextClassic(context, answer.getSecondLine()); // Trim number of presented query lines. result[0].mMaxLines = 1; @@ -50,11 +47,9 @@ * * @param context Current context. * @param line Suggestion line that will be converted to Answer Text. - * @param density Screen density. */ - AnswerTextClassic(Context context, SuggestionAnswer.ImageLine line, float density) { + AnswerTextClassic(Context context, SuggestionAnswer.ImageLine line) { super(context); - mDensity = density; build(line); } @@ -72,8 +67,8 @@ case AnswerTextType.TOP_ALIGNED: TextAppearanceSpan style = new TextAppearanceSpan( mContext, R.style.TextAppearance_OmniboxAnswerTextSmall); - return new MetricAffectingSpan[] { - style, new TopAlignedSpan(style.getTextSize(), mHeightSp, mDensity)}; + return new MetricAffectingSpan[] {style, + new TopAlignedSpan(style.getTextSize(), (int) (mHeightSp * mDensity))}; case AnswerTextType.DESCRIPTION_NEGATIVE: res = R.style.TextAppearance_OmniboxAnswerDescriptionNegative; @@ -124,23 +119,20 @@ * the top of the ascent). */ private static class TopAlignedSpan extends MetricAffectingSpan { - private final int mTextHeightSp; - private final int mMaxTextHeightSp; - private final float mDensity; + private final int mTextHeightPx; + private final int mMaxTextHeightPx; private Integer mBaselineShift; /** * Constructor for TopAlignedSpan. * - * @param textHeightSp The total height in SP of the text covered by this span. - * @param maxTextHeightSp The total height in SP of the text we wish to top-align with. - * @param density The display density. + * @param textHeightPx The total height in pixels of the text covered by this span. + * @param maxTextHeightPx The total height in pixels of the text we wish to top-align with. */ - public TopAlignedSpan(int textHeightSp, int maxTextHeightSp, float density) { - mTextHeightSp = textHeightSp; - mMaxTextHeightSp = maxTextHeightSp; - mDensity = density; + public TopAlignedSpan(int textHeightPx, int maxTextHeightPx) { + mTextHeightPx = textHeightPx; + mMaxTextHeightPx = maxTextHeightPx; } @Override @@ -160,8 +152,8 @@ Paint.FontMetrics metrics = tp.getFontMetrics(); float ascentProportion = metrics.ascent / (metrics.top - metrics.bottom); - int textAscentPx = (int) (mTextHeightSp * ascentProportion * mDensity); - int maxTextAscentPx = (int) (mMaxTextHeightSp * ascentProportion * mDensity); + int textAscentPx = (int) (mTextHeightPx * ascentProportion); + int maxTextAscentPx = (int) (mMaxTextHeightPx * ascentProportion); mBaselineShift = -(maxTextAscentPx - textAscentPx); // Up is -y. }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabThemeColorHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabThemeColorHelper.java index 2e3774a..23f714be 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabThemeColorHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabThemeColorHelper.java
@@ -91,6 +91,10 @@ themeColor = getDefaultColor(); } + if (mTab.getActivity() != null && mTab.getActivity().isTablet()) { + themeColor = getDefaultColor(); + } + if (mTab.isNativePage()) themeColor = getDefaultColor(); if (mTab.isShowingInterstitialPage()) themeColor = getDefaultColor();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherCoordinator.java new file mode 100644 index 0000000..fbffc87f --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherCoordinator.java
@@ -0,0 +1,71 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.tasks.tab_list_ui; + +import static org.chromium.chrome.browser.dependency_injection.ChromeCommonQualifiers.ACTIVITY_CONTEXT; + +import android.content.Context; + +import org.chromium.chrome.browser.compositor.CompositorViewHolder; +import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; +import org.chromium.chrome.browser.dependency_injection.ActivityScope; +import org.chromium.chrome.browser.init.ActivityLifecycleDispatcher; +import org.chromium.chrome.browser.lifecycle.Destroyable; +import org.chromium.chrome.browser.tabmodel.TabModel; +import org.chromium.chrome.browser.tabmodel.TabModelSelector; +import org.chromium.chrome.browser.toolbar.ToolbarManager; +import org.chromium.ui.modelutil.PropertyModel; +import org.chromium.ui.modelutil.PropertyModelChangeProcessor; + +import javax.inject.Inject; +import javax.inject.Named; + +/** + * Parent coordinator that is responsible for showing a grid of tabs for the main TabSwitcher UI. + */ +@ActivityScope +public class GridTabSwitcherCoordinator implements Destroyable { + private final PropertyModelChangeProcessor mContainerViewChangeProcessor; + private final ActivityLifecycleDispatcher mLifecycleDispatcher; + private final TabGridCoordinator mTabGridCoordinator; + private final GridTabSwitcherMediator mMediator; + + @Inject + public GridTabSwitcherCoordinator(@Named(ACTIVITY_CONTEXT) Context context, + ActivityLifecycleDispatcher lifecycleDispatcher, ToolbarManager toolbarManager, + TabModelSelector tabModelSelector, TabContentManager tabContentManager, + CompositorViewHolder compositorViewHolder) { + PropertyModel containerViewModel = new PropertyModel(TabListContainerProperties.ALL_KEYS); + + mTabGridCoordinator = new TabGridCoordinator( + context, toolbarManager, tabModelSelector, tabContentManager, compositorViewHolder); + + mContainerViewChangeProcessor = PropertyModelChangeProcessor.create(containerViewModel, + mTabGridCoordinator.getContainerView(), TabGridContainerViewBinder::bind); + + mMediator = new GridTabSwitcherMediator(this, containerViewModel, tabModelSelector); + toolbarManager.overrideTabSwitcherBehavior( + mMediator.getTabSwitcherButtonClickListener(), mMediator); + + mLifecycleDispatcher = lifecycleDispatcher; + mLifecycleDispatcher.register(this); + } + + /** + * Reset the tab grid with the given {@link TabModel}. Can be null. + * @param tabModel The current {@link TabModel} to show the tabs for in the grid. + */ + void resetWithTabModel(TabModel tabModel) { + mTabGridCoordinator.resetWithTabModel(tabModel); + } + + @Override + public void destroy() { + mTabGridCoordinator.destroy(); + mContainerViewChangeProcessor.destroy(); + mMediator.destroy(); + mLifecycleDispatcher.unregister(this); + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediator.java new file mode 100644 index 0000000..dfb9902 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediator.java
@@ -0,0 +1,143 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.tasks.tab_list_ui; + +import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_INCOGNITO; +import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_VISIBLE; +import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.VISIBILITY_LISTENER; + +import android.view.View; + +import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.tabmodel.TabModelSelector; +import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver; +import org.chromium.ui.modelutil.PropertyModel; + +import java.util.ArrayList; +import java.util.List; + +/** + * The Mediator that is responsible for resetting the tab grid based on visibility and model + * changes. + */ +class GridTabSwitcherMediator + implements OverviewModeBehavior, TabListRecyclerView.VisibilityListener { + private final GridTabSwitcherCoordinator mCoordinator; + private final PropertyModel mContainerViewModel; + private final TabModelSelector mTabModelSelector; + private final TabModelSelectorTabModelObserver mTabModelObserver; + private final List<OverviewModeObserver> mObservers = new ArrayList<>(); + + /** + * Basic constructor for the Mediator. + * @param coordinator The {@link GridTabSwitcherCoordinator} that owns this Mediator. + * @param containerViewModel The {@link PropertyModel} to keep state on the View containing the + * grid. + * @param tabModelSelector {@link TabModelSelector} to observer for model and selection changes. + */ + GridTabSwitcherMediator(GridTabSwitcherCoordinator coordinator, + PropertyModel containerViewModel, TabModelSelector tabModelSelector) { + mCoordinator = coordinator; + mContainerViewModel = containerViewModel; + mTabModelSelector = tabModelSelector; + + mTabModelObserver = new TabModelSelectorTabModelObserver(mTabModelSelector) { + /** + * In cases where a didSelectTab was due to closing a tab, we don't change tab grid + * visibility. + */ + private boolean mShouldIgnoreNextSelect; + + @Override + public void didSelectTab(Tab tab, int type, int lastId) { + if (mShouldIgnoreNextSelect) { + mShouldIgnoreNextSelect = false; + return; + } + setVisibility(false); + } + + @Override + public void willCloseTab(Tab tab, boolean animate) { + // Needed to handle the extra select for closing the currently selected tab. + mShouldIgnoreNextSelect = true; + } + + @Override + public void didCloseTab(int tabId, boolean incognito) { + // Handles most of the tab closes. + mShouldIgnoreNextSelect = true; + } + }; + + mContainerViewModel.set(VISIBILITY_LISTENER, this); + mContainerViewModel.set(IS_INCOGNITO, mTabModelSelector.getCurrentModel().isIncognito()); + } + + /** + * @return The {@link android.view.View.OnClickListener} to override for the tab switcher + * button. + */ + View.OnClickListener getTabSwitcherButtonClickListener() { + return view -> setVisibility(!mContainerViewModel.get(IS_VISIBLE)); + } + + private void setVisibility(boolean isVisible) { + if (isVisible) mCoordinator.resetWithTabModel(mTabModelSelector.getCurrentModel()); + mContainerViewModel.set(IS_VISIBLE, isVisible); + } + + @Override + public boolean overviewVisible() { + return mContainerViewModel.get(IS_VISIBLE); + } + + @Override + public void addOverviewModeObserver(OverviewModeObserver listener) { + mObservers.add(listener); + } + + @Override + public void removeOverviewModeObserver(OverviewModeObserver listener) { + mObservers.remove(listener); + } + + @Override + public void startedShowing() { + for (OverviewModeObserver observer : mObservers) { + observer.onOverviewModeStartedShowing(true); + } + } + + @Override + public void finishedShowing() { + for (OverviewModeObserver observer : mObservers) { + observer.onOverviewModeFinishedShowing(); + } + } + + @Override + public void startedHiding() { + for (OverviewModeObserver observer : mObservers) { + observer.onOverviewModeStartedHiding(true, false); + } + } + + @Override + public void finishedHiding() { + mCoordinator.resetWithTabModel(null); + for (OverviewModeObserver observer : mObservers) { + observer.onOverviewModeFinishedHiding(); + } + } + + /** + * Destroy any members that needs clean up. + */ + public void destroy() { + mTabModelObserver.destroy(); + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java index 2987ca6..36efa28e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java
@@ -6,6 +6,7 @@ import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_INCOGNITO; import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_VISIBLE; +import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.VISIBILITY_LISTENER; import org.chromium.chrome.browser.util.ColorUtils; import org.chromium.ui.modelutil.PropertyKey; @@ -29,6 +30,8 @@ } else if (IS_INCOGNITO == propertyKey) { view.setBackgroundColor( ColorUtils.getDefaultThemeColor(view.getResources(), model.get(IS_INCOGNITO))); + } else if (VISIBILITY_LISTENER == propertyKey) { + view.setVisibilityListener(model.get(VISIBILITY_LISTENER)); } } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridCoordinator.java index 2639ca3..ae2a563 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridCoordinator.java
@@ -4,8 +4,6 @@ package org.chromium.chrome.browser.tasks.tab_list_ui; -import static org.chromium.chrome.browser.dependency_injection.ChromeCommonQualifiers.ACTIVITY_CONTEXT; - import android.content.Context; import android.support.v7.widget.GridLayoutManager; import android.view.LayoutInflater; @@ -13,37 +11,27 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.compositor.CompositorViewHolder; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; -import org.chromium.chrome.browser.dependency_injection.ActivityScope; -import org.chromium.chrome.browser.init.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.lifecycle.Destroyable; +import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.toolbar.ToolbarManager; import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyModel; -import org.chromium.ui.modelutil.PropertyModelChangeProcessor; import org.chromium.ui.modelutil.RecyclerViewAdapter; import org.chromium.ui.modelutil.SimpleRecyclerViewMcpBase; -import javax.inject.Inject; -import javax.inject.Named; - /** * Coordinator for showing a grid of tabs. */ -@ActivityScope public class TabGridCoordinator implements Destroyable { private static final int GRID_LAYOUT_SPAN_COUNT = 2; - private final PropertyModelChangeProcessor mContainerViewChangeProcessor; private final SimpleRecyclerViewMcpBase<PropertyModel, TabGridViewHolder, PropertyKey> mModelChangeProcessor; private final TabListMediator mMediator; private final TabListRecyclerView mRecyclerView; - private final ActivityLifecycleDispatcher mLifecycleDispatcher; - @Inject - TabGridCoordinator(@Named(ACTIVITY_CONTEXT) Context context, - ActivityLifecycleDispatcher lifecycleDispatcher, ToolbarManager toolbarManager, + TabGridCoordinator(Context context, ToolbarManager toolbarManager, TabModelSelector tabModelSelector, TabContentManager tabContentManager, CompositorViewHolder compositorViewHolder) { TabListModel tabListModel = new TabListModel(); @@ -59,15 +47,24 @@ mRecyclerView.setLayoutManager(new GridLayoutManager(context, GRID_LAYOUT_SPAN_COUNT)); mRecyclerView.setHasFixedSize(true); - PropertyModel containerViewModel = new PropertyModel(TabListContainerProperties.ALL_KEYS); - mContainerViewChangeProcessor = PropertyModelChangeProcessor.create( - containerViewModel, mRecyclerView, TabGridContainerViewBinder::bind); + mMediator = new TabListMediator( + tabListModel, context, toolbarManager, tabModelSelector, tabContentManager); + } - mMediator = new TabListMediator(containerViewModel, tabListModel, context, toolbarManager, - tabModelSelector, tabContentManager); + /** + * @return The container {@link android.support.v7.widget.RecyclerView} that is showing the tab + * grid. + */ + public TabListRecyclerView getContainerView() { + return mRecyclerView; + } - mLifecycleDispatcher = lifecycleDispatcher; - mLifecycleDispatcher.register(this); + /** + * Reset the tab grid with the given {@link TabModel}. Can be null. + * @param tabModel The current {@link TabModel} to show the tabs for in the grid. + */ + public void resetWithTabModel(TabModel tabModel) { + mMediator.resetWithTabModel(tabModel); } /** @@ -75,8 +72,6 @@ */ @Override public void destroy() { - mContainerViewChangeProcessor.destroy(); mMediator.destroy(); - mLifecycleDispatcher.unregister(this); } } \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListContainerProperties.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListContainerProperties.java index d57ac938..cc5de2e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListContainerProperties.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListContainerProperties.java
@@ -14,5 +14,10 @@ public static final PropertyModel.WritableBooleanPropertyKey IS_INCOGNITO = new PropertyModel.WritableBooleanPropertyKey(); - public static final PropertyKey[] ALL_KEYS = new PropertyKey[] {IS_VISIBLE, IS_INCOGNITO}; + public static final PropertyModel + .WritableObjectPropertyKey<TabListRecyclerView.VisibilityListener> VISIBILITY_LISTENER = + new PropertyModel.WritableObjectPropertyKey<>(); + + public static final PropertyKey[] ALL_KEYS = + new PropertyKey[] {IS_VISIBLE, IS_INCOGNITO, VISIBILITY_LISTENER}; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediator.java index 5dc7ca6..aecf30b3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListMediator.java
@@ -4,9 +4,6 @@ package org.chromium.chrome.browser.tasks.tab_list_ui; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_INCOGNITO; -import static org.chromium.chrome.browser.tasks.tab_list_ui.TabListContainerProperties.IS_VISIBLE; - import android.content.Context; import android.graphics.Bitmap; @@ -25,6 +22,8 @@ import org.chromium.chrome.browser.toolbar.ToolbarManager; import org.chromium.ui.modelutil.PropertyModel; +import java.util.ArrayList; + /** * Mediator for business logic for the tab grid. This class should be initialized with a list of * tabs and a TabModel to observe for changes and should not have any logic around what the list @@ -35,7 +34,6 @@ private final int mFaviconSize; private final FaviconHelper mFaviconHelper = new FaviconHelper(); private final TabListModel mModel; - private final PropertyModel mContainerViewModel; private final TabModelSelector mTabModelSelector; private final TabContentManager mTabContentManager; @@ -45,9 +43,6 @@ mTabModelSelector.getCurrentModel().setIndex( TabModelUtils.getTabIndexById(mTabModelSelector.getCurrentModel(), tabId), TabSelectionType.FROM_USER); - if (mTabModelSelector.getCurrentTabId() == tabId) { - mContainerViewModel.set(IS_VISIBLE, false); - } } }; @@ -85,7 +80,6 @@ /** * Construct the Mediator with the given Models and observing hooks from the given * ChromeActivity. - * @param containerViewModel The {@link PropertyModel} to keep state about the container view. * @param model The Model to keep state about a list of {@link Tab}s. * @param context The context to use for accessing {@link android.content.res.Resources} * @param toolbarManager {@link ToolbarManager} to send any signals about overriding behavior. @@ -93,9 +87,8 @@ * the tabs concerned. * @param tabContentManager {@link TabContentManager} to provide screenshot related details. */ - public TabListMediator(PropertyModel containerViewModel, TabListModel model, Context context, - ToolbarManager toolbarManager, TabModelSelector tabModelSelector, - TabContentManager tabContentManager) { + public TabListMediator(TabListModel model, Context context, ToolbarManager toolbarManager, + TabModelSelector tabModelSelector, TabContentManager tabContentManager) { mFaviconSize = context.getResources().getDimensionPixelSize(R.dimen.tab_grid_favicon_size); mTabModelSelector = tabModelSelector; @@ -110,7 +103,6 @@ mModel.get(mModel.indexFromId(lastId)).set(TabProperties.IS_SELECTED, false); } mModel.get(mModel.indexFromId(tab.getId())).set(TabProperties.IS_SELECTED, true); - mContainerViewModel.set(IS_VISIBLE, false); } @Override @@ -123,25 +115,16 @@ mModel.removeAt(mModel.indexFromId(tabId)); } }; - - // TODO(yusufo): Move the calls below to a parent component, and change resetWithTabModel to - // take a List of Tabs, so that this class stays oblivious to switcher button related - // logistics. Also lazily initialize TabGridComponent on button click once there are two - // components. - mContainerViewModel = containerViewModel; - toolbarManager.overrideTabSwitcherBehavior(view - -> mContainerViewModel.set(IS_VISIBLE, !mContainerViewModel.get(IS_VISIBLE)), - null); - - resetWithTabModel(mTabModelSelector.getCurrentModel()); } /** * Initialize the component with a list of tabs to show in a grid. */ public void resetWithTabModel(TabModel tabModel) { - mContainerViewModel.set(IS_INCOGNITO, tabModel.isIncognito()); - + mModel.set(new ArrayList<>()); + if (tabModel == null) { + return; + } int selectedIndex = tabModel.index(); for (int i = 0; i < tabModel.getCount(); i++) { addTabInfoToModel(tabModel.getTabAt(i), i == selectedIndex);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListModel.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListModel.java index b75ebb76..616556d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListModel.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListModel.java
@@ -19,7 +19,7 @@ /** * Convert the given tab ID to an index to match during partial updates. * @param tabId The tab ID to search for. - * @return The index within the model {@link org.chromium.chrome.browser.modelutil.SimpleList}. + * @return The index within the model {@link org.chromium.ui.modelutil.SimpleList}. */ public int indexFromId(int tabId) { for (int i = 0; i < size(); i++) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListRecyclerView.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListRecyclerView.java index f1149a51..ae5213f3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListRecyclerView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabListRecyclerView.java
@@ -21,14 +21,55 @@ class TabListRecyclerView extends RecyclerView { public static final long BASE_ANIMATION_DURATION_MS = 218; + /** + * An interface to listen to visibility related changes on this {@link RecyclerView}. + */ + interface VisibilityListener { + /** + * Called before the animation to show the tab list has started. + */ + void startedShowing(); + + /** + * Called when the animation to show the tab list is finished. + */ + void finishedShowing(); + + /** + * Called before the animation to hide the tab list has started. + */ + void startedHiding(); + + /** + * Called when the animation to show the tab list is finished. + */ + void finishedHiding(); + } + private ValueAnimator mFadeInAnimator; private ValueAnimator mFadeOutAnimator; + private VisibilityListener mListener; + /** + * Basic constructor to use during inflation from xml. + */ public TabListRecyclerView(Context context, AttributeSet attributeSet) { super(context, attributeSet); } + /** + * Set the {@link VisibilityListener} that will listen on granular visibility events. + * @param listener The {@link VisibilityListener} to use. + */ + void setVisibilityListener(VisibilityListener listener) { + mListener = listener; + } + + /** + * Start showing the tab list. + */ void startShowing() { + mListener.startedShowing(); cancelAllAnimations(); setAlpha(0); setVisibility(View.VISIBLE); @@ -36,9 +77,19 @@ mFadeInAnimator.setInterpolator(BakedBezierInterpolator.FADE_IN_CURVE); mFadeInAnimator.setDuration(BASE_ANIMATION_DURATION_MS); mFadeInAnimator.start(); + mFadeInAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mListener.finishedShowing(); + } + }); } + /** + * Start hiding the tab list. + */ void startHiding() { + mListener.startedHiding(); cancelAllAnimations(); mFadeOutAnimator = ObjectAnimator.ofFloat(this, View.ALPHA, 0); mFadeOutAnimator.setInterpolator(BakedBezierInterpolator.FADE_OUT_CURVE); @@ -47,6 +98,7 @@ @Override public void onAnimationEnd(Animator animation) { setVisibility(View.INVISIBLE); + mListener.finishedHiding(); } }); mFadeOutAnimator.start();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/MenuButton.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/MenuButton.java index 42601766..470f60c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/MenuButton.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/MenuButton.java
@@ -45,7 +45,7 @@ private boolean mHighlightingMenu; private PulseDrawable mHighlightDrawable; - private boolean mShowMenuBadge; + private boolean mSuppressAppMenuUpdateBadge; private AnimatorSet mMenuBadgeAnimatorSet; private boolean mIsMenuBadgeAnimationRunning; @@ -82,17 +82,13 @@ } /** - * Sets the update badge to visible if the update state requires it. + * Sets the update badge to visible. * * @param visible Whether the update badge should be visible. Always sets visibility to GONE * if the update type does not require a badge. * TODO(crbug.com/865801): Clean this up when MenuButton and UpdateMenuItemHelper is MVCed. */ - private void setUpdateBadgeVisibilityIfValidState(boolean visible) { - MenuButtonState buttonState = UpdateMenuItemHelper.getInstance().getUiState().buttonState; - - visible &= buttonState != null; - + private void setUpdateBadgeVisibility(boolean visible) { mUpdateBadgeView.setVisibility(visible ? View.VISIBLE : View.GONE); if (visible) updateImageResources(); updateContentDescription(visible); @@ -111,12 +107,43 @@ * Show the update badge on the app menu button. * @param animate Whether to animate the showing of the update badge. */ - public void showAppMenuUpdateBadge(boolean animate) { - if (mUpdateBadgeView == null) return; - mShowMenuBadge = true; - updateImageResources(); + public void showAppMenuUpdateBadgeIfAvailable(boolean animate) { + if (mUpdateBadgeView == null || mMenuImageButton == null || mSuppressAppMenuUpdateBadge + || !isBadgeAvailable()) { + return; + } - setAppMenuUpdateBadgeToVisible(animate); + updateImageResources(); + updateContentDescription(true); + if (!animate || mIsMenuBadgeAnimationRunning) { + setUpdateBadgeVisibility(true); + return; + } + + // Set initial states. + mUpdateBadgeView.setAlpha(0.f); + mUpdateBadgeView.setVisibility(View.VISIBLE); + + mMenuBadgeAnimatorSet = createShowUpdateBadgeAnimation(mMenuImageButton, mUpdateBadgeView); + + mMenuBadgeAnimatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + mIsMenuBadgeAnimationRunning = true; + } + + @Override + public void onAnimationEnd(Animator animation) { + mIsMenuBadgeAnimationRunning = false; + } + + @Override + public void onAnimationCancel(Animator animation) { + mIsMenuBadgeAnimationRunning = false; + } + }); + + mMenuBadgeAnimatorSet.start(); } /** @@ -124,13 +151,11 @@ * @param animate Whether to animate the hiding of the update badge. */ public void removeAppMenuUpdateBadge(boolean animate) { - if (mUpdateBadgeView == null) return; - boolean wasShowingMenuBadge = mShowMenuBadge; - mShowMenuBadge = false; + if (mUpdateBadgeView == null || !isShowingAppMenuUpdateBadge()) return; updateContentDescription(false); - if (!animate || !wasShowingMenuBadge) { - setUpdateBadgeVisibilityIfValidState(false); + if (!animate) { + setUpdateBadgeVisibility(false); return; } @@ -164,48 +189,27 @@ } /** + * @param suppress Whether to prevent the update badge from being show. This is currently only + * used to prevent the badge from being shown in the tablet tab switcher. + */ + public void setAppMenuUpdateBadgeSuppressed(boolean suppress) { + mSuppressAppMenuUpdateBadge = suppress; + if (mSuppressAppMenuUpdateBadge) { + removeAppMenuUpdateBadge(false); + } else { + showAppMenuUpdateBadgeIfAvailable(false); + } + } + + /** * @return Whether the update badge is showing. */ public boolean isShowingAppMenuUpdateBadge() { return mUpdateBadgeView.getVisibility() == View.VISIBLE; } - /** - * Sets the update badge visibility to VISIBLE and sets the menu button image to the badged - * bitmap. - */ - private void setAppMenuUpdateBadgeToVisible(boolean animate) { - if (mUpdateBadgeView == null || mMenuImageButton == null) return; - updateContentDescription(true); - if (!animate || mIsMenuBadgeAnimationRunning) { - setUpdateBadgeVisibilityIfValidState(true); - return; - } - - // Set initial states. - mUpdateBadgeView.setAlpha(0.f); - mUpdateBadgeView.setVisibility(View.VISIBLE); - - mMenuBadgeAnimatorSet = createShowUpdateBadgeAnimation(mMenuImageButton, mUpdateBadgeView); - - mMenuBadgeAnimatorSet.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animation) { - mIsMenuBadgeAnimationRunning = true; - } - - @Override - public void onAnimationEnd(Animator animation) { - mIsMenuBadgeAnimationRunning = false; - } - - @Override - public void onAnimationCancel(Animator animation) { - mIsMenuBadgeAnimationRunning = false; - } - }); - - mMenuBadgeAnimatorSet.start(); + private static boolean isBadgeAvailable() { + return UpdateMenuItemHelper.getInstance().getUiState().buttonState != null; } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java index 914e950..cc55ab0e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -114,6 +114,7 @@ import org.chromium.ui.AsyncViewProvider; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.PageTransition; +import org.chromium.ui.widget.Toast; import org.chromium.ui.widget.ViewRectProvider; import java.lang.annotation.Retention; @@ -779,6 +780,8 @@ mActivity.getActivityTabProvider(), homeButtonListener, searchAcceleratorListener, shareButtonListener); if (mAppMenuButtonHelper != null) mAppMenuButtonHelper.setMenuShowsFromBottom(true); + Toast.setGlobalExtraYOffset( + mActivity.getResources().getDimensionPixelSize(R.dimen.bottom_toolbar_height)); } /** Record that homepage button was used for IPH reasons */ @@ -1049,6 +1052,9 @@ assert mInitializedWithNative; mToolbar.setTabSwitcherClickListener(newClickListener); + mOverviewModeBehavior.removeOverviewModeObserver(mOverviewModeObserver); + mOverviewModeBehavior = overviewModeBehavior; + mOverviewModeBehavior.addOverviewModeObserver(mOverviewModeObserver); if (mBottomToolbarCoordinator != null) { mBottomToolbarCoordinator.overrideTabSwitcherBehavior( newClickListener, overviewModeBehavior);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomToolbarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomToolbarCoordinator.java index 3f5b91c..7ac1780 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomToolbarCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomToolbarCoordinator.java
@@ -151,7 +151,8 @@ */ public void overrideTabSwitcherBehavior( OnClickListener newClickListener, OverviewModeBehavior overviewModeBehavior) { - mBrowsingModeCoordinator.overrideTabSwitcherBehavior(newClickListener, null); + mBrowsingModeCoordinator.overrideTabSwitcherBehavior( + newClickListener, overviewModeBehavior); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarCoordinator.java index 54de0d12..c0dc643 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarCoordinator.java
@@ -157,7 +157,7 @@ * Show the update badge over the bottom toolbar's app menu. */ public void showAppMenuUpdateBadge() { - mMenuButton.showAppMenuUpdateBadge(true); + mMenuButton.showAppMenuUpdateBadgeIfAvailable(true); } /** @@ -198,6 +198,7 @@ public void overrideTabSwitcherBehavior( OnClickListener newClickListener, OverviewModeBehavior overviewModeBehavior) { mTabSwitcherButtonCoordinator.setTabSwitcherListener(newClickListener); + mMediator.setOverviewModeBehavior(overviewModeBehavior); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarMediator.java index 2ee9e23..afa8098 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarMediator.java
@@ -105,6 +105,9 @@ } void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) { + if (mOverviewModeBehavior != null) { + mOverviewModeBehavior.removeOverviewModeObserver(this); + } mOverviewModeBehavior = overviewModeBehavior; mOverviewModeBehavior.addOverviewModeObserver(this); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTPhone.java index 5da40aa0..890e5af 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTPhone.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherModeTTPhone.java
@@ -93,7 +93,8 @@ mNewTabButton.setOnClickListener(this); } - if (usingHorizontalTabSwitcher() + if ((usingHorizontalTabSwitcher() + || FeatureUtilities.isGridTabSwitcherEnabled(getContext())) && PrefServiceBridge.getInstance().isIncognitoModeEnabled()) { updateTabSwitchingElements(true); } @@ -293,7 +294,8 @@ } private int getToolbarColorForCurrentState() { - if (DeviceClassManager.enableAccessibilityLayout()) { + if (DeviceClassManager.enableAccessibilityLayout() + || FeatureUtilities.isGridTabSwitcherEnabled(getContext())) { int colorId = mIsIncognito ? R.color.incognito_modern_primary_color : R.color.modern_primary_color; return ApiCompatibilityUtils.getColor(getResources(), colorId);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java index 5c87dc8b..519589a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
@@ -757,7 +757,12 @@ void showAppMenuUpdateBadge(boolean animate) { if (mMenuButtonWrapper == null) return; - mMenuButtonWrapper.showAppMenuUpdateBadge(animate); + mMenuButtonWrapper.showAppMenuUpdateBadgeIfAvailable(animate); + } + + void setAppMenuUpdateBadgeSuppressed(boolean suppress) { + if (mMenuButtonWrapper == null) return; + mMenuButtonWrapper.setAppMenuUpdateBadgeSuppressed(suppress); } boolean isShowingAppMenuUpdateBadge() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java index 5814bb8..66aceff 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarTablet.java
@@ -79,7 +79,6 @@ private NewTabPage mVisibleNtp; - private boolean mWasAppMenuUpdateBadgeShowing; /** * Constructs a ToolbarTablet object. * @param context The Context in which this View object is created. @@ -467,13 +466,12 @@ mForwardButton.setEnabled(false); mReloadButton.setEnabled(false); mLocationBar.getContainerView().setVisibility(View.INVISIBLE); - mWasAppMenuUpdateBadgeShowing = isShowingAppMenuUpdateBadge(); - if (mWasAppMenuUpdateBadgeShowing) removeAppMenuUpdateBadge(false); + setAppMenuUpdateBadgeSuppressed(true); } else { mIsInTabSwitcherMode = false; mLocationBar.getContainerView().setVisibility(View.VISIBLE); - if (mWasAppMenuUpdateBadgeShowing) showAppMenuUpdateBadge(false); + setAppMenuUpdateBadgeSuppressed(false); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java index 583ce3be..b3137f8 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
@@ -25,6 +25,7 @@ import org.chromium.base.library_loader.LibraryLoader; import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeSwitches; +import org.chromium.chrome.browser.device.DeviceClassManager; import org.chromium.chrome.browser.firstrun.FirstRunUtils; import org.chromium.chrome.browser.locale.LocaleManager; import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations; @@ -472,6 +473,18 @@ } /** + * @param activityContext The context for the containing {@link android.app.Activity}. + * @return Whether the Grid Tab Switcher UI is enabled and available for use. + */ + public static boolean isGridTabSwitcherEnabled(Context activityContext) { + // TODO(yusufo): AccessibilityLayout check should not be here and the flow should support + // changing that setting while Chrome is alive. + return !DeviceFormFactor.isNonMultiDisplayContextOnTablet(activityContext) + && !SysUtils.isLowEndDevice() && !DeviceClassManager.enableAccessibilityLayout() + && ChromeFeatureList.isEnabled(ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID); + } + + /** * @return Whether this device is running Android Go. This is assumed when we're running Android * O or later and we're on a low-end device. */
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni index f842104..96ae8d0 100644 --- a/chrome/android/java_sources.gni +++ b/chrome/android/java_sources.gni
@@ -11,6 +11,7 @@ "java/src/com/google/android/apps/chrome/appwidget/bookmarks/BookmarkThumbnailWidgetProvider.java", "java/src/org/chromium/chrome/browser/ActivityTabProvider.java", "java/src/org/chromium/chrome/browser/ActivityTabTaskDescriptionHelper.java", + "java/src/org/chromium/chrome/browser/ChromeLocalizationUtils.java", "java/src/org/chromium/chrome/browser/ActivityTaskDescriptionIconGenerator.java", "java/src/org/chromium/chrome/browser/AfterStartupTaskUtils.java", "java/src/org/chromium/chrome/browser/AppHooks.java", @@ -1596,6 +1597,8 @@ "java/src/org/chromium/chrome/browser/tabmodel/document/StorageDelegate.java", "java/src/org/chromium/chrome/browser/tabmodel/document/TabDelegate.java", "java/src/org/chromium/chrome/browser/tasks/TasksUma.java", + "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherCoordinator.java", + "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/GridTabSwitcherMediator.java", "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridCoordinator.java", "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridContainerViewBinder.java", "java/src/org/chromium/chrome/browser/tasks/tab_list_ui/TabGridViewBinder.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilderTest.java index cb21477..41a4eb1 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilderTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilderTest.java
@@ -6,7 +6,6 @@ import android.app.Notification; import android.app.NotificationChannel; -import android.app.NotificationManager; import android.content.Context; import android.os.Build; import android.support.test.InstrumentationRegistry; @@ -33,14 +32,13 @@ public class ChromeNotificationBuilderTest { private static final int TEST_NOTIFICATION_ID = 101; - private NotificationManager mNotificationManager; + private NotificationManagerProxy mNotificationManager; @Before public void setUp() { Context context = InstrumentationRegistry.getTargetContext(); - mNotificationManager = - (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + mNotificationManager = new NotificationManagerProxyImpl(context); // Don't rely on channels already being registered. clearNotificationChannels(mNotificationManager); @@ -52,7 +50,7 @@ mNotificationManager.cancelAll(); } - private static void clearNotificationChannels(NotificationManager notificationManager) { + private static void clearNotificationChannels(NotificationManagerProxy notificationManager) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { for (NotificationChannel channel : notificationManager.getNotificationChannels()) { if (!channel.getId().equals(NotificationChannel.DEFAULT_CHANNEL_ID)) { @@ -72,7 +70,6 @@ Notification notification = notificationBuilder.setContentTitle("Title") .setSmallIcon(R.drawable.ic_chrome) .build(); - mNotificationManager.notify(TEST_NOTIFICATION_ID, notification); } @@ -89,4 +86,21 @@ mNotificationManager.notify(TEST_NOTIFICATION_ID, notification); } -} \ No newline at end of file + + @MediumTest + @Test + public void buildChromeNotification() { + ChromeNotificationBuilder builder = + NotificationBuilderFactory.createChromeNotificationBuilder(true, + ChannelDefinitions.ChannelId.BROWSER, null, + new NotificationMetadata( + NotificationUmaTracker.SystemNotificationType.BROWSER_ACTIONS, null, + TEST_NOTIFICATION_ID)); + + ChromeNotification notification = builder.setContentTitle("Title") + .setSmallIcon(R.drawable.ic_chrome) + .buildChromeNotification(); + + mNotificationManager.notify(notification); + } +}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationIntentInterceptorTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationIntentInterceptorTest.java index 61797bec..68953da 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationIntentInterceptorTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationIntentInterceptorTest.java
@@ -9,6 +9,7 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.os.Build; import android.support.test.InstrumentationRegistry; import android.support.test.filters.MediumTest; import android.support.test.uiautomator.By; @@ -24,7 +25,7 @@ import org.chromium.base.ContextUtils; import org.chromium.base.test.util.CommandLineFlags; -import org.chromium.base.test.util.DisabledTest; +import org.chromium.base.test.util.MinAndroidSdkLevel; import org.chromium.base.test.util.RetryOnFailure; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeSwitches; @@ -99,7 +100,7 @@ @Test @MediumTest @RetryOnFailure - @DisabledTest + @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP) public void testContentIntentInterception() { // Send notification. NotificationManager notificationManager =
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index f24f352..72fd468 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -763,6 +763,8 @@ "memory_details_win.cc", "metrics/antivirus_metrics_provider_win.cc", "metrics/antivirus_metrics_provider_win.h", + "metrics/bluetooth_available_utility.cc", + "metrics/bluetooth_available_utility.h", "metrics/browser_window_histogram_helper.cc", "metrics/browser_window_histogram_helper.h", "metrics/chrome_browser_main_extra_parts_metrics.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index ed91404..3fd72ca1 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -1317,10 +1317,6 @@ flag_descriptions::kHyperlinkAuditingDescription, kOsAll, SINGLE_DISABLE_VALUE_TYPE(switches::kNoPings)}, #if defined(OS_ANDROID) - {"contextual-search", flag_descriptions::kContextualSearchName, - flag_descriptions::kContextualSearchDescription, kOsAndroid, - ENABLE_DISABLE_VALUE_TYPE(switches::kEnableContextualSearch, - switches::kDisableContextualSearch)}, {"contextual-search-ml-tap-suppression", flag_descriptions::kContextualSearchMlTapSuppressionName, flag_descriptions::kContextualSearchMlTapSuppressionDescription, @@ -3650,13 +3646,6 @@ flag_descriptions::kEnableLazyFrameLoadingDescription, kOsAll, FEATURE_VALUE_TYPE(features::kLazyFrameLoading)}, -#if defined(OS_CHROMEOS) - {"enable-settings-shortcut-search", - flag_descriptions::kEnableSettingsShortcutSearchName, - flag_descriptions::kEnableSettingsShortcutSearchDescription, kOsCrOS, - FEATURE_VALUE_TYPE(app_list_features::kEnableSettingsShortcutSearch)}, -#endif // OS_CHROMEOS - {"autofill-cache-query-responses", flag_descriptions::kAutofillCacheQueryResponsesName, flag_descriptions::kAutofillCacheQueryResponsesDescription, kOsAll, @@ -4312,6 +4301,11 @@ FEATURE_VALUE_TYPE(features::kWebContentsOcclusion)}, #endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) + {"enable-webrtc-hw-vp9-encoding", + flag_descriptions::kWebrtcHwVP9EncodingName, + flag_descriptions::kWebrtcHwVP9EncodingDescription, kOsCrOS, + FEATURE_VALUE_TYPE(features::kWebRtcHWVP9Encoding)}, + // NOTE: Adding a new flag requires adding a corresponding entry to enum // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 8b8b370..50199ca8 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -2214,6 +2214,7 @@ "child_accounts/usage_time_limit_processor_unittest.cc", "child_accounts/usage_time_state_notifier_unittest.cc", "crostini/crostini_manager_unittest.cc", + "crostini/crostini_package_service_unittest.cc", "crostini/crostini_share_path_unittest.cc", "crostini/crosvm_metrics_unittest.cc", "crostini/crosvm_process_list_unittest.cc",
diff --git a/chrome/browser/chromeos/crostini/crostini_manager.cc b/chrome/browser/chromeos/crostini/crostini_manager.cc index 1cddd80..5074217 100644 --- a/chrome/browser/chromeos/crostini/crostini_manager.cc +++ b/chrome/browser/chromeos/crostini/crostini_manager.cc
@@ -352,6 +352,13 @@ void SetUpLxdContainerUserFinished(CrostiniResult result) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + // The restarter shouldn't outlive the CrostiniManager but it can when + // skip_restart_for_testing is set. + if (!crostini_manager_) { + LOG(ERROR) << "CrostiniManager deleted"; + return; + } + // Tell observers. for (auto& observer : observer_list_) { observer.OnContainerSetup(result);
diff --git a/chrome/browser/chromeos/crostini/crostini_package_service.cc b/chrome/browser/chromeos/crostini/crostini_package_service.cc index c9ca0c63..2ee85530 100644 --- a/chrome/browser/chromeos/crostini/crostini_package_service.cc +++ b/chrome/browser/chromeos/crostini/crostini_package_service.cc
@@ -7,6 +7,7 @@ #include "base/bind.h" #include "base/files/file_path.h" #include "base/no_destructor.h" +#include "base/stl_util.h" #include "base/strings/strcat.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" @@ -117,6 +118,11 @@ manager->RemoveLinuxPackageOperationProgressObserver(this); } +void CrostiniPackageService::SetNotificationStateChangeCallbackForTesting( + StateChangeCallback state_change_callback) { + testing_state_change_callback_ = std::move(state_change_callback); +} + void CrostiniPackageService::NotificationCompleted( CrostiniPackageNotification* notification) { for (auto it = finished_notifications_.begin(); @@ -147,6 +153,9 @@ const std::string& container_name, const std::string& package_path, CrostiniManager::InstallLinuxPackageCallback callback) { + const ContainerIdentifier container_id(vm_name, container_name); + containers_with_pending_installs_.insert(container_id); + CrostiniManager::GetForProfile(profile_)->InstallLinuxPackage( vm_name, container_name, package_path, base::BindOnce(&CrostiniPackageService::OnInstallLinuxPackage, @@ -213,8 +222,8 @@ bool CrostiniPackageService::ContainerHasRunningOperation( const ContainerIdentifier& container_id) const { - return running_notifications_.find(container_id) != - running_notifications_.end(); + return base::ContainsKey(running_notifications_, container_id) || + base::ContainsKey(containers_with_pending_installs_, container_id); } void CrostiniPackageService::CreateRunningNotification( @@ -279,6 +288,9 @@ StartQueuedUninstall(container_id); } } + if (testing_state_change_callback_) { + testing_state_change_callback_.Run(status); + } } void CrostiniPackageService::OnGetLinuxPackageInfo( @@ -295,9 +307,18 @@ CrostiniManager::InstallLinuxPackageCallback callback, CrostiniResult result) { std::move(callback).Run(result); - if (result != CrostiniResult::SUCCESS) - return; const ContainerIdentifier container_id(vm_name, container_name); + containers_with_pending_installs_.erase(container_id); + if (result != CrostiniResult::SUCCESS) { + // We never show a notification for this failed install, so this is our only + // chance to kick off uninstalled queued behind the install. + auto queued_iter = queued_uninstalls_.find(container_id); + if (queued_iter != queued_uninstalls_.end() && + !queued_iter->second.empty()) { + StartQueuedUninstall(container_id); + } + return; + } CreateRunningNotification( container_id, CrostiniPackageNotification::NotificationType::PACKAGE_INSTALL,
diff --git a/chrome/browser/chromeos/crostini/crostini_package_service.h b/chrome/browser/chromeos/crostini/crostini_package_service.h index 749e5ad..9ee6b49 100644 --- a/chrome/browser/chromeos/crostini/crostini_package_service.h +++ b/chrome/browser/chromeos/crostini/crostini_package_service.h
@@ -8,10 +8,12 @@ #include <map> #include <memory> #include <queue> +#include <set> #include <string> #include <utility> #include <vector> +#include "base/callback_forward.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/chromeos/crostini/crostini_manager.h" #include "chrome/browser/chromeos/crostini/crostini_package_notification.h" @@ -24,11 +26,19 @@ class CrostiniPackageService : public KeyedService, public LinuxPackageOperationProgressObserver { public: + using StateChangeCallback = + base::RepeatingCallback<void(PackageOperationStatus)>; + static CrostiniPackageService* GetForProfile(Profile* profile); explicit CrostiniPackageService(Profile* profile); ~CrostiniPackageService() override; + // For testing: Set a callback that will be called each time a notification + // is set to a new state. + void SetNotificationStateChangeCallbackForTesting( + StateChangeCallback state_change_callback); + // KeyedService: void Shutdown() override; @@ -147,6 +157,11 @@ std::map<ContainerIdentifier, std::unique_ptr<CrostiniPackageNotification>> running_notifications_; + // Containers that have an install waiting for its initial response. We don't + // display notifications for these, but they still need to cause uninstalls + // to queue. + std::set<ContainerIdentifier> containers_with_pending_installs_; + // Uninstalls we want to run when the current one is done. std::map<ContainerIdentifier, std::queue<QueuedUninstall>> queued_uninstalls_; @@ -156,6 +171,9 @@ std::vector<std::unique_ptr<CrostiniPackageNotification>> finished_notifications_; + // Called each time a notification is set to a new state. + StateChangeCallback testing_state_change_callback_; + int next_notification_id_ = 0; base::WeakPtrFactory<CrostiniPackageService> weak_ptr_factory_;
diff --git a/chrome/browser/chromeos/crostini/crostini_package_service_unittest.cc b/chrome/browser/chromeos/crostini/crostini_package_service_unittest.cc new file mode 100644 index 0000000..26a03498 --- /dev/null +++ b/chrome/browser/chromeos/crostini/crostini_package_service_unittest.cc
@@ -0,0 +1,1803 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/crostini/crostini_package_service.h" + +#include <memory> +#include <string> + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/strings/utf_string_conversions.h" +#include "base/task/post_task.h" +#include "base/threading/platform_thread.h" +#include "chrome/browser/chromeos/crostini/crostini_registry_service.h" +#include "chrome/browser/chromeos/crostini/crostini_registry_service_factory.h" +#include "chrome/browser/chromeos/crostini/crostini_test_helper.h" +#include "chrome/browser/chromeos/crostini/crostini_util.h" +#include "chrome/browser/notifications/notification_display_service_factory.h" +#include "chrome/browser/notifications/notification_display_service_tester.h" +#include "chrome/grit/generated_resources.h" +#include "chrome/test/base/testing_profile.h" +#include "chromeos/dbus/cros_disks_client.h" +#include "chromeos/dbus/dbus_thread_manager.h" +#include "chromeos/dbus/fake_cicerone_client.h" +#include "chromeos/dbus/vm_applications/apps.pb.h" +#include "chromeos/disks/disk_mount_manager.h" +#include "chromeos/disks/mock_disk_mount_manager.h" +#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" +#include "content/public/test/test_browser_thread_bundle.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/base/l10n/l10n_util.h" + +namespace crostini { + +namespace { + +using ::chromeos::DBusMethodCallback; +using ::chromeos::DBusThreadManager; +using ::chromeos::FakeCiceroneClient; +using ::chromeos::disks::MockDiskMountManager; +using ::testing::_; +using ::testing::Invoke; +using ::testing::IsEmpty; +using ::testing::MakeMatcher; +using ::testing::Matcher; +using ::testing::MatcherInterface; +using ::testing::MatchResultListener; +using ::testing::UnorderedElementsAre; +using ::vm_tools::cicerone::InstallLinuxPackageProgressSignal; +using ::vm_tools::cicerone::InstallLinuxPackageRequest; +using ::vm_tools::cicerone::InstallLinuxPackageResponse; +using ::vm_tools::cicerone::LinuxPackageInfoRequest; +using ::vm_tools::cicerone::LinuxPackageInfoResponse; +using ::vm_tools::cicerone::UninstallPackageOwningFileRequest; +using ::vm_tools::cicerone::UninstallPackageOwningFileResponse; +using ::vm_tools::cicerone::UninstallPackageProgressSignal; + +// IDs, etc of apps that are always registered during tests. +// These are on the default VM / default container. +constexpr char kDefaultAppFileId[] = "default_file_id"; +constexpr char kDefaultAppName[] = "The Default"; +constexpr char kSecondAppFileId[] = "second_file_id"; +constexpr char kSecondAppName[] = "Another Fine App"; +constexpr char kThirdAppFileId[] = "third_file_id"; +constexpr char kThirdAppName[] = "Yet Another App"; +// Different VM name, but container name is the default. +constexpr char kDifferentVmAppFileId[] = "different_vm_app"; +constexpr char kDifferentVmAppName[] = "I'm in a VM!"; +constexpr char kDifferentVmApp2FileId[] = "different_vm_app_2"; +constexpr char kDifferentVmApp2Name[] = "I'm in a VM also"; +constexpr char kDifferentVmVmName[] = "second_vm_name"; +// Default VM name, but container name is different. +constexpr char kDifferentContainerAppFileId[] = "different_container_app"; +constexpr char kDifferentContainerAppName[] = + "Just Over The Container Boundary"; +constexpr char kDifferentContainerApp2FileId[] = "different_container_app_2"; +constexpr char kDifferentContainerApp2Name[] = "Severe Lack of Containers"; +constexpr char kDifferentContainerContainerName[] = "second_container_name"; +constexpr char kPackageFilePath[] = "/tmp/nethack.deb"; + +// Callback for RunUntilUninstallRequestMade. +void CaptureUninstallRequestParametersAndQuitLoop( + base::RepeatingClosure quit_closure, + UninstallPackageOwningFileRequest* request_output, + DBusMethodCallback<UninstallPackageOwningFileResponse>* callback_output, + const UninstallPackageOwningFileRequest& request_input, + DBusMethodCallback<UninstallPackageOwningFileResponse> callback_input) { + *request_output = request_input; + if (callback_output != nullptr) { + *callback_output = std::move(callback_input); + } + std::move(quit_closure).Run(); +} + +// Run until |fake_cicerone_client_|'s UninstallPackageOwningFile is called. +// |request| and |callback| are filled in with the parameters to +// CiceroneClient::UninstallPackageOwningFile. +void RunUntilUninstallRequestMade( + FakeCiceroneClient* fake_cicerone_client, + UninstallPackageOwningFileRequest* request, + DBusMethodCallback<UninstallPackageOwningFileResponse>* callback) { + base::RunLoop run_loop; + fake_cicerone_client->SetOnUninstallPackageOwningFileCallback( + base::BindRepeating(&CaptureUninstallRequestParametersAndQuitLoop, + run_loop.QuitClosure(), base::Unretained(request), + base::Unretained(callback))); + run_loop.Run(); + + // Callback isn't valid after end of function. + fake_cicerone_client->SetOnUninstallPackageOwningFileCallback( + base::NullCallback()); +} + +// Callback used for InstallLinuxPackage +void RecordInstallResult(CrostiniResult* record_location, + CrostiniResult result) { + *record_location = result; +} + +// Callback used for GetLinuxPackageInfo. +void RecordPackageInfoResult(LinuxPackageInfo* record_location, + const LinuxPackageInfo& result) { + *record_location = result; +} + +class CrostiniPackageServiceTest : public testing::Test { + public: + CrostiniPackageServiceTest() + : kDefaultAppId(CrostiniTestHelper::GenerateAppId(kDefaultAppFileId)), + kSecondAppId(CrostiniTestHelper::GenerateAppId(kSecondAppFileId)), + kThirdAppId(CrostiniTestHelper::GenerateAppId(kThirdAppFileId)), + kDifferentVmAppId( + CrostiniTestHelper::GenerateAppId(kDifferentVmAppFileId, + kDifferentVmVmName, + kCrostiniDefaultContainerName)), + kDifferentVmApp2Id( + CrostiniTestHelper::GenerateAppId(kDifferentVmApp2FileId, + kDifferentVmVmName, + kCrostiniDefaultContainerName)), + kDifferentContainerAppId(CrostiniTestHelper::GenerateAppId( + kDifferentContainerAppFileId, + kCrostiniDefaultVmName, + kDifferentContainerContainerName)), + kDifferentContainerApp2Id(CrostiniTestHelper::GenerateAppId( + kDifferentContainerApp2FileId, + kCrostiniDefaultVmName, + kDifferentContainerContainerName)) {} + + void SetUp() override { + DBusThreadManager::Initialize(); + fake_cicerone_client_ = static_cast<FakeCiceroneClient*>( + DBusThreadManager::Get()->GetCiceroneClient()); + ASSERT_TRUE(fake_cicerone_client_); + + mock_disk_mount_manager_ = new MockDiskMountManager; + ON_CALL(*mock_disk_mount_manager_, MountPath(_, _, _, _, _, _)) + .WillByDefault(Invoke( + this, + &CrostiniPackageServiceTest::HandleDiskMountManagerMountPath)); + chromeos::disks::DiskMountManager::InitializeForTesting( + mock_disk_mount_manager_); + test_browser_thread_bundle_ = + std::make_unique<content::TestBrowserThreadBundle>( + base::test::ScopedTaskEnvironment::MainThreadType::UI, + base::test::ScopedTaskEnvironment::ExecutionMode::ASYNC, + content::TestBrowserThreadBundle::REAL_IO_THREAD); + profile_ = std::make_unique<TestingProfile>(); + crostini_test_helper_ = + std::make_unique<CrostiniTestHelper>(profile_.get()); + notification_display_service_tester_ = + std::make_unique<NotificationDisplayServiceTester>(profile_.get()); + notification_display_service_ = + static_cast<StubNotificationDisplayService*>( + NotificationDisplayServiceFactory::GetForProfile(profile_.get())); + ASSERT_TRUE(notification_display_service_); + service_ = std::make_unique<CrostiniPackageService>(profile_.get()); + + CrostiniManager::GetForProfile(profile_.get()) + ->set_skip_restart_for_testing(); + + CreateDefaultAppRegistration(); + CreateSecondAppRegistration(); + CreateThirdAppRegistration(); + CreateDifferentVmAppRegistration(); + CreateDifferentContainerAppRegistration(); + } + + void TearDown() override { + service_.reset(); + notification_display_service_tester_.reset(); + crostini_test_helper_.reset(); + profile_.reset(); + test_browser_thread_bundle_.reset(); + chromeos::disks::DiskMountManager::Shutdown(); + mock_disk_mount_manager_ = nullptr; // Destroyed in Shutdown() + DBusThreadManager::Shutdown(); + } + + protected: + const std::string kDefaultAppId; // App_id for app with kDefaultAppFileId. + const std::string kSecondAppId; // App_id for app with kSecondAppFileId. + const std::string kThirdAppId; // App_id for app with kThirdAppFileId. + const std::string kDifferentVmAppId; // App_id for app with + // kDifferentVmAppFileId. + const std::string kDifferentVmApp2Id; // App_id for app with + // kDifferentVmApp2FileId. + const std::string kDifferentContainerAppId; // App_id for app with + // kDifferentContainerAppFileId. + const std::string kDifferentContainerApp2Id; // App_id for app with + // kDifferentContainerApp2FileId + + // Called when our MockDiskMountManager has its MountPath called. Needed so + // that CrostiniManager::CrostiniRestarter::OnMountEvent gets called properly + // after CrostiniManager::CrostiniRestarter::GetContainerSshKeysFinished. + void HandleDiskMountManagerMountPath( + const std::string& source_path, + const std::string& source_format, + const std::string& mount_label, + const std::vector<std::string>& mount_options, + chromeos::MountType type, + chromeos::MountAccessMode access_mode) { + if (mock_disk_mount_manager_) { + chromeos::disks::DiskMountManager::MountPointInfo info( + source_path, "/tmp/fake_mount_path", type, + chromeos::disks::MOUNT_CONDITION_NONE); + base::PostTaskWithTraits( + FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&MockDiskMountManager::NotifyMountEvent, + base::Unretained(mock_disk_mount_manager_), + chromeos::disks::DiskMountManager::MOUNTING, + chromeos::MOUNT_ERROR_NONE, info)); + } + } + + UninstallPackageProgressSignal MakeUninstallSignal( + const UninstallPackageOwningFileRequest& request) { + UninstallPackageProgressSignal signal; + signal.set_vm_name(request.vm_name()); + signal.set_container_name(request.container_name()); + signal.set_owner_id(request.owner_id()); + return signal; + } + + InstallLinuxPackageProgressSignal MakeInstallSignal( + const InstallLinuxPackageRequest& request) { + InstallLinuxPackageProgressSignal signal; + signal.set_vm_name(request.vm_name()); + signal.set_container_name(request.container_name()); + signal.set_owner_id(request.owner_id()); + return signal; + } + + // Closes the notification as if the user had clicked 'close'. + void CloseNotification(const message_center::Notification& notification) { + notification_display_service_->RemoveNotification( + NotificationHandler::Type::TRANSIENT, notification.id(), + true /*by_user*/, false /*silent*/); + } + + // Start an uninstall and then sent a single uninstall signal with the given + // status and (optional) progress. If |request_out| is not nullptr, the + // request sent by the service will be copied to |*request_out|. + void StartAndSignalUninstall( + UninstallPackageProgressSignal::Status signal_status, + int progress_percent = 0, + const char* const expected_desktop_file_id = kDefaultAppFileId, + UninstallPackageOwningFileRequest* request_out = nullptr) { + UninstallPackageOwningFileRequest request; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback); + EXPECT_EQ(request.desktop_file_id(), expected_desktop_file_id); + + // It's illegal to send a signal unless the response was STARTED. So assume + // that any test calling this function wants us to give a STARTED response. + UninstallPackageOwningFileResponse response; + response.set_status(UninstallPackageOwningFileResponse::STARTED); + std::move(callback).Run(response); + + UninstallPackageProgressSignal signal = MakeUninstallSignal(request); + signal.set_status(signal_status); + switch (signal_status) { + case UninstallPackageProgressSignal::UNINSTALLING: + signal.set_progress_percent(progress_percent); + break; + case UninstallPackageProgressSignal::FAILED: + signal.set_failure_details("Oh no not again"); + break; + case UninstallPackageProgressSignal::SUCCEEDED: + break; + default: + NOTREACHED(); + } + fake_cicerone_client_->UninstallPackageProgress(signal); + + if (request_out != nullptr) { + *request_out = request; + } + } + + // Start an install and then sent a single install signal with the given + // status and (optional) progress. + void StartAndSignalInstall( + InstallLinuxPackageProgressSignal::Status signal_status, + int progress_percent = 0) { + base::RunLoop().RunUntilIdle(); + + InstallLinuxPackageProgressSignal signal = MakeInstallSignal( + fake_cicerone_client_->get_most_recent_install_linux_package_request()); + signal.set_status(signal_status); + switch (signal_status) { + case InstallLinuxPackageProgressSignal::DOWNLOADING: + case InstallLinuxPackageProgressSignal::INSTALLING: + signal.set_progress_percent(progress_percent); + break; + + case InstallLinuxPackageProgressSignal::FAILED: + signal.set_failure_details("Wouldn't be prudent"); + break; + + case InstallLinuxPackageProgressSignal::SUCCEEDED: + break; + + default: + NOTREACHED(); + } + fake_cicerone_client_->InstallLinuxPackageProgress(signal); + } + + // Owned by DBusThreadManager + FakeCiceroneClient* fake_cicerone_client_ = nullptr; + + // Owned by chromeos::disks::DiskMountManager + MockDiskMountManager* mock_disk_mount_manager_ = nullptr; + + std::unique_ptr<content::TestBrowserThreadBundle> test_browser_thread_bundle_; + std::unique_ptr<TestingProfile> profile_; + std::unique_ptr<CrostiniTestHelper> crostini_test_helper_; + std::unique_ptr<NotificationDisplayServiceTester> + notification_display_service_tester_; + StubNotificationDisplayService* notification_display_service_; + std::unique_ptr<CrostiniPackageService> service_; + + private: + // Helper to set up an App proto with a single name. + vm_tools::apps::App BasicApp(const std::string& desktop_file_id, + const std::string& name, + const std::string& package_id) { + vm_tools::apps::App app; + app.set_desktop_file_id(desktop_file_id); + app.mutable_name()->add_values()->set_value(name); + app.set_no_display(false); + app.set_package_id(package_id); + return app; + } + + // Create a registration in CrostiniRegistryService for an app with app_id + // kDefaultAppId and desktop file ID kDefaultAppFileId. + void CreateDefaultAppRegistration() { + auto app = BasicApp(kDefaultAppFileId, kDefaultAppName, "123-thing"); + crostini_test_helper_->AddApp(app); + } + + // Create a registration in CrostiniRegistryService for an app with app_id + // kSecondAppId and desktop file ID kSecondAppFileId. + void CreateSecondAppRegistration() { + auto app = BasicApp(kSecondAppFileId, kSecondAppName, "abc-another"); + crostini_test_helper_->AddApp(app); + } + + // Create a registration in CrostiniRegistryService for an app with app_id + // kThirdAppId and desktop file ID kThirdAppFileId. + void CreateThirdAppRegistration() { + auto app = BasicApp(kThirdAppFileId, kThirdAppName, "yanpi"); + crostini_test_helper_->AddApp(app); + } + + // Create a registration in CrostiniRegistryService for apps with app_id + // kDifferentVmAppId and kDifferentVmApp2Id inside kDifferentVmVmName. + void CreateDifferentVmAppRegistration() { + // CrostiniTestHelper doesn't directly allow apps to be added for VMs other + // than the default VM. + vm_tools::apps::ApplicationList app_list; + app_list.set_vm_name(kDifferentVmVmName); + app_list.set_container_name(kCrostiniDefaultContainerName); + *app_list.add_apps() = + BasicApp(kDifferentVmAppFileId, kDifferentVmAppName, "pack5"); + *app_list.add_apps() = + BasicApp(kDifferentVmApp2FileId, kDifferentVmApp2Name, "pack5-2"); + crostini::CrostiniRegistryServiceFactory::GetForProfile(profile_.get()) + ->UpdateApplicationList(app_list); + } + + // Create a registration in CrostiniRegistryService for apps with app_id + // kDifferentContainerAppId and kDifferentContainerApp2Id inside + // kDifferentContainerContainerName. + void CreateDifferentContainerAppRegistration() { + // CrostiniTestHelper doesn't directly allow apps to be added for containers + // other than the default container. + vm_tools::apps::ApplicationList app_list; + app_list.set_vm_name(kCrostiniDefaultVmName); + app_list.set_container_name(kDifferentContainerContainerName); + *app_list.add_apps() = BasicApp(kDifferentContainerAppFileId, + kDifferentContainerAppName, "pack7"); + *app_list.add_apps() = BasicApp(kDifferentContainerApp2FileId, + kDifferentContainerApp2Name, "pack7-2"); + crostini::CrostiniRegistryServiceFactory::GetForProfile(profile_.get()) + ->UpdateApplicationList(app_list); + } +}; + +// A way of referring to one of the various app ids in parameters. +enum KnownApp { + DEFAULT_APP, + SECOND_APP, + THIRD_APP, + DIFFERENT_VM, + DIFFERENT_VM_2, + DIFFERENT_CONTAINER, + DIFFERENT_CONTAINER_2 +}; + +// Returns the app name for one of the known apps. +base::string16 GetAppName(KnownApp app) { + switch (app) { + case DEFAULT_APP: + return base::ASCIIToUTF16(kDefaultAppName); + case SECOND_APP: + return base::ASCIIToUTF16(kSecondAppName); + case THIRD_APP: + return base::ASCIIToUTF16(kThirdAppName); + case DIFFERENT_VM: + return base::ASCIIToUTF16(kDifferentVmAppName); + case DIFFERENT_VM_2: + return base::ASCIIToUTF16(kDifferentVmApp2Name); + case DIFFERENT_CONTAINER: + return base::ASCIIToUTF16(kDifferentContainerAppName); + case DIFFERENT_CONTAINER_2: + return base::ASCIIToUTF16(kDifferentContainerApp2Name); + default: + NOTREACHED(); + } +} + +// This is a wrapper around message_center::Notification, allowing us to print +// them nicely. Otherwise, UnorderedElementsAre has failures that look like +// Actual: { 680-byte object <68-98 31-13 AC-7F 00-00 00-00 00-00 AB-AB AB-AB +// 80-AC 97-F1 06-23 00-00 1C-00 00-00 00-00 00-00 20-00 00-00 00-00 +// 00-80 80-49 9F-F1 06-23 00-00 0B-00 00-00 00-00 00-00 10-00 00-00 +// 00-00 00-80 ... 00-00 00-00 00-00 00-00 D2-67 19-FF 00-00 00-00 +// 00-75 59-F1 00-00 00-00 03-00 00-00 AB-AB AB-AB E0-40 92-F1 06-23 +// 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 +// 00-00 00-00> } +class PrintableNotification { + public: + explicit PrintableNotification(const message_center::Notification& base) + : display_source_(base.display_source()), + title_(base.title()), + message_(base.message()), + progress_(base.progress()) {} + + const base::string16& display_source() const { return display_source_; } + const base::string16& title() const { return title_; } + const base::string16& message() const { return message_; } + int progress() const { return progress_; } + + private: + const base::string16 display_source_; + const base::string16 title_; + const base::string16 message_; + const int progress_; +}; + +std::ostream& operator<<(std::ostream& os, + const PrintableNotification& notification) { + os << "source: \"" << notification.display_source() << "\", title: \"" + << notification.title() << "\", message: \"" << notification.message() + << "\", progress: " << notification.progress(); + return os; +} + +// Short-named conversion functions to avoid adding more noise than necessary +// to EXPECT_THAT calls. +PrintableNotification Printable(const message_center::Notification& base) { + return PrintableNotification(base); +} + +std::vector<PrintableNotification> Printable( + const std::vector<message_center::Notification>& base) { + std::vector<PrintableNotification> result; + result.reserve(base.size()); + for (const message_center::Notification& base_notification : base) { + result.push_back(PrintableNotification(base_notification)); + } + return result; +} + +class NotificationMatcher : public MatcherInterface<PrintableNotification> { + public: + NotificationMatcher(const base::string16& expected_source, + const base::string16& expected_title, + const base::string16& expected_message) + : expected_source_(expected_source), + expected_title_(expected_title), + check_message_(true), + expected_message_(expected_message), + check_progress_(false), + expected_progress_(-1) {} + NotificationMatcher(const base::string16& expected_source, + const base::string16& expected_title, + int expected_progress) + : expected_source_(expected_source), + expected_title_(expected_title), + check_message_(false), + expected_message_(), + check_progress_(true), + expected_progress_(expected_progress) {} + + bool MatchAndExplain(PrintableNotification notification, + MatchResultListener* listener) const override { + bool has_mismatch = false; + if (notification.display_source() != expected_source_) { + *listener << "notification source: " << notification.display_source() + << "\ndoes not equal expected source: " << expected_source_; + has_mismatch = true; + } + if (notification.title() != expected_title_) { + if (has_mismatch) { + *listener << "\nand\n"; + } + *listener << "notification title: " << notification.title() + << "\ndoes not equal expected title: " << expected_title_; + has_mismatch = true; + } + if (check_message_ && (notification.message() != expected_message_)) { + if (has_mismatch) { + *listener << "\nand\n"; + } + *listener << "notification message: " << notification.message() + << "\ndoes not equal expected message: " << expected_message_; + has_mismatch = true; + } + if (check_progress_ && (notification.progress() != expected_progress_)) { + if (has_mismatch) { + *listener << "\nand\n"; + } + *listener << "notification progress: " << notification.progress() + << "\ndoes not equal expected progress: " << expected_progress_; + has_mismatch = true; + } + return !has_mismatch; + } + + void DescribeTo(std::ostream* os) const override { + *os << "has notification source \"" << expected_source_ << "\" and title \"" + << expected_title_ << "\""; + if (check_message_) { + *os << " and message \"" << expected_message_ << "\""; + } + if (check_progress_) { + *os << " and progress " << expected_progress_; + } + } + + void DescribeNegationTo(std::ostream* os) const override { + *os << "does not have notification source \"" << expected_source_ + << "\" or does not have title \"" << expected_title_ << "\""; + if (check_message_) { + *os << " or does not have message \"" << expected_message_ << "\""; + } + if (check_progress_) { + *os << " or does not have progress " << expected_progress_; + } + } + + private: + const base::string16 expected_source_; + const base::string16 expected_title_; + const bool check_message_; + const base::string16 expected_message_; + const bool check_progress_; + const int expected_progress_; +}; + +Matcher<PrintableNotification> IsUninstallSuccessNotification( + KnownApp app = DEFAULT_APP) { + return MakeMatcher(new NotificationMatcher( + l10n_util::GetStringUTF16( + IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_DISPLAY_SOURCE), + l10n_util::GetStringFUTF16( + IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_COMPLETED_TITLE, + GetAppName(app)), + l10n_util::GetStringUTF16( + IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_COMPLETED_MESSAGE))); +} + +Matcher<PrintableNotification> IsUninstallFailedNotification( + KnownApp app = DEFAULT_APP) { + return MakeMatcher(new NotificationMatcher( + l10n_util::GetStringUTF16( + IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_DISPLAY_SOURCE), + l10n_util::GetStringFUTF16( + IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_ERROR_TITLE, + GetAppName(app)), + l10n_util::GetStringUTF16( + IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_ERROR_MESSAGE))); +} + +Matcher<PrintableNotification> IsUninstallProgressNotification( + int expected_progress, + KnownApp app = DEFAULT_APP) { + return MakeMatcher(new NotificationMatcher( + l10n_util::GetStringUTF16( + IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_DISPLAY_SOURCE), + l10n_util::GetStringFUTF16( + IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_IN_PROGRESS_TITLE, + GetAppName(app)), + expected_progress)); +} + +Matcher<PrintableNotification> IsUninstallQueuedNotification( + KnownApp app = DEFAULT_APP) { + return MakeMatcher(new NotificationMatcher( + l10n_util::GetStringUTF16( + IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_DISPLAY_SOURCE), + l10n_util::GetStringFUTF16( + IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_QUEUED_TITLE, + GetAppName(app)), + l10n_util::GetStringUTF16( + IDS_CROSTINI_APPLICATION_UNINSTALL_NOTIFICATION_QUEUED_MESSAGE))); +} + +Matcher<PrintableNotification> IsInstallProgressNotification( + int expected_progress) { + return MakeMatcher(new NotificationMatcher( + l10n_util::GetStringUTF16( + IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_DISPLAY_SOURCE), + l10n_util::GetStringUTF16( + IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_IN_PROGRESS_TITLE), + expected_progress)); +} + +Matcher<PrintableNotification> IsInstallSuccessNotification() { + return MakeMatcher(new NotificationMatcher( + l10n_util::GetStringUTF16( + IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_DISPLAY_SOURCE), + l10n_util::GetStringUTF16( + IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_COMPLETED_TITLE), + l10n_util::GetStringUTF16( + IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_COMPLETED_MESSAGE))); +} + +Matcher<PrintableNotification> IsInstallFailedNotification() { + return MakeMatcher(new NotificationMatcher( + l10n_util::GetStringUTF16( + IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_DISPLAY_SOURCE), + l10n_util::GetStringUTF16( + IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_ERROR_TITLE), + l10n_util::GetStringUTF16( + IDS_CROSTINI_PACKAGE_INSTALL_NOTIFICATION_ERROR_MESSAGE))); +} + +TEST_F(CrostiniPackageServiceTest, BasicUninstallMakesValidUninstallRequest) { + service_->QueueUninstallApplication(kDefaultAppId); + + UninstallPackageOwningFileRequest request; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr); + + EXPECT_EQ(request.vm_name(), kCrostiniDefaultVmName); + EXPECT_EQ(request.container_name(), kCrostiniDefaultContainerName); + EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get())); + EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId); +} + +TEST_F(CrostiniPackageServiceTest, DifferentVmMakesValidUninstallRequest) { + service_->QueueUninstallApplication(kDifferentVmAppId); + + UninstallPackageOwningFileRequest request; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr); + + EXPECT_EQ(request.vm_name(), kDifferentVmVmName); + EXPECT_EQ(request.container_name(), kCrostiniDefaultContainerName); + EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get())); + EXPECT_EQ(request.desktop_file_id(), kDifferentVmAppFileId); +} + +TEST_F(CrostiniPackageServiceTest, + DifferentContainerMakesValidUninstallRequest) { + service_->QueueUninstallApplication(kDifferentContainerAppId); + + UninstallPackageOwningFileRequest request; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr); + + EXPECT_EQ(request.vm_name(), kCrostiniDefaultVmName); + EXPECT_EQ(request.container_name(), kDifferentContainerContainerName); + EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get())); + EXPECT_EQ(request.desktop_file_id(), kDifferentContainerAppFileId); +} + +TEST_F(CrostiniPackageServiceTest, BasicUninstallDisplaysNotification) { + service_->QueueUninstallApplication(kDefaultAppId); + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification())); +} + +TEST_F(CrostiniPackageServiceTest, + FailedUninstallResponseDisplaysFailedNotification) { + service_->QueueUninstallApplication(kDefaultAppId); + + UninstallPackageOwningFileRequest request; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback); + + // Tell service the uninstall failed. + UninstallPackageOwningFileResponse response; + response.set_status(UninstallPackageOwningFileResponse::FAILED); + response.set_failure_reason("I prefer not to"); + std::move(callback).Run(response); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallFailedNotification())); +} + +TEST_F(CrostiniPackageServiceTest, + BlockedUninstallResponseDisplaysFailedNotification) { + service_->QueueUninstallApplication(kDefaultAppId); + + UninstallPackageOwningFileRequest request; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback); + + // Tell service the uninstall failed. + UninstallPackageOwningFileResponse response; + response.set_status( + UninstallPackageOwningFileResponse::BLOCKING_OPERATION_IN_PROGRESS); + response.set_failure_reason("Hahaha NO"); + std::move(callback).Run(response); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallFailedNotification())); +} + +TEST_F(CrostiniPackageServiceTest, + FailedUninstallSignalDisplaysFailedNotification) { + service_->QueueUninstallApplication(kDefaultAppId); + + StartAndSignalUninstall(UninstallPackageProgressSignal::FAILED); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallFailedNotification())); +} + +TEST_F(CrostiniPackageServiceTest, + UninstallDisplaysProgressNotificationBeforeResponse) { + service_->QueueUninstallApplication(kDefaultAppId); + + UninstallPackageOwningFileRequest request; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(0))); +} + +TEST_F(CrostiniPackageServiceTest, + UninstallDisplaysProgressNotificationBeforeSignal) { + service_->QueueUninstallApplication(kDefaultAppId); + + UninstallPackageOwningFileRequest request; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback); + UninstallPackageOwningFileResponse response; + response.set_status(UninstallPackageOwningFileResponse::STARTED); + std::move(callback).Run(response); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(0))); +} + +TEST_F(CrostiniPackageServiceTest, + UninstallDisplaysProgressNotificationAfterProgressSignal) { + service_->QueueUninstallApplication(kDefaultAppId); + + StartAndSignalUninstall(UninstallPackageProgressSignal::UNINSTALLING, + 23 /*progress_percent*/); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(23))); +} + +TEST_F(CrostiniPackageServiceTest, + UninstallDisplaysSuccessNotificationAfterProgressThenSuccess) { + service_->QueueUninstallApplication(kDefaultAppId); + + UninstallPackageOwningFileRequest request; + StartAndSignalUninstall(UninstallPackageProgressSignal::UNINSTALLING, + 50 /*progress_percent*/, kDefaultAppFileId, &request); + + UninstallPackageProgressSignal signal_success = MakeUninstallSignal(request); + signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED); + fake_cicerone_client_->UninstallPackageProgress(signal_success); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification())); +} + +TEST_F(CrostiniPackageServiceTest, + UninstallDisplaysFailureNotificationAfterProgressThenFailure) { + service_->QueueUninstallApplication(kDefaultAppId); + + UninstallPackageOwningFileRequest request; + StartAndSignalUninstall(UninstallPackageProgressSignal::UNINSTALLING, + 50 /*progress_percent*/, kDefaultAppFileId, &request); + + UninstallPackageProgressSignal signal_failure = MakeUninstallSignal(request); + signal_failure.set_status(UninstallPackageProgressSignal::FAILED); + signal_failure.set_failure_details("I prefer not to"); + fake_cicerone_client_->UninstallPackageProgress(signal_failure); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallFailedNotification())); +} + +TEST_F(CrostiniPackageServiceTest, SecondUninstallDisplaysQueuedNotification) { + service_->QueueUninstallApplication(kDefaultAppId); + service_->QueueUninstallApplication(kSecondAppId); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP), + IsUninstallQueuedNotification(SECOND_APP))); +} + +TEST_F(CrostiniPackageServiceTest, SecondUninstallStartsWhenFirstCompletes) { + service_->QueueUninstallApplication(kDefaultAppId); + service_->QueueUninstallApplication(kSecondAppId); + + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP), + IsUninstallProgressNotification(0, SECOND_APP))); +} + +TEST_F(CrostiniPackageServiceTest, SecondUninstallStartsWhenFirstFails) { + service_->QueueUninstallApplication(kDefaultAppId); + service_->QueueUninstallApplication(kSecondAppId); + + StartAndSignalUninstall(UninstallPackageProgressSignal::FAILED); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallFailedNotification(DEFAULT_APP), + IsUninstallProgressNotification(0, SECOND_APP))); +} + +TEST_F(CrostiniPackageServiceTest, + AfterSecondInstallStartsProgressAppliesToSecond) { + service_->QueueUninstallApplication(kDefaultAppId); + service_->QueueUninstallApplication(kSecondAppId); + + // Uninstall the first. + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED); + + // Start uninstalling the second + StartAndSignalUninstall(UninstallPackageProgressSignal::UNINSTALLING, + 46 /*progress_percent*/, kSecondAppFileId); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP), + IsUninstallProgressNotification(46, SECOND_APP))); +} + +TEST_F(CrostiniPackageServiceTest, BothUninstallsEventuallyComplete) { + service_->QueueUninstallApplication(kDefaultAppId); + service_->QueueUninstallApplication(kSecondAppId); + + // Uninstall the first. + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED); + + // Uninstall the second. + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED, + 0 /*progress_percent*/, kSecondAppFileId); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP), + IsUninstallSuccessNotification(SECOND_APP))); +} + +TEST_F(CrostiniPackageServiceTest, QueuedUninstallsProcessedInFifoOrder) { + service_->QueueUninstallApplication(kDefaultAppId); + service_->QueueUninstallApplication(kSecondAppId); + service_->QueueUninstallApplication(kThirdAppId); + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP), + IsUninstallQueuedNotification(SECOND_APP), + IsUninstallQueuedNotification(THIRD_APP))); + + // Finish the first; second should start. + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED); + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP), + IsUninstallProgressNotification(0, SECOND_APP), + IsUninstallQueuedNotification(THIRD_APP))); + + // Finish the second, third should start. + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED, + 0 /*progress_percent*/, kSecondAppFileId); + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP), + IsUninstallSuccessNotification(SECOND_APP), + IsUninstallProgressNotification(0, THIRD_APP))); + + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED, + 0 /*progress_percent*/, kThirdAppFileId); + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP), + IsUninstallSuccessNotification(SECOND_APP), + IsUninstallSuccessNotification(THIRD_APP))); +} + +TEST_F(CrostiniPackageServiceTest, ClosingSuccessNotificationWorks) { + service_->QueueUninstallApplication(kDefaultAppId); + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED); + + std::vector<message_center::Notification> notifications = + notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT); + ASSERT_EQ(notifications.size(), 1U); + EXPECT_THAT(Printable(notifications[0]), IsUninstallSuccessNotification()); + CloseNotification(notifications[0]); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + IsEmpty()); +} + +TEST_F(CrostiniPackageServiceTest, ClosingFailureNotificationWorks) { + service_->QueueUninstallApplication(kDefaultAppId); + StartAndSignalUninstall(UninstallPackageProgressSignal::FAILED); + + std::vector<message_center::Notification> notifications = + notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT); + ASSERT_EQ(notifications.size(), 1U); + EXPECT_THAT(Printable(notifications[0]), IsUninstallFailedNotification()); + CloseNotification(notifications[0]); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + IsEmpty()); +} + +TEST_F(CrostiniPackageServiceTest, + ClosedInProgressNotificationDoesNotReopenOnProgress) { + service_->QueueUninstallApplication(kDefaultAppId); + + UninstallPackageOwningFileRequest request; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback); + EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId); + UninstallPackageOwningFileResponse response; + response.set_status(UninstallPackageOwningFileResponse::STARTED); + std::move(callback).Run(response); + + std::vector<message_center::Notification> notifications = + notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT); + ASSERT_EQ(notifications.size(), 1U); + EXPECT_THAT(Printable(notifications[0]), IsUninstallProgressNotification(0)); + CloseNotification(notifications[0]); + + UninstallPackageProgressSignal signal_progress = MakeUninstallSignal(request); + signal_progress.set_status(UninstallPackageProgressSignal::UNINSTALLING); + signal_progress.set_progress_percent(50); + fake_cicerone_client_->UninstallPackageProgress(signal_progress); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + IsEmpty()); +} + +TEST_F(CrostiniPackageServiceTest, + ClosedInProgressNotificationReopensOnSuccess) { + service_->QueueUninstallApplication(kDefaultAppId); + + UninstallPackageOwningFileRequest request; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback); + EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId); + UninstallPackageOwningFileResponse response; + response.set_status(UninstallPackageOwningFileResponse::STARTED); + std::move(callback).Run(response); + + std::vector<message_center::Notification> notifications = + notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT); + ASSERT_EQ(notifications.size(), 1U); + EXPECT_THAT(Printable(notifications[0]), IsUninstallProgressNotification(0)); + CloseNotification(notifications[0]); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + IsEmpty()); + + UninstallPackageProgressSignal signal_success = MakeUninstallSignal(request); + signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED); + fake_cicerone_client_->UninstallPackageProgress(signal_success); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification())); +} + +TEST_F(CrostiniPackageServiceTest, + ClosedInProgressNotificationReopensOnFailure) { + service_->QueueUninstallApplication(kDefaultAppId); + + UninstallPackageOwningFileRequest request; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback); + EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId); + UninstallPackageOwningFileResponse response; + response.set_status(UninstallPackageOwningFileResponse::STARTED); + std::move(callback).Run(response); + + std::vector<message_center::Notification> notifications = + notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT); + ASSERT_EQ(notifications.size(), 1U); + EXPECT_THAT(Printable(notifications[0]), IsUninstallProgressNotification(0)); + CloseNotification(notifications[0]); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + IsEmpty()); + + UninstallPackageProgressSignal signal_failure = MakeUninstallSignal(request); + signal_failure.set_status(UninstallPackageProgressSignal::FAILED); + signal_failure.set_failure_details("I prefer not to"); + fake_cicerone_client_->UninstallPackageProgress(signal_failure); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallFailedNotification())); +} + +TEST_F(CrostiniPackageServiceTest, + ClosedQueuedNotificationDoesNotReopenOnProgress) { + service_->QueueUninstallApplication(kDefaultAppId); + service_->QueueUninstallApplication(kSecondAppId); + + std::vector<message_center::Notification> notifications = + notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT); + ASSERT_EQ(notifications.size(), 2U); + EXPECT_THAT(Printable(notifications[1]), + IsUninstallQueuedNotification(SECOND_APP)); + CloseNotification(notifications[1]); + + // Complete Uninstall 1 + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED); + + // Uninstall 2 is now started, but we don't see a notification. + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP))); +} + +TEST_F(CrostiniPackageServiceTest, + ClosedQueuedNotificationDoesNotReopenOnFurtherProgress) { + service_->QueueUninstallApplication(kDefaultAppId); + service_->QueueUninstallApplication(kSecondAppId); + + std::vector<message_center::Notification> notifications = + notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT); + ASSERT_EQ(notifications.size(), 2U); + EXPECT_THAT(Printable(notifications[1]), + IsUninstallQueuedNotification(SECOND_APP)); + CloseNotification(notifications[1]); + + // Complete Uninstall 1 + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED); + + // Start Uninstall 2 + StartAndSignalUninstall(UninstallPackageProgressSignal::UNINSTALLING, + 50 /*progress_percent*/, kSecondAppFileId); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP))); +} + +TEST_F(CrostiniPackageServiceTest, + ClosedQueuedNotificationReopensOnCompletion) { + service_->QueueUninstallApplication(kDefaultAppId); + service_->QueueUninstallApplication(kSecondAppId); + + std::vector<message_center::Notification> notifications = + notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT); + ASSERT_EQ(notifications.size(), 2U); + EXPECT_THAT(Printable(notifications[1]), + IsUninstallQueuedNotification(SECOND_APP)); + CloseNotification(notifications[1]); + + // Complete Uninstall 1 + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED); + + // Complete Uninstall 2 + StartAndSignalUninstall(UninstallPackageProgressSignal::SUCCEEDED, + 0 /*progress_percent*/, kSecondAppFileId); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP), + IsUninstallSuccessNotification(SECOND_APP))); +} + +TEST_F(CrostiniPackageServiceTest, UninstallsOnDifferentVmsDoNotInterfere) { + service_->QueueUninstallApplication(kDefaultAppId); + UninstallPackageOwningFileRequest request; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback); + EXPECT_EQ(request.vm_name(), kCrostiniDefaultVmName); + EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId); + + service_->QueueUninstallApplication(kDifferentVmAppId); + UninstallPackageOwningFileRequest request_different_vm; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback_different_vm; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request_different_vm, + &callback_different_vm); + EXPECT_EQ(request_different_vm.vm_name(), kDifferentVmVmName); + EXPECT_EQ(request_different_vm.desktop_file_id(), kDifferentVmAppFileId); + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP), + IsUninstallProgressNotification(0, DIFFERENT_VM))); + + UninstallPackageOwningFileResponse response; + response.set_status(UninstallPackageOwningFileResponse::STARTED); + std::move(callback).Run(response); + UninstallPackageProgressSignal signal_progress = MakeUninstallSignal(request); + signal_progress.set_status(UninstallPackageProgressSignal::UNINSTALLING); + signal_progress.set_progress_percent(60); + fake_cicerone_client_->UninstallPackageProgress(signal_progress); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(60, DEFAULT_APP), + IsUninstallProgressNotification(0, DIFFERENT_VM))); + + std::move(callback_different_vm).Run(response); + signal_progress = MakeUninstallSignal(request_different_vm); + signal_progress.set_status(UninstallPackageProgressSignal::UNINSTALLING); + signal_progress.set_progress_percent(40); + fake_cicerone_client_->UninstallPackageProgress(signal_progress); + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(60, DEFAULT_APP), + IsUninstallProgressNotification(40, DIFFERENT_VM))); + + UninstallPackageProgressSignal signal_success = + MakeUninstallSignal(request_different_vm); + signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED); + fake_cicerone_client_->UninstallPackageProgress(signal_success); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(60, DEFAULT_APP), + IsUninstallSuccessNotification(DIFFERENT_VM))); + + UninstallPackageProgressSignal signal_failure = MakeUninstallSignal(request); + signal_failure.set_status(UninstallPackageProgressSignal::FAILED); + signal_failure.set_failure_details("Nope"); + fake_cicerone_client_->UninstallPackageProgress(signal_failure); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallFailedNotification(DEFAULT_APP), + IsUninstallSuccessNotification(DIFFERENT_VM))); +} + +TEST_F(CrostiniPackageServiceTest, UninstallsOnDifferentVmsHaveSeparateQueues) { + service_->QueueUninstallApplication(kDefaultAppId); + UninstallPackageOwningFileRequest request_default; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback_default; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request_default, + &callback_default); + EXPECT_EQ(request_default.vm_name(), kCrostiniDefaultVmName); + EXPECT_EQ(request_default.desktop_file_id(), kDefaultAppFileId); + + service_->QueueUninstallApplication(kDifferentVmAppId); + UninstallPackageOwningFileRequest request_different_vm; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback_different_vm; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request_different_vm, + &callback_different_vm); + EXPECT_EQ(request_different_vm.vm_name(), kDifferentVmVmName); + EXPECT_EQ(request_different_vm.desktop_file_id(), kDifferentVmAppFileId); + + service_->QueueUninstallApplication(kSecondAppId); + service_->QueueUninstallApplication(kDifferentVmApp2Id); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP), + IsUninstallProgressNotification(0, DIFFERENT_VM), + IsUninstallQueuedNotification(SECOND_APP), + IsUninstallQueuedNotification(DIFFERENT_VM_2))); + + UninstallPackageOwningFileResponse response; + response.set_status(UninstallPackageOwningFileResponse::FAILED); + std::move(callback_different_vm).Run(response); + + // Even though kSecondAppId was queued first, kDifferentVmApp2Id is moved + // to progress state, because it's on a different queue. + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP), + IsUninstallFailedNotification(DIFFERENT_VM), + IsUninstallQueuedNotification(SECOND_APP), + IsUninstallProgressNotification(0, DIFFERENT_VM_2))); + + UninstallPackageOwningFileRequest request_different_vm_2; + DBusMethodCallback<UninstallPackageOwningFileResponse> + callback_different_vm_2; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request_different_vm_2, + &callback_different_vm_2); + EXPECT_EQ(request_different_vm_2.vm_name(), kDifferentVmVmName); + EXPECT_EQ(request_different_vm_2.desktop_file_id(), kDifferentVmApp2FileId); + response.set_status(UninstallPackageOwningFileResponse::STARTED); + std::move(callback_different_vm_2).Run(response); + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP), + IsUninstallFailedNotification(DIFFERENT_VM), + IsUninstallQueuedNotification(SECOND_APP), + IsUninstallProgressNotification(0, DIFFERENT_VM_2))); + + UninstallPackageProgressSignal signal_success = + MakeUninstallSignal(request_different_vm_2); + signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED); + fake_cicerone_client_->UninstallPackageProgress(signal_success); + + // Even though the task finished on VM 2, SECOND_APP does not start + // uninstalling because it is on a different queue. + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(0, DEFAULT_APP), + IsUninstallFailedNotification(DIFFERENT_VM), + IsUninstallQueuedNotification(SECOND_APP), + IsUninstallSuccessNotification(DIFFERENT_VM_2))); + + std::move(callback_default).Run(response); + signal_success = MakeUninstallSignal(request_default); + signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED); + fake_cicerone_client_->UninstallPackageProgress(signal_success); + + // Only when the uninstall on the default VM is done does SECOND_APP start + // uninstalling. + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallSuccessNotification(DEFAULT_APP), + IsUninstallFailedNotification(DIFFERENT_VM), + IsUninstallProgressNotification(0, SECOND_APP), + IsUninstallSuccessNotification(DIFFERENT_VM_2))); +} + +TEST_F(CrostiniPackageServiceTest, + UninstallsOnDifferentContainersDoNotInterfere) { + service_->QueueUninstallApplication(kDefaultAppId); + UninstallPackageOwningFileRequest request; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, &callback); + EXPECT_EQ(request.container_name(), kCrostiniDefaultContainerName); + EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId); + + service_->QueueUninstallApplication(kDifferentContainerAppId); + UninstallPackageOwningFileRequest request_different_container; + DBusMethodCallback<UninstallPackageOwningFileResponse> + callback_different_container; + RunUntilUninstallRequestMade(fake_cicerone_client_, + &request_different_container, + &callback_different_container); + EXPECT_EQ(request_different_container.container_name(), + kDifferentContainerContainerName); + EXPECT_EQ(request_different_container.desktop_file_id(), + kDifferentContainerAppFileId); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre( + IsUninstallProgressNotification(0, DEFAULT_APP), + IsUninstallProgressNotification(0, DIFFERENT_CONTAINER))); + + UninstallPackageOwningFileResponse response; + response.set_status(UninstallPackageOwningFileResponse::STARTED); + std::move(callback).Run(response); + UninstallPackageProgressSignal signal_progress = MakeUninstallSignal(request); + signal_progress.set_status(UninstallPackageProgressSignal::UNINSTALLING); + signal_progress.set_progress_percent(60); + fake_cicerone_client_->UninstallPackageProgress(signal_progress); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre( + IsUninstallProgressNotification(60, DEFAULT_APP), + IsUninstallProgressNotification(0, DIFFERENT_CONTAINER))); + + std::move(callback_different_container).Run(response); + signal_progress = MakeUninstallSignal(request_different_container); + signal_progress.set_status(UninstallPackageProgressSignal::UNINSTALLING); + signal_progress.set_progress_percent(40); + fake_cicerone_client_->UninstallPackageProgress(signal_progress); + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre( + IsUninstallProgressNotification(60, DEFAULT_APP), + IsUninstallProgressNotification(40, DIFFERENT_CONTAINER))); + + UninstallPackageProgressSignal signal_success = + MakeUninstallSignal(request_different_container); + signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED); + fake_cicerone_client_->UninstallPackageProgress(signal_success); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre( + IsUninstallProgressNotification(60, DEFAULT_APP), + IsUninstallSuccessNotification(DIFFERENT_CONTAINER))); + + UninstallPackageProgressSignal signal_failure = MakeUninstallSignal(request); + signal_failure.set_status(UninstallPackageProgressSignal::FAILED); + signal_failure.set_failure_details("Nope"); + fake_cicerone_client_->UninstallPackageProgress(signal_failure); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre( + IsUninstallFailedNotification(DEFAULT_APP), + IsUninstallSuccessNotification(DIFFERENT_CONTAINER))); +} + +TEST_F(CrostiniPackageServiceTest, + UninstallsOnDifferentContainersHaveSeparateQueues) { + service_->QueueUninstallApplication(kDefaultAppId); + UninstallPackageOwningFileRequest request_default; + DBusMethodCallback<UninstallPackageOwningFileResponse> callback_default; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request_default, + &callback_default); + EXPECT_EQ(request_default.container_name(), kCrostiniDefaultContainerName); + EXPECT_EQ(request_default.desktop_file_id(), kDefaultAppFileId); + + service_->QueueUninstallApplication(kDifferentContainerAppId); + UninstallPackageOwningFileRequest request_different_container; + DBusMethodCallback<UninstallPackageOwningFileResponse> + callback_different_container; + RunUntilUninstallRequestMade(fake_cicerone_client_, + &request_different_container, + &callback_different_container); + EXPECT_EQ(request_different_container.container_name(), + kDifferentContainerContainerName); + EXPECT_EQ(request_different_container.desktop_file_id(), + kDifferentContainerAppFileId); + + service_->QueueUninstallApplication(kSecondAppId); + service_->QueueUninstallApplication(kDifferentContainerApp2Id); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre( + IsUninstallProgressNotification(0, DEFAULT_APP), + IsUninstallProgressNotification(0, DIFFERENT_CONTAINER), + IsUninstallQueuedNotification(SECOND_APP), + IsUninstallQueuedNotification(DIFFERENT_CONTAINER_2))); + + UninstallPackageOwningFileResponse response; + response.set_status(UninstallPackageOwningFileResponse::FAILED); + std::move(callback_different_container).Run(response); + + // Even though kSecondAppId was queued first, kDifferentContainerApp2Id is + // moved to progress state, because it's on a different queue. + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre( + IsUninstallProgressNotification(0, DEFAULT_APP), + IsUninstallFailedNotification(DIFFERENT_CONTAINER), + IsUninstallQueuedNotification(SECOND_APP), + IsUninstallProgressNotification(0, DIFFERENT_CONTAINER_2))); + + UninstallPackageOwningFileRequest request_different_container_2; + DBusMethodCallback<UninstallPackageOwningFileResponse> + callback_different_container_2; + RunUntilUninstallRequestMade(fake_cicerone_client_, + &request_different_container_2, + &callback_different_container_2); + EXPECT_EQ(request_different_container_2.container_name(), + kDifferentContainerContainerName); + EXPECT_EQ(request_different_container_2.desktop_file_id(), + kDifferentContainerApp2FileId); + response.set_status(UninstallPackageOwningFileResponse::STARTED); + std::move(callback_different_container_2).Run(response); + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre( + IsUninstallProgressNotification(0, DEFAULT_APP), + IsUninstallFailedNotification(DIFFERENT_CONTAINER), + IsUninstallQueuedNotification(SECOND_APP), + IsUninstallProgressNotification(0, DIFFERENT_CONTAINER_2))); + + UninstallPackageProgressSignal signal_success = + MakeUninstallSignal(request_different_container_2); + signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED); + fake_cicerone_client_->UninstallPackageProgress(signal_success); + + // Even though the task finished on container 2, SECOND_APP does not start + // uninstalling because it is on a different queue. + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre( + IsUninstallProgressNotification(0, DEFAULT_APP), + IsUninstallFailedNotification(DIFFERENT_CONTAINER), + IsUninstallQueuedNotification(SECOND_APP), + IsUninstallSuccessNotification(DIFFERENT_CONTAINER_2))); + + std::move(callback_default).Run(response); + signal_success = MakeUninstallSignal(request_default); + signal_success.set_status(UninstallPackageProgressSignal::SUCCEEDED); + fake_cicerone_client_->UninstallPackageProgress(signal_success); + + // Only when the uninstall on the default container is done does SECOND_APP + // start uninstalling. + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre( + IsUninstallSuccessNotification(DEFAULT_APP), + IsUninstallFailedNotification(DIFFERENT_CONTAINER), + IsUninstallProgressNotification(0, SECOND_APP), + IsUninstallSuccessNotification(DIFFERENT_CONTAINER_2))); +} + +TEST_F(CrostiniPackageServiceTest, InstallSendsValidRequest) { + CrostiniResult result = CrostiniResult::UNKNOWN_ERROR; + service_->InstallLinuxPackage( + kDifferentVmVmName, kDifferentContainerContainerName, kPackageFilePath, + base::BindOnce(&RecordInstallResult, base::Unretained(&result))); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(result, CrostiniResult::SUCCESS); + const vm_tools::cicerone::InstallLinuxPackageRequest& request = + fake_cicerone_client_->get_most_recent_install_linux_package_request(); + + EXPECT_EQ(request.vm_name(), kDifferentVmVmName); + EXPECT_EQ(request.container_name(), kDifferentContainerContainerName); + EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get())); + EXPECT_EQ(request.file_path(), kPackageFilePath); +} + +TEST_F(CrostiniPackageServiceTest, InstallDisplaysProgressNotificationOnStart) { + CrostiniResult result = CrostiniResult::UNKNOWN_ERROR; + service_->InstallLinuxPackage( + kCrostiniDefaultVmName, kCrostiniDefaultContainerName, kPackageFilePath, + base::BindOnce(&RecordInstallResult, base::Unretained(&result))); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(result, CrostiniResult::SUCCESS); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsInstallProgressNotification(0))); +} + +TEST_F(CrostiniPackageServiceTest, + InstallUpdatesProgressNotificationOnDownloadingSignal) { + service_->InstallLinuxPackage(kCrostiniDefaultVmName, + kCrostiniDefaultContainerName, kPackageFilePath, + base::DoNothing()); + StartAndSignalInstall(InstallLinuxPackageProgressSignal::DOWNLOADING, + 44 /*progress_percent*/); + + // 22 = 44/2 + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsInstallProgressNotification(22))); +} + +TEST_F(CrostiniPackageServiceTest, + InstallUpdatesProgressNotificationOnInstallingSignal) { + service_->InstallLinuxPackage(kCrostiniDefaultVmName, + kCrostiniDefaultContainerName, kPackageFilePath, + base::DoNothing()); + StartAndSignalInstall(InstallLinuxPackageProgressSignal::INSTALLING, + 44 /*progress_percent*/); + + // 72 = 44/2 + 50 + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsInstallProgressNotification(72))); +} + +TEST_F(CrostiniPackageServiceTest, + InstallDisplaysSuccessNotificationOnSuccessSignal) { + service_->InstallLinuxPackage(kCrostiniDefaultVmName, + kCrostiniDefaultContainerName, kPackageFilePath, + base::DoNothing()); + StartAndSignalInstall(InstallLinuxPackageProgressSignal::SUCCEEDED); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsInstallSuccessNotification())); +} + +TEST_F(CrostiniPackageServiceTest, + InstallDisplaysNoNotificationOnFailedResponse) { + InstallLinuxPackageResponse response; + response.set_status(InstallLinuxPackageResponse::FAILED); + response.set_failure_reason("No such file"); + fake_cicerone_client_->set_install_linux_package_response(response); + CrostiniResult result = CrostiniResult::UNKNOWN_ERROR; + service_->InstallLinuxPackage( + kCrostiniDefaultVmName, kCrostiniDefaultContainerName, kPackageFilePath, + base::BindOnce(&RecordInstallResult, base::Unretained(&result))); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(result, CrostiniResult::INSTALL_LINUX_PACKAGE_FAILED); + // Failures from the original Cicerone call are reported via the callback not + // a notification popup. + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + IsEmpty()); +} + +TEST_F(CrostiniPackageServiceTest, + InstallDisplaysNoNotificationOnOtherInstallActiveResponse) { + InstallLinuxPackageResponse response; + response.set_status(InstallLinuxPackageResponse::INSTALL_ALREADY_ACTIVE); + fake_cicerone_client_->set_install_linux_package_response(response); + CrostiniResult result = CrostiniResult::UNKNOWN_ERROR; + service_->InstallLinuxPackage( + kCrostiniDefaultVmName, kCrostiniDefaultContainerName, kPackageFilePath, + base::BindOnce(&RecordInstallResult, base::Unretained(&result))); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(result, CrostiniResult::BLOCKING_OPERATION_ALREADY_ACTIVE); + // Failures from the original Cicerone call are reported via the callback not + // a notification popup. + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + IsEmpty()); +} + +TEST_F(CrostiniPackageServiceTest, + InstallDisplaysFailureNotificationOnFailedSignal) { + service_->InstallLinuxPackage(kCrostiniDefaultVmName, + kCrostiniDefaultContainerName, kPackageFilePath, + base::DoNothing()); + StartAndSignalInstall(InstallLinuxPackageProgressSignal::FAILED); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsInstallFailedNotification())); +} + +TEST_F(CrostiniPackageServiceTest, UninstallsQueuesBehindStartingUpInstall) { + CrostiniResult result = CrostiniResult::UNKNOWN_ERROR; + service_->InstallLinuxPackage( + kCrostiniDefaultVmName, kCrostiniDefaultContainerName, kPackageFilePath, + base::BindOnce(&RecordInstallResult, base::Unretained(&result))); + service_->QueueUninstallApplication(kDefaultAppId); + + // Install doesn't show a notification until it gets a response, but uninstall + // still shows a queued notification. + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallQueuedNotification())); +} + +TEST_F(CrostiniPackageServiceTest, InstallRunsInFrontOfQueuedUninstall) { + CrostiniResult result = CrostiniResult::UNKNOWN_ERROR; + service_->InstallLinuxPackage( + kCrostiniDefaultVmName, kCrostiniDefaultContainerName, kPackageFilePath, + base::BindOnce(&RecordInstallResult, base::Unretained(&result))); + service_->QueueUninstallApplication(kDefaultAppId); + base::RunLoop().RunUntilIdle(); + + // Ensure the install started, not the uninstall. + EXPECT_EQ(result, CrostiniResult::SUCCESS); + const vm_tools::cicerone::InstallLinuxPackageRequest& request = + fake_cicerone_client_->get_most_recent_install_linux_package_request(); + EXPECT_EQ(request.file_path(), kPackageFilePath); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsInstallProgressNotification(0), + IsUninstallQueuedNotification())); +} + +TEST_F(CrostiniPackageServiceTest, QueuedUninstallRunsAfterCompletedInstall) { + CrostiniResult result = CrostiniResult::UNKNOWN_ERROR; + service_->InstallLinuxPackage( + kCrostiniDefaultVmName, kCrostiniDefaultContainerName, kPackageFilePath, + base::BindOnce(&RecordInstallResult, base::Unretained(&result))); + service_->QueueUninstallApplication(kDefaultAppId); + StartAndSignalInstall(InstallLinuxPackageProgressSignal::SUCCEEDED); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsInstallSuccessNotification(), + IsUninstallProgressNotification(0))); + UninstallPackageOwningFileRequest request; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr); + + EXPECT_EQ(request.vm_name(), kCrostiniDefaultVmName); + EXPECT_EQ(request.container_name(), kCrostiniDefaultContainerName); + EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get())); + EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId); +} + +TEST_F(CrostiniPackageServiceTest, + QueuedUninstallRunsAfterFailedToStartInstall) { + InstallLinuxPackageResponse response; + response.set_status(InstallLinuxPackageResponse::FAILED); + response.set_failure_reason("No such file"); + fake_cicerone_client_->set_install_linux_package_response(response); + service_->InstallLinuxPackage(kCrostiniDefaultVmName, + kCrostiniDefaultContainerName, kPackageFilePath, + base::DoNothing()); + service_->QueueUninstallApplication(kDefaultAppId); + + UninstallPackageOwningFileRequest request; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr); + + // Install never brings up a notification because the response was 'failed', + // but the queued uninstall starts running. + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsUninstallProgressNotification(0))); + + EXPECT_EQ(request.vm_name(), kCrostiniDefaultVmName); + EXPECT_EQ(request.container_name(), kCrostiniDefaultContainerName); + EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get())); + EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId); +} + +TEST_F(CrostiniPackageServiceTest, + QueuedUninstallRunsAfterFailedInstallSignal) { + service_->InstallLinuxPackage(kCrostiniDefaultVmName, + kCrostiniDefaultContainerName, kPackageFilePath, + base::DoNothing()); + service_->QueueUninstallApplication(kDefaultAppId); + StartAndSignalInstall(InstallLinuxPackageProgressSignal::FAILED); + + EXPECT_THAT( + Printable(notification_display_service_->GetDisplayedNotificationsForType( + NotificationHandler::Type::TRANSIENT)), + UnorderedElementsAre(IsInstallFailedNotification(), + IsUninstallProgressNotification(0))); + UninstallPackageOwningFileRequest request; + RunUntilUninstallRequestMade(fake_cicerone_client_, &request, nullptr); + + EXPECT_EQ(request.vm_name(), kCrostiniDefaultVmName); + EXPECT_EQ(request.container_name(), kCrostiniDefaultContainerName); + EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get())); + EXPECT_EQ(request.desktop_file_id(), kDefaultAppFileId); +} + +TEST_F(CrostiniPackageServiceTest, GetLinuxPackageInfoSendsCorrectRequest) { + service_->GetLinuxPackageInfo(kDifferentVmVmName, + kDifferentContainerContainerName, + kPackageFilePath, base::DoNothing()); + + base::RunLoop().RunUntilIdle(); + + const LinuxPackageInfoRequest& request = + fake_cicerone_client_->get_most_recent_linux_package_info_request(); + EXPECT_EQ(request.vm_name(), kDifferentVmVmName); + EXPECT_EQ(request.container_name(), kDifferentContainerContainerName); + EXPECT_EQ(request.owner_id(), CryptohomeIdForProfile(profile_.get())); + EXPECT_EQ(request.file_path(), kPackageFilePath); +} + +TEST_F(CrostiniPackageServiceTest, GetLinuxPackageInfoReturnsInfoOnSuccess) { + LinuxPackageInfoResponse response; + response.set_success(true); + response.set_package_id("nethack;3.6.1;x64;some data"); + response.set_license("ngpl"); + response.set_description("Explore the Dungeon!"); + response.set_project_url("https://www.nethack.org/"); + response.set_size(548422342432); + response.set_summary("Fight! Run! Win!"); + fake_cicerone_client_->set_linux_package_info_response(response); + + LinuxPackageInfo result; + service_->GetLinuxPackageInfo( + kDifferentVmVmName, kDifferentContainerContainerName, kPackageFilePath, + base::BindOnce(&RecordPackageInfoResult, base::Unretained(&result))); + + base::RunLoop().RunUntilIdle(); + + EXPECT_TRUE(result.success); + EXPECT_EQ(result.name, "nethack"); + EXPECT_EQ(result.version, "3.6.1"); + EXPECT_EQ(result.summary, response.summary()); + EXPECT_EQ(result.description, response.description()); +} + +TEST_F(CrostiniPackageServiceTest, GetLinuxPackageInfoReturnsFailureOnFailure) { + LinuxPackageInfoResponse response; + response.set_success(false); + fake_cicerone_client_->set_linux_package_info_response(response); + + LinuxPackageInfo result; + service_->GetLinuxPackageInfo( + kDifferentVmVmName, kDifferentContainerContainerName, kPackageFilePath, + base::BindOnce(&RecordPackageInfoResult, base::Unretained(&result))); + + base::RunLoop().RunUntilIdle(); + + EXPECT_FALSE(result.success); +} + +} // namespace + +} // namespace crostini
diff --git a/chrome/browser/chromeos/login/auto_launched_kiosk_browsertest.cc b/chrome/browser/chromeos/login/auto_launched_kiosk_browsertest.cc index 0f026c7e..51d309e 100644 --- a/chrome/browser/chromeos/login/auto_launched_kiosk_browsertest.cc +++ b/chrome/browser/chromeos/login/auto_launched_kiosk_browsertest.cc
@@ -493,7 +493,8 @@ DISALLOW_COPY_AND_ASSIGN(AutoLaunchedKioskTest); }; -IN_PROC_BROWSER_TEST_F(AutoLaunchedKioskTest, PRE_CrashRestore) { +// TODO(crbug.com/930345): Disabled due to flakiness. +IN_PROC_BROWSER_TEST_F(AutoLaunchedKioskTest, DISABLED_PRE_CrashRestore) { // Verify that Chrome hasn't already exited, e.g. in order to apply user // session flags. ASSERT_FALSE(termination_observer_->terminated()); @@ -516,7 +517,8 @@ ASSERT_TRUE(CloseAppWindow(kTestKioskApp)); } -IN_PROC_BROWSER_TEST_F(AutoLaunchedKioskTest, CrashRestore) { +// TODO(crbug.com/930345): Disabled due to flakiness. +IN_PROC_BROWSER_TEST_F(AutoLaunchedKioskTest, DISABLED_CrashRestore) { // Verify that Chrome hasn't already exited, e.g. in order to apply user // session flags. ASSERT_FALSE(termination_observer_->terminated());
diff --git a/chrome/browser/chromeos/smb_client/smb_service.cc b/chrome/browser/chromeos/smb_client/smb_service.cc index b2fcaf63..82bdedab 100644 --- a/chrome/browser/chromeos/smb_client/smb_service.cc +++ b/chrome/browser/chromeos/smb_client/smb_service.cc
@@ -11,6 +11,7 @@ #include "base/files/file_path.h" #include "base/metrics/histogram_macros.h" #include "base/task/post_task.h" +#include "base/time/default_tick_clock.h" #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" @@ -108,8 +109,11 @@ bool SmbService::service_should_run_ = false; -SmbService::SmbService(Profile* profile) - : provider_id_(ProviderId::CreateFromNativeId("smb")), profile_(profile) { +SmbService::SmbService(Profile* profile, + std::unique_ptr<base::TickClock> tick_clock) + : provider_id_(ProviderId::CreateFromNativeId("smb")), + profile_(profile), + tick_clock_(std::move(tick_clock)) { service_should_run_ = IsEnabledByFlag() && IsAllowedByPolicy(); if (service_should_run_) { StartSetup();
diff --git a/chrome/browser/chromeos/smb_client/smb_service.h b/chrome/browser/chromeos/smb_client/smb_service.h index 49857e74..e2a1f0e 100644 --- a/chrome/browser/chromeos/smb_client/smb_service.h +++ b/chrome/browser/chromeos/smb_client/smb_service.h
@@ -14,6 +14,7 @@ #include "base/files/file.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "base/time/time.h" #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h" #include "chrome/browser/chromeos/file_system_provider/provider_interface.h" #include "chrome/browser/chromeos/file_system_provider/service.h" @@ -51,7 +52,7 @@ using StartReadDirIfSuccessfulCallback = base::OnceCallback<void(bool should_retry_start_read_dir)>; - explicit SmbService(Profile* profile); + SmbService(Profile* profile, std::unique_ptr<base::TickClock> tick_clock); ~SmbService() override; // Gets the singleton instance for the |context|. @@ -239,6 +240,7 @@ static bool service_should_run_; const ProviderId provider_id_; Profile* profile_; + std::unique_ptr<base::TickClock> tick_clock_; std::unique_ptr<TempFileManager> temp_file_manager_; std::unique_ptr<SmbShareFinder> share_finder_; // |mount_id| -> |reply|. Stored callbacks to run after updating credential.
diff --git a/chrome/browser/chromeos/smb_client/smb_service_factory.cc b/chrome/browser/chromeos/smb_client/smb_service_factory.cc index c4acd5e..cba5962f 100644 --- a/chrome/browser/chromeos/smb_client/smb_service_factory.cc +++ b/chrome/browser/chromeos/smb_client/smb_service_factory.cc
@@ -4,6 +4,9 @@ #include "chrome/browser/chromeos/smb_client/smb_service_factory.h" +#include <memory> + +#include "base/time/default_tick_clock.h" #include "chrome/browser/chromeos/authpolicy/auth_policy_credentials_manager.h" #include "chrome/browser/chromeos/file_system_provider/service_factory.h" #include "chrome/browser/chromeos/smb_client/smb_service.h" @@ -43,7 +46,8 @@ KeyedService* SmbServiceFactory::BuildServiceInstanceFor( content::BrowserContext* profile) const { - return new SmbService(Profile::FromBrowserContext(profile)); + return new SmbService(Profile::FromBrowserContext(profile), + std::make_unique<base::DefaultTickClock>()); } content::BrowserContext* SmbServiceFactory::GetBrowserContextToUse(
diff --git a/chrome/browser/chromeos/smb_client/smb_service_unittest.cc b/chrome/browser/chromeos/smb_client/smb_service_unittest.cc index 4eb39d5..608709d0 100644 --- a/chrome/browser/chromeos/smb_client/smb_service_unittest.cc +++ b/chrome/browser/chromeos/smb_client/smb_service_unittest.cc
@@ -9,6 +9,7 @@ #include <memory> #include <utility> +#include "base/test/simple_test_tick_clock.h" #include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h" #include "chrome/browser/chromeos/file_system_provider/fake_registry.h" #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h" @@ -52,7 +53,8 @@ std::make_unique<file_system_provider::FakeRegistry>()); // Create smb service. - smb_service_ = std::make_unique<SmbService>(profile_); + smb_service_ = std::make_unique<SmbService>( + profile_, std::make_unique<base::SimpleTestTickClock>()); } ~SmbServiceTest() override {}
diff --git a/chrome/browser/devtools/devtools_ui_bindings.cc b/chrome/browser/devtools/devtools_ui_bindings.cc index 6d24f15..4de19d7 100644 --- a/chrome/browser/devtools/devtools_ui_bindings.cc +++ b/chrome/browser/devtools/devtools_ui_bindings.cc
@@ -427,7 +427,6 @@ void RenderProcessGone(base::TerminationStatus status) override; void ReadyToCommitNavigation( content::NavigationHandle* navigation_handle) override; - void DocumentAvailableInMainFrame() override; void DocumentOnLoadCompletedInMainFrame() override; void DidFinishNavigation( content::NavigationHandle* navigation_handle) override; @@ -496,11 +495,6 @@ } void DevToolsUIBindings::FrontendWebContentsObserver:: - DocumentAvailableInMainFrame() { - devtools_bindings_->DocumentAvailableInMainFrame(); -} - -void DevToolsUIBindings::FrontendWebContentsObserver:: DocumentOnLoadCompletedInMainFrame() { devtools_bindings_->DocumentOnLoadCompletedInMainFrame(); } @@ -533,7 +527,6 @@ delegate_(new DefaultBindingsDelegate(web_contents_)), devices_updates_enabled_(false), frontend_loaded_(false), - reloading_(false), weak_factory_(this) { g_devtools_ui_bindings_instances.Get().push_back(this); frontend_contents_observer_.reset(new FrontendWebContentsObserver(this)); @@ -601,7 +594,7 @@ void DevToolsUIBindings::DispatchProtocolMessage( content::DevToolsAgentHost* agent_host, const std::string& message) { DCHECK(agent_host == agent_host_.get()); - if (!frontend_host_ || reloading_) + if (!frontend_host_) return; if (message.length() < kMaxMessageChunkSize) { @@ -1073,7 +1066,7 @@ void DevToolsUIBindings::DispatchProtocolMessageFromDevToolsFrontend( const std::string& message) { - if (agent_host_.get() && !reloading_) + if (agent_host_.get()) agent_host_->DispatchProtocolMessage(this, message); } @@ -1317,11 +1310,6 @@ InnerAttach(); } -void DevToolsUIBindings::Reload() { - reloading_ = true; - web_contents_->GetController().Reload(content::ReloadType::NORMAL, false); -} - void DevToolsUIBindings::Detach() { if (agent_host_.get()) agent_host_->DetachClient(this); @@ -1361,6 +1349,10 @@ void DevToolsUIBindings::ReadyToCommitNavigation( content::NavigationHandle* navigation_handle) { if (navigation_handle->IsInMainFrame()) { + if (frontend_loaded_ && agent_host_.get()) { + agent_host_->DetachClient(this); + InnerAttach(); + } if (!IsValidFrontendURL(navigation_handle->GetURL())) { LOG(ERROR) << "Attempt to navigate to an invalid DevTools front-end URL: " << navigation_handle->GetURL().spec(); @@ -1397,16 +1389,6 @@ content::DevToolsFrontendHost::SetupExtensionsAPI(frame, script); } -void DevToolsUIBindings::DocumentAvailableInMainFrame() { - if (!reloading_) - return; - reloading_ = false; - if (agent_host_.get()) { - agent_host_->DetachClient(this); - InnerAttach(); - } -} - void DevToolsUIBindings::DocumentOnLoadCompletedInMainFrame() { // In the DEBUG_DEVTOOLS mode, the DocumentOnLoadCompletedInMainFrame event // arrives before the LoadCompleted event, thus it should not trigger the
diff --git a/chrome/browser/devtools/devtools_ui_bindings.h b/chrome/browser/devtools/devtools_ui_bindings.h index 35ea228f..a2216423 100644 --- a/chrome/browser/devtools/devtools_ui_bindings.h +++ b/chrome/browser/devtools/devtools_ui_bindings.h
@@ -85,7 +85,6 @@ const base::Value* arg2, const base::Value* arg3); void AttachTo(const scoped_refptr<content::DevToolsAgentHost>& agent_host); - void Reload(); void Detach(); bool IsAttachedTo(content::DevToolsAgentHost* agent_host); @@ -180,7 +179,6 @@ const base::ListValue& targets); void ReadyToCommitNavigation(content::NavigationHandle* navigation_handle); - void DocumentAvailableInMainFrame(); void DocumentOnLoadCompletedInMainFrame(); void DidNavigateMainFrame(); void FrontendLoaded(); @@ -239,7 +237,6 @@ bool devices_updates_enabled_; bool frontend_loaded_; - bool reloading_; std::unique_ptr<DevToolsTargetsUIHandler> remote_targets_handler_; std::unique_ptr<PortForwardingStatusSerializer> port_status_serializer_; PrefChangeRegistrar pref_change_registrar_;
diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc index 6d8ed78..d81cc18 100644 --- a/chrome/browser/devtools/devtools_window.cc +++ b/chrome/browser/devtools/devtools_window.cc
@@ -1127,7 +1127,8 @@ modified.referrer = content::Referrer(); return inspected_web_contents->OpenURL(modified); } - bindings_->Reload(); + main_web_contents_->GetController().Reload(content::ReloadType::NORMAL, + false); return main_web_contents_; }
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 3490851..dec1c95 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -403,27 +403,27 @@ }, { "name": "contextual-search", - // "owners": [ "your-team" ], - "expiry_milestone": 76 + "owners": [ "//chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/OWNERS" ], + "expiry_milestone": 74 }, { "name": "contextual-search-ml-tap-suppression", - // "owners": [ "your-team" ], + "owners": [ "//chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/OWNERS" ], "expiry_milestone": 76 }, { "name": "contextual-search-ranker-query", - // "owners": [ "your-team" ], + "owners": [ "//chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/OWNERS" ], "expiry_milestone": 76 }, { "name": "contextual-search-second-tap", - // "owners": [ "your-team" ], + "owners": [ "//chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/OWNERS" ], "expiry_milestone": 76 }, { "name": "contextual-search-unity-integration", - // "owners": [ "your-team" ], + "owners": [ "//chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/OWNERS" ], "expiry_milestone": 76 }, { @@ -1133,7 +1133,7 @@ }, { "name": "enable-ephemeral-tab", - // "owners": [ "your-team" ], + "owners": [ "donnd", "jinsukkim" ], "expiry_milestone": 76 }, { @@ -1230,7 +1230,7 @@ }, { "name": "enable-gesture-navigation", - // "owners": [ "jinsukkim@chromium.org" ], + "owners": [ "jinsukkim@chromium.org" ], "expiry_milestone": 76 }, { @@ -1720,11 +1720,6 @@ "expiry_milestone": 73 }, { - "name": "enable-settings-shortcut-search", - // "owners": [ "your-team" ], - "expiry_milestone": 76 - }, - { "name": "enable-shill-sandboxing", // "owners": [ "your-team" ], "expiry_milestone": 76 @@ -2017,6 +2012,11 @@ "expiry_milestone": 76 }, { + "name": "enable-webrtc-hw-vp9-encoding", + "owners": [ "hiroh", "chromeos-video-eng@google.com" ], + "expiry_milestone": 76 + }, + { "name": "enable-webrtc-hybrid-agc", // "owners": [ "your-team" ], "expiry_milestone": 76 @@ -2872,6 +2872,8 @@ { "name": "show-taps", "owners": [ "//ash/OWNERS" ], + // This is a debug flag, so that video bug reports can show input taps to + // aid in getting clear bug reports. "expiry_milestone": -1 }, {
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 337bff01..f9dd47655 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -2115,6 +2115,10 @@ const char kWebrtcHwVP8EncodingDescription[] = "Support in WebRTC for encoding vp8 video streams using platform hardware."; +const char kWebrtcHwVP9EncodingName[] = "WebRTC hardware vp9 video encoding"; +const char kWebrtcHwVP9EncodingDescription[] = + "Support in WebRTC for encoding vp9 video streams using platform hardware."; + const char kWebrtcNewEncodeCpuLoadEstimatorName[] = "WebRTC new encode cpu load estimator"; const char kWebrtcNewEncodeCpuLoadEstimatorDescription[] = @@ -2310,10 +2314,6 @@ "learning. The \"Contextual Search Ranker prediction\" flag must also be " "enabled!"; -const char kContextualSearchName[] = "Contextual Search"; -const char kContextualSearchDescription[] = - "Whether or not Contextual Search is enabled."; - const char kContextualSearchRankerQueryName[] = "Contextual Search Ranker prediction"; const char kContextualSearchRankerQueryDescription[] = @@ -3328,11 +3328,6 @@ const char kEnablePlayStoreSearchDescription[] = "Enable Play Store search in launcher."; -const char kEnableSettingsShortcutSearchName[] = - "Enable Settings shortcut search"; -const char kEnableSettingsShortcutSearchDescription[] = - "Enable Settings shortcut search in launcher."; - const char kEnableStylusVirtualKeyboardName[] = "Enable stylus virtual keyboard"; const char kEnableStylusVirtualKeyboardDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index fe02ca6..a2163f5 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1258,6 +1258,9 @@ extern const char kWebrtcHwVP8EncodingName[]; extern const char kWebrtcHwVP8EncodingDescription[]; +extern const char kWebrtcHwVP9EncodingName[]; +extern const char kWebrtcHwVP9EncodingDescription[]; + extern const char kWebrtcNewEncodeCpuLoadEstimatorName[]; extern const char kWebrtcNewEncodeCpuLoadEstimatorDescription[]; @@ -1369,9 +1372,6 @@ extern const char kContextualSearchMlTapSuppressionName[]; extern const char kContextualSearchMlTapSuppressionDescription[]; -extern const char kContextualSearchName[]; -extern const char kContextualSearchDescription[]; - extern const char kContextualSearchRankerQueryName[]; extern const char kContextualSearchRankerQueryDescription[]; @@ -1997,9 +1997,6 @@ extern const char kEnablePlayStoreSearchName[]; extern const char kEnablePlayStoreSearchDescription[]; -extern const char kEnableSettingsShortcutSearchName[]; -extern const char kEnableSettingsShortcutSearchDescription[]; - extern const char kEnableStylusVirtualKeyboardName[]; extern const char kEnableStylusVirtualKeyboardDescription[];
diff --git a/chrome/browser/mac/bluetooth_utility.h b/chrome/browser/mac/bluetooth_utility.h index df54d35e..8f4f559 100644 --- a/chrome/browser/mac/bluetooth_utility.h +++ b/chrome/browser/mac/bluetooth_utility.h
@@ -17,6 +17,7 @@ // On OSX 10.6, if the Link Manager Protocol version supports Low Energy, // there is no further indication of whether Low Energy is supported. BLUETOOTH_AVAILABLE_LE_UNKNOWN = 4, + BLUETOOTH_NOT_SUPPORTED = 5, BLUETOOTH_AVAILABILITY_COUNT, };
diff --git a/chrome/browser/metrics/bluetooth_available_utility.cc b/chrome/browser/metrics/bluetooth_available_utility.cc new file mode 100644 index 0000000..1f6c2239 --- /dev/null +++ b/chrome/browser/metrics/bluetooth_available_utility.cc
@@ -0,0 +1,79 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/metrics/bluetooth_available_utility.h" + +#include "base/bind.h" +#include "base/metrics/histogram_macros.h" +#include "base/task/post_task.h" +#include "build/build_config.h" +#include "chrome/browser/mac/bluetooth_utility.h" +#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" +#include "device/bluetooth/bluetooth_adapter.h" +#include "device/bluetooth/bluetooth_adapter_factory.h" + +#if defined(OS_LINUX) +#include "device/bluetooth/dbus/bluez_dbus_manager.h" +#endif // defined(OS_LINUX) + +namespace bluetooth_utility { + +void ReportAvailability(BluetoothAvailability availability) { + UMA_HISTOGRAM_ENUMERATION("Bluetooth.Availability", availability, + BLUETOOTH_AVAILABILITY_COUNT); +} + +void OnGetAdapter(scoped_refptr<device::BluetoothAdapter> adapter) { + if (!adapter->IsPresent()) { + ReportAvailability(BLUETOOTH_NOT_AVAILABLE); + return; + } + + if (!device::BluetoothAdapterFactory::Get().IsLowEnergySupported()) { + ReportAvailability(BLUETOOTH_AVAILABLE_WITHOUT_LE); + return; + } + + ReportAvailability(BLUETOOTH_AVAILABLE_WITH_LE); +} + +void ReportBluetoothAvailability() { +#if defined(OS_MACOSX) + // TODO(kenrb): This is separate from other platforms because we get a + // little bit of extra information from the Mac-specific code. It might not + // be worth having the extra code path, and we should consider whether to + // combine them (https://crbug.com/907279). + bluetooth_utility::BluetoothAvailability availability = + bluetooth_utility::GetBluetoothAvailability(); + UMA_HISTOGRAM_ENUMERATION("Bluetooth.Availability", availability, + bluetooth_utility::BLUETOOTH_AVAILABILITY_COUNT); + return; +#endif // defined(OS_MACOSX) + + // GetAdapter must be called on the UI thread, because it creates a + // WeakPtr, which is checked from that thread on future calls. + if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) { + base::PostTaskWithTraits( + FROM_HERE, + {content::BrowserThread::UI, base::TaskPriority::BEST_EFFORT}, + base::BindOnce(&ReportBluetoothAvailability)); + return; + } + +#if defined(OS_LINUX) + // This is for tests that have not initialized bluez or dbus thread manager. + // Outside of tests these are initialized earlier during browser startup. + if (!bluez::BluezDBusManager::IsInitialized()) + return; +#endif // defined(OS_LINUX) + + if (!device::BluetoothAdapterFactory::Get().IsBluetoothSupported()) + ReportAvailability(BLUETOOTH_NOT_SUPPORTED); + + device::BluetoothAdapterFactory::Get().GetAdapter( + base::BindOnce(&OnGetAdapter)); +} + +} // namespace bluetooth_utility
diff --git a/chrome/browser/metrics/bluetooth_available_utility.h b/chrome/browser/metrics/bluetooth_available_utility.h new file mode 100644 index 0000000..dfa79b4 --- /dev/null +++ b/chrome/browser/metrics/bluetooth_available_utility.h
@@ -0,0 +1,17 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_METRICS_BLUETOOTH_AVAILABLE_UTILITY_H_ +#define CHROME_BROWSER_METRICS_BLUETOOTH_AVAILABLE_UTILITY_H_ + +namespace bluetooth_utility { + +// Reports the bluetooth availability of the system's hardware. +// This currently only works on ChromeOS and Windows. For Bluetooth +// availability on OS X, see chrome/browser/mac/bluetooth_utility.h. +void ReportBluetoothAvailability(); + +} // namespace bluetooth_utility + +#endif // CHROME_BROWSER_METRICS_BLUETOOTH_AVAILABLE_UTILITY_H_
diff --git a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc index 85b818a..3ae4f3c 100644 --- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc +++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
@@ -21,7 +21,7 @@ #include "chrome/browser/about_flags.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_browser_main.h" -#include "chrome/browser/mac/bluetooth_utility.h" +#include "chrome/browser/metrics/bluetooth_available_utility.h" #include "chrome/browser/shell_integration.h" #include "chrome/browser/vr/service/xr_runtime_manager.h" #include "components/flags_ui/pref_service_flags_storage.h" @@ -201,13 +201,13 @@ base::TimeTicks::IsHighResolution()); #endif // defined(OS_WIN) -#if defined(OS_MACOSX) - bluetooth_utility::BluetoothAvailability availability = - bluetooth_utility::GetBluetoothAvailability(); - UMA_HISTOGRAM_ENUMERATION("OSX.BluetoothAvailability", - availability, - bluetooth_utility::BLUETOOTH_AVAILABILITY_COUNT); -#endif // defined(OS_MACOSX) + // TODO(kenrb): Reporting Bluetooth availability is disabled on Windows + // because initializing the Bluetooth adapter causes too much jank. + // Re-enable when that is resolved. + // See https://crbug.com/929375. +#if !defined(OS_WIN) + bluetooth_utility::ReportBluetoothAvailability(); +#endif // Record whether Chrome is the default browser or not. shell_integration::DefaultWebClientState default_state =
diff --git a/chrome/browser/net/network_context_configuration_browsertest.cc b/chrome/browser/net/network_context_configuration_browsertest.cc index a9c302e..ecfbd5f 100644 --- a/chrome/browser/net/network_context_configuration_browsertest.cc +++ b/chrome/browser/net/network_context_configuration_browsertest.cc
@@ -1576,8 +1576,14 @@ // Test that when there's a proxy configuration at startup, the initial requests // use that configuration. +// Flaky on CrOS only. http://crbug.com/922876 +#if defined(OS_CHROMEOS) +#define MAYBE_TestInitialProxyConfig DISABLED_TestInitialProxyConfig +#else +#define MAYBE_TestInitialProxyConfig TestInitialProxyConfig +#endif IN_PROC_BROWSER_TEST_P(NetworkContextConfigurationProxyOnStartBrowserTest, - TestInitialProxyConfig) { + MAYBE_TestInitialProxyConfig) { if (IsRestartStateWithInProcessNetworkService()) return; TestProxyConfigured(/*expect_success=*/true); @@ -1882,10 +1888,20 @@ // tested, and a suffix of "/0" if the network service is disabled, "/1" if it's // enabled, and "/2" if it's enabled and restarted. +#if defined(OS_CHROMEOS) +// There's an extra network change event on ChromeOS, likely from +// NetworkChangeNotifierChromeos that makes these tests flaky on ChromeOS when +// there's an out of process network stack. +// +// TODO(https://crbug.com/927293): Fix that, and enable these tests on ChromeOS. +#define TEST_CASES(network_context_type) \ + TestCase({NetworkServiceState::kDisabled, network_context_type}) +#else // !defined(OS_CHROMEOS) #define TEST_CASES(network_context_type) \ TestCase({NetworkServiceState::kDisabled, network_context_type}), \ TestCase({NetworkServiceState::kEnabled, network_context_type}), \ TestCase({NetworkServiceState::kRestarted, network_context_type}) +#endif // !defined(OS_CHROMEOS) #if BUILDFLAG(ENABLE_EXTENSIONS) #define INSTANTIATE_EXTENSION_TESTS(TestFixture) \
diff --git a/chrome/browser/performance_monitor/system_monitor.cc b/chrome/browser/performance_monitor/system_monitor.cc index 16964989..8832f44 100644 --- a/chrome/browser/performance_monitor/system_monitor.cc +++ b/chrome/browser/performance_monitor/system_monitor.cc
@@ -67,7 +67,7 @@ } void SystemMonitor::SystemObserver::OnFreePhysicalMemoryMbSample( - base::Optional<int> free_phys_memory_mb) { + int free_phys_memory_mb) { NOTREACHED(); }
diff --git a/chrome/browser/performance_monitor/system_monitor.h b/chrome/browser/performance_monitor/system_monitor.h index ece4fdf..6594bc02 100644 --- a/chrome/browser/performance_monitor/system_monitor.h +++ b/chrome/browser/performance_monitor/system_monitor.h
@@ -10,7 +10,6 @@ #include "base/containers/flat_map.h" #include "base/macros.h" #include "base/observer_list.h" -#include "base/optional.h" #include "base/sequence_checker.h" #include "base/task/post_task.h" #include "base/time/time.h" @@ -70,10 +69,8 @@ ~SystemObserver() override = default; - // Reports the amount of free physical memory, in MB. |free_phys_memory_mb| - // can be equal to nullopt if the monitor failed to retrieve this value. - virtual void OnFreePhysicalMemoryMbSample( - base::Optional<int> free_phys_memory_mb); + // Reports the amount of free physical memory, in MB. + virtual void OnFreePhysicalMemoryMbSample(int free_phys_memory_mb); }; using ObserverToFrequenciesMap = base::flat_map<SystemObserver*, SystemObserver::MetricRefreshFrequencies>; @@ -113,9 +110,9 @@ template <typename T> struct MetricAndRefreshReason { MetricAndRefreshReason() {} - MetricAndRefreshReason(base::Optional<T> value, SamplingFrequency reason) + MetricAndRefreshReason(T value, SamplingFrequency reason) : metric_value(value), refresh_reason(reason) {} - base::Optional<T> metric_value = base::nullopt; + T metric_value = {}; SamplingFrequency refresh_reason = SamplingFrequency::kNoSampling; };
diff --git a/chrome/browser/performance_monitor/system_monitor_helper_win.cc b/chrome/browser/performance_monitor/system_monitor_helper_win.cc index 6cd6f6c7..2974d42 100644 --- a/chrome/browser/performance_monitor/system_monitor_helper_win.cc +++ b/chrome/browser/performance_monitor/system_monitor_helper_win.cc
@@ -54,10 +54,13 @@ if ((refresh_time - last_phys_memory_refresh_default_freq_) >= kRefreshIntervalPhysMemoryMbRegFreq) { last_phys_memory_refresh_default_freq_ = refresh_time; - metrics.free_phys_memory_mb = - SystemMonitorHelper::MetricAndRefreshReason<int>( - GetFreePhysMemoryMb(), - SystemMonitor::SamplingFrequency::kDefaultFrequency); + auto free_phys_memory = GetFreePhysMemoryMb(); + if (free_phys_memory) { + metrics.free_phys_memory_mb = + SystemMonitorHelper::MetricAndRefreshReason<int>( + free_phys_memory.value(), + SystemMonitor::SamplingFrequency::kDefaultFrequency); + } } return metrics;
diff --git a/chrome/browser/performance_monitor/system_monitor_helper_win_unittest.cc b/chrome/browser/performance_monitor/system_monitor_helper_win_unittest.cc index 05fe0687..9b9f892 100644 --- a/chrome/browser/performance_monitor/system_monitor_helper_win_unittest.cc +++ b/chrome/browser/performance_monitor/system_monitor_helper_win_unittest.cc
@@ -30,7 +30,7 @@ {.free_phys_memory_mb_frequency = SystemMonitor::SamplingFrequency::kDefaultFrequency}, base::TimeTicks::Now()); - EXPECT_NE(base::nullopt, refreshed_metrics.free_phys_memory_mb.metric_value); + EXPECT_GT(refreshed_metrics.free_phys_memory_mb.metric_value, 0); } } // namespace
diff --git a/chrome/browser/performance_monitor/system_monitor_unittest.cc b/chrome/browser/performance_monitor/system_monitor_unittest.cc index ff50804a..bb3c5be 100644 --- a/chrome/browser/performance_monitor/system_monitor_unittest.cc +++ b/chrome/browser/performance_monitor/system_monitor_unittest.cc
@@ -27,8 +27,7 @@ class MockMetricsMonitorObserver : public SystemObserver { public: ~MockMetricsMonitorObserver() override {} - MOCK_METHOD1(OnFreePhysicalMemoryMbSample, - void(base::Optional<int> free_phys_memory_mb)); + MOCK_METHOD1(OnFreePhysicalMemoryMbSample, void(int free_phys_memory_mb)); }; class TestSystemMonitorHelper : public SystemMonitorHelper { @@ -152,8 +151,7 @@ system_monitor_->AddOrUpdateObserver(&mock_observer_2, {}); // Ensure that we get several samples to verify that the timer logic works. - EXPECT_CALL(mock_observer_1, - OnFreePhysicalMemoryMbSample(::testing::Optional(42))) + EXPECT_CALL(mock_observer_1, OnFreePhysicalMemoryMbSample(::testing::Eq(42))) .Times(2); // The second observer shouldn't be called.
diff --git a/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc b/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc index dc73d30..1e0834a 100644 --- a/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc +++ b/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc
@@ -1829,7 +1829,6 @@ content::WebContents* active_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); - ASSERT_NE(nullptr, active_web_contents); ASSERT_TRUE(content::ExecuteScript(active_web_contents, "video.play();")); @@ -2571,21 +2570,3 @@ content::TitleWatcher(active_web_contents, expected_title) .WaitAndGetTitle()); } - -// Tests that exiting Picture-in-Picture when the video has no source fires the -// event and resolves the callback. -IN_PROC_BROWSER_TEST_F(PictureInPictureWindowControllerBrowserTest, - ExitFireEventAndCallbackWhenNoSource) { - LoadTabAndEnterPictureInPicture(browser()); - - content::WebContents* active_web_contents = - browser()->tab_strip_model()->GetActiveWebContents(); - ASSERT_TRUE(content::ExecuteScript(active_web_contents, - "video.src=''; exitPictureInPicture();")); - - // 'left' is sent when the first video leaves Picture-in-Picture. - base::string16 expected_title = base::ASCIIToUTF16("left"); - EXPECT_EQ(expected_title, - content::TitleWatcher(active_web_contents, expected_title) - .WaitAndGetTitle()); -}
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc b/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc index 06a49c1..9871636 100644 --- a/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc +++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc
@@ -71,6 +71,11 @@ return reason == StateChangeReason::SYSTEM_MEMORY_PRESSURE || reason == StateChangeReason::EXTENSION_INITIATED; } + case LifecycleUnitState::FROZEN: { + // Render-initiated freezing, which happens when freezing a page + // through ChromeDriver. + return reason == StateChangeReason::RENDERER_INITIATED; + } default: return false; }
diff --git a/chrome/browser/resources/bookmarks/item.html b/chrome/browser/resources/bookmarks/item.html index 62e4512e..d5e5f2a 100644 --- a/chrome/browser/resources/bookmarks/item.html +++ b/chrome/browser/resources/bookmarks/item.html
@@ -1,8 +1,9 @@ <link rel="import" href="chrome://resources/html/polymer.html"> +<link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html"> +<link rel="import" href="chrome://resources/cr_elements/cr_icons_css.html"> <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> <link rel="import" href="chrome://resources/html/icon.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html"> <link rel="import" href="actions.html"> <link rel="import" href="shared_style.html"> <link rel="import" href="store_client.html"> @@ -10,7 +11,7 @@ <dom-module id="bookmarks-item"> <template> - <style include="shared-style"> + <style include="shared-style cr-icons"> :host { align-items: center; color: inherit; @@ -68,10 +69,14 @@ flex: none; } - .more-vert-button { + cr-icon-button { margin-inline-end: 12px; } + :host-context([dark]):host([is-selected-item_]) cr-icon-button { + --cr-icon-button-ripple-color: var(--google-grey-700); + } + :host(:focus) { z-index: 1; } @@ -83,19 +88,13 @@ <div id="website-url" class="elided-text" title="[[item_.url]]"> [[item_.url]] </div> - <paper-icon-button-light class="more-vert-button"> - <button id="menuButton" - tabindex$="[[ironListTabIndex]]" - title="$i18n{moreActionsButtonTitle}" - aria-label$="[[getButtonAriaLabel_(item_)]]" - on-click="onMenuButtonClick_" - on-dblclick="onMenuButtonDblClick_" - aria-haspopup="menu"> - <div></div> - <div></div> - <div></div> - </button> - </paper-icon-button-light> + <cr-icon-button class$="[[crIcon_]]" + id="menuButton" + tabindex="[[ironListTabIndex]]" + title="$i18n{moreActionsButtonTitle}" + aria-label$="[[getButtonAriaLabel_(item_)]]" + on-click="onMenuButtonClick_" + aria-haspopup="menu"></cr-icon-button> </template> <script src="item.js"></script> </dom-module>
diff --git a/chrome/browser/resources/bookmarks/item.js b/chrome/browser/resources/bookmarks/item.js index b69ff0ba..18fb94f0 100644 --- a/chrome/browser/resources/bookmarks/item.js +++ b/chrome/browser/resources/bookmarks/item.js
@@ -15,7 +15,12 @@ observer: 'onItemIdChanged_', }, - ironListTabIndex: String, + ironListTabIndex: Number, + + crIcon_: { + type: String, + value: 'icon-more-vert', + }, /** @private {BookmarkNode} */ item_: { @@ -27,6 +32,7 @@ isSelectedItem_: { type: Boolean, reflectToAttribute: true, + observer: 'onIsSelectedItemChanged_', }, /** @private */ @@ -98,14 +104,6 @@ }); }, - /** - * @param {Event} e - * @private - */ - onMenuButtonDblClick_: function(e) { - e.stopPropagation(); - }, - /** @private */ selectThisItem_: function() { this.dispatch(bookmarks.actions.selectItem(this.itemId, this.getState(), { @@ -116,6 +114,12 @@ }, /** @private */ + onIsSelectedItemChanged_: function() { + this.crIcon_ = this.isSelectedItem_ ? 'icon-more-vert-light-mode' : + 'icon-more-vert'; + }, + + /** @private */ onItemIdChanged_: function() { // TODO(tsergeant): Add a histogram to measure whether this assertion fails // for real users.
diff --git a/chrome/browser/resources/bookmarks/list.js b/chrome/browser/resources/bookmarks/list.js index a8b37df..c8c05bd8 100644 --- a/chrome/browser/resources/bookmarks/list.js +++ b/chrome/browser/resources/bookmarks/list.js
@@ -162,7 +162,8 @@ onOpenCommandMenu_: function(e) { // If the item is not visible, scroll to it before rendering the menu. if (e.source == MenuSource.ITEM) { - this.scrollToId_(/** @type {BookmarksItemElement} */ (e.path[0]).itemId); + this.scrollToId_( + /** @type {BookmarksItemElement} */ (e.composedPath()[0]).itemId); } }, @@ -260,8 +261,13 @@ } // Prevent the iron-list from changing focus on enter. - if (e.path[0] instanceof HTMLButtonElement && e.key == 'Enter') { - handled = true; + if (e.key == 'Enter') { + if (e.composedPath()[0].tagName == 'CR-ICON-BUTTON') { + return; + } + if (e.composedPath()[0] instanceof HTMLButtonElement) { + handled = true; + } } if (!handled) {
diff --git a/chrome/browser/resources/bookmarks/shared_style.html b/chrome/browser/resources/bookmarks/shared_style.html index 8df3d77c..e2a3a53 100644 --- a/chrome/browser/resources/bookmarks/shared_style.html +++ b/chrome/browser/resources/bookmarks/shared_style.html
@@ -5,18 +5,6 @@ <dom-module id="shared-style"> <template> <style include="cr-shared-style"> - paper-icon-button-light.more-vert-button > button { - padding: 8px; - } - - paper-icon-button-light.more-vert-button div { - border: 2px solid currentcolor; - border-radius: 2px; - margin: 1px 8px; - pointer-events: none; - transform: scale(0.8); - } - hr { background: rgba(0, 0, 0, 0.11); border-width: 0;
diff --git a/chrome/browser/resources/bookmarks/toolbar.html b/chrome/browser/resources/bookmarks/toolbar.html index 846d53c..715f1e9 100644 --- a/chrome/browser/resources/bookmarks/toolbar.html +++ b/chrome/browser/resources/bookmarks/toolbar.html
@@ -1,8 +1,9 @@ <link rel="import" href="chrome://resources/html/polymer.html"> +<link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html"> <link rel="import" href="chrome://resources/cr_elements/cr_toolbar/cr_toolbar.html"> <link rel="import" href="chrome://resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html"> +<link rel="import" href="chrome://resources/cr_elements/icons.html"> <link rel="import" href="shared_style.html"> <link rel="import" href="strings.html"> @@ -14,16 +15,23 @@ position: relative; } - paper-icon-button-light.more-actions { - margin: 4px; - } - cr-toolbar { flex: 1; --cr-toolbar-field-margin: calc(var(--sidebar-width) + var(--splitter-width)); } + cr-icon-button { + --cr-icon-button-color: white; + --cr-icon-button-ripple-color: white; + display: inline-block; + margin: 4px; + } + + :host-context([dark]) cr-icon-button { + --cr-icon-button-color: var(--google-grey-200); + } + :host(:not([narrow_])) cr-toolbar-selection-overlay { --selection-overlay-padding: var(--card-padding-side); --cr-toolbar-field-margin: var(--sidebar-width); @@ -36,16 +44,11 @@ search-prompt="$i18n{searchPrompt}" narrow="{{narrow_}}" on-search-changed="onSearchChanged_"> - <paper-icon-button-light class="more-actions more-vert-button"> - <button id="menuButton" + <cr-icon-button iron-icon="cr:more-vert" + id="menuButton" title="$i18n{organizeButtonTitle}" on-click="onMenuButtonOpenTap_" - aria-haspopup="menu"> - <div></div> - <div></div> - <div></div> - </button> - </paper-icon-button-light> + aria-haspopup="menu"></cr-icon-button> </cr-toolbar> <cr-toolbar-selection-overlay show="[[showSelectionOverlay]]" delete-label="$i18n{delete}"
diff --git a/chrome/browser/resources/chromeos/login/md_login_shared.js b/chrome/browser/resources/chromeos/login/cr_ui.js similarity index 91% rename from chrome/browser/resources/chromeos/login/md_login_shared.js rename to chrome/browser/resources/chromeos/login/cr_ui.js index f8f1f0b1..f5eb50b 100644 --- a/chrome/browser/resources/chromeos/login/md_login_shared.js +++ b/chrome/browser/resources/chromeos/login/cr_ui.js
@@ -1,35 +1,13 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. +// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /** - * @fileoverview Common OOBE controller methods. This method is shared between - * OOBE, login, and the lock screen. Add only methods that need to be shared - * between all *three* screens here, as each additional method increases the - * time it takes to show the lock screen. - * - * If a method needs to be shared between the oobe and login screens, add it to - * login_non_lock_shared.js. + * @fileoverview Common OOBE controller methods for use in OOBE and login. + * This file is shared between OOBE and login. Add only methods that need to be + * shared between all *two* screens here. */ -// <include src="test_util.js"> -// <include src="../../../../../ui/login/screen.js"> -// <include src="screen_context.js"> -// <include src="../user_images_grid.js"> -// <include src="apps_menu.js"> -// <include src="../../../../../ui/login/bubble.js"> -// <include src="../../../../../ui/login/display_manager.js"> -// <include src="md_header_bar.js"> -// <include src="md_top_header_bar.js"> -// <include src="demo_mode_test_helper.js"> - -// <include -// src="../../../../../ui/login/account_picker/md_screen_account_picker.js"> - -// <include src="../../../../../ui/login/login_ui_tools.js"> -// <include src="../../../../../ui/login/account_picker/md_user_pod_row.js"> -// <include src="../../../../../ui/login/resource_loader.js"> - cr.define('cr.ui', function() { var DisplayManager = cr.ui.login.DisplayManager;
diff --git a/chrome/browser/resources/chromeos/login/login_non_lock_shared.html b/chrome/browser/resources/chromeos/login/login_non_lock_shared.html deleted file mode 100644 index c9d33d6e..0000000 --- a/chrome/browser/resources/chromeos/login/login_non_lock_shared.html +++ /dev/null
@@ -1,34 +0,0 @@ -<!-- -This file is included for OOBE and login. If a file is also needed by the lock -screen, it should be added to login_shared.html ---> - -<link rel="stylesheet" href="api_keys_notice.css"> - -<link rel="stylesheet" href="oobe_screen_enable_debugging.css"> -<link rel="stylesheet" href="oobe_screen_eula_installation_settings_overlay.css"> -<link rel="stylesheet" href="oobe_screen_welcome.css"> -<link rel="stylesheet" href="oobe_screen_reset.css"> -<link rel="stylesheet" href="oobe_screen_autolaunch.css"> -<link rel="stylesheet" href="oobe_screen_enable_kiosk.css"> -<link rel="stylesheet" href="oobe_screen_terms_of_service.css"> -<link rel="stylesheet" href="oobe_screen_auto_enrollment_check.css"> -<link rel="stylesheet" href="oobe_screen_user_image.css"> -<link rel="stylesheet" href="oobe_screen_supervision_transition.css"> - -<link rel="stylesheet" href="screen_app_launch_splash.css"> -<link rel="stylesheet" href="screen_arc_kiosk_splash.css"> -<link rel="stylesheet" href="screen_arc_terms_of_service.css"> -<link rel="stylesheet" href="screen_gaia_signin.css"> -<link rel="stylesheet" href="screen_error_message.css"> -<link rel="stylesheet" href="screen_tpm_error.css"> -<link rel="stylesheet" href="screen_password_changed.css"> -<link rel="stylesheet" href="screen_wrong_hwid.css"> -<link rel="stylesheet" href="screen_confirm_password.css"> -<link rel="stylesheet" href="screen_fatal_error.css"> -<link rel="stylesheet" href="screen_device_disabled.css"> -<link rel="stylesheet" href="screen_unrecoverable_cryptohome_error.css"> -<link rel="stylesheet" href="screen_active_directory_password_change.css"> -<link rel="stylesheet" href="screen_update_required.css"> - -<script src="chrome://oobe/keyboard_utils.js"></script>
diff --git a/chrome/browser/resources/chromeos/login/login_non_lock_shared.js b/chrome/browser/resources/chromeos/login/login_non_lock_shared.js deleted file mode 100644 index 52b983c..0000000 --- a/chrome/browser/resources/chromeos/login/login_non_lock_shared.js +++ /dev/null
@@ -1,65 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/** - * @fileoverview Shared data between oobe and the login screens. These files - * are *not* used in the lock screen. If a file should also be used in the lock - * screen, added it to login_shared.js. - */ - -// <include src="oobe_screen_reset.js"> -// <include src="oobe_screen_autolaunch.js"> -// <include src="oobe_screen_enable_kiosk.js"> -// <include src="oobe_screen_terms_of_service.js"> -// <include src="oobe_screen_user_image.js"> -// <include src="oobe_screen_supervision_transition.js"> -// <include src="oobe_screen_assistant_optin_flow.js"> -// <include src="oobe_select.js"> - -// <include src="screen_app_launch_splash.js"> -// <include src="screen_arc_kiosk_splash.js"> -// <include src="screen_arc_terms_of_service.js"> -// <include src="screen_error_message.js"> -// <include src="screen_gaia_signin.js"> -// <include src="screen_password_changed.js"> -// <include src="screen_tpm_error.js"> -// <include src="screen_wrong_hwid.js"> -// <include src="screen_confirm_password.js"> -// <include src="screen_fatal_error.js"> -// <include src="screen_device_disabled.js"> -// <include src="screen_unrecoverable_cryptohome_error.js"> -// <include src="screen_active_directory_password_change.js"> -// <include src="screen_encryption_migration.js"> -// <include src="screen_update_required.js"> -// <include src="screen_sync_consent.js"> -// <include src="screen_fingerprint_setup.js"> -// <include src="screen_recommend_apps.js"> -// <include src="screen_app_downloading.js"> -// <include src="screen_discover.js"> -// <include src="screen_marketing_opt_in.js"> -// <include src="screen_multidevice_setup.js"> - -// <include src="../../gaia_auth_host/authenticator.js"> - -// Register assets for async loading. -[{ - id: SCREEN_OOBE_ENROLLMENT, - html: [{url: 'chrome://oobe/enrollment.html', targetID: 'inner-container'}], - css: ['chrome://oobe/enrollment.css'], - js: ['chrome://oobe/enrollment.js'] -}].forEach(cr.ui.login.ResourceLoader.registerAssets); - -(function() { -'use strict'; - -document.addEventListener('DOMContentLoaded', function() { - // Immediately load async assets. - cr.ui.login.ResourceLoader.loadAssets(SCREEN_OOBE_ENROLLMENT, function() { - // This screen is async-loaded so we manually trigger i18n processing. - i18nTemplate.process($('oauth-enrollment'), loadTimeData); - // Delayed binding since this isn't defined yet. - login.OAuthEnrollmentScreen.register(); - }); -}); -})();
diff --git a/chrome/browser/resources/chromeos/login/login_screens.html b/chrome/browser/resources/chromeos/login/login_screens.html deleted file mode 100644 index f20bdae..0000000 --- a/chrome/browser/resources/chromeos/login/login_screens.html +++ /dev/null
@@ -1,30 +0,0 @@ -<include src="oobe_screen_reset.html"> -<include src="oobe_screen_autolaunch.html"> -<include src="oobe_screen_enable_kiosk.html"> -<include src="oobe_screen_terms_of_service.html"> -<include src="oobe_screen_user_image.html"> -<include src="oobe_screen_supervision_transition.html"> -<include src="oobe_screen_assistant_optin_flow.html"> -<include src="../../../../../ui/login/account_picker/screen_account_picker.html"> -<include src="screen_arc_terms_of_service.html"> -<include src="screen_error_message.html"> -<include src="screen_gaia_signin.html"> -<include src="screen_password_changed.html"> -<include src="screen_tpm_error.html"> -<include src="screen_wrong_hwid.html"> -<include src="screen_app_launch_splash.html"> -<include src="screen_arc_kiosk_splash.html"> -<include src="screen_confirm_password.html"> -<include src="screen_fatal_error.html"> -<include src="screen_device_disabled.html"> -<include src="screen_unrecoverable_cryptohome_error.html"> -<include src="screen_active_directory_password_change.html"> -<include src="screen_encryption_migration.html"> -<include src="screen_update_required.html"> -<include src="screen_sync_consent.html"> -<include src="screen_fingerprint_setup.html"> -<include src="screen_recommend_apps.html"> -<include src="screen_app_downloading.html"> -<include src="screen_discover.html"> -<include src="screen_marketing_opt_in.html"> -<include src="screen_multidevice_setup.html">
diff --git a/chrome/browser/resources/chromeos/login/md_login.html b/chrome/browser/resources/chromeos/login/md_login.html index a2d6179..d73973df 100644 --- a/chrome/browser/resources/chromeos/login/md_login.html +++ b/chrome/browser/resources/chromeos/login/md_login.html
@@ -7,8 +7,76 @@ <meta charset="utf-8"> <meta name="google" value="notranslate"> <title i18n-content="title"></title> -<include src="md_login_shared.html"> -<include src="login_non_lock_shared.html"> +<!-- This must be the first import in all login pages. --> +<link rel="import" href="chrome://resources/html/polymer.html"> + +<link rel="import" href="chrome://resources/cr_components/chromeos/quick_unlock/pin_keyboard.html"> +<link rel="stylesheet" href="chrome://resources/css/butter_bar.css"> +<link rel="stylesheet" href="chrome://resources/css/dialogs.css"> +<link rel="stylesheet" href="chrome://resources/css/list.css"> +<link rel="stylesheet" href="chrome://resources/css/menu_button.css"> +<link rel="stylesheet" href="chrome://resources/css/menu.css"> +<link rel="stylesheet" href="chrome://resources/css/spinner.css"> +<link rel="stylesheet" href="chrome://resources/css/throbber.css"> +<link rel="stylesheet" href="chrome://resources/css/widgets.css"> +<link rel="stylesheet" href="apps_menu.css"> +<link rel="stylesheet" href="../../../../../ui/login/bubble.css"> +<link rel="stylesheet" href="md_header_bar.css"> +<link rel="stylesheet" href="md_top_header_bar.css"> +<link rel="stylesheet" href="../../../../../ui/login/oobe.css"> +<link rel="stylesheet" href="oobe_popup_overlay.css"> +<link rel="stylesheet" href="oobe_screen.css"> +<link rel="stylesheet" href="../../../../../ui/login/md_screen_container.css"> +<link rel="stylesheet" href="../../../../../ui/login/account_picker/md_screen_account_picker.css"> +<link rel="stylesheet" href="../../../../../ui/login/account_picker/md_user_pod_row.css"> +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/event_tracker.js"></script> +<script src="chrome://resources/js/cr/event_target.js"></script> +<script src="chrome://resources/js/cr/ui.js"></script> +<script src="chrome://resources/js/cr/ui/touch_handler.js"></script> +<script src="chrome://resources/js/cr/ui/array_data_model.js"></script> +<script src="chrome://resources/js/cr/ui/dialogs.js"></script> +<script src="chrome://resources/js/cr/ui/list_selection_controller.js"></script> +<script src="chrome://resources/js/cr/ui/list_selection_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_single_selection_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_item.js"></script> +<script src="chrome://resources/js/cr/ui/list.js"></script> +<script src="chrome://resources/js/cr/ui/grid.js"></script> +<script src="chrome://resources/js/cr/ui/position_util.js"></script> +<script src="chrome://resources/js/cr/ui/menu_item.js"></script> +<script src="chrome://resources/js/cr/ui/menu.js"></script> +<script src="chrome://resources/js/cr/ui/menu_button.js"></script> +<script src="chrome://resources/js/load_time_data.js"></script> +<script src="chrome://resources/js/promise_resolver.js"></script> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://oobe/strings.js"></script> +<link rel="stylesheet" href="api_keys_notice.css"> +<link rel="stylesheet" href="oobe_screen_enable_debugging.css"> +<link rel="stylesheet" href="oobe_screen_eula_installation_settings_overlay.css"> +<link rel="stylesheet" href="oobe_screen_welcome.css"> +<link rel="stylesheet" href="oobe_screen_reset.css"> +<link rel="stylesheet" href="oobe_screen_autolaunch.css"> +<link rel="stylesheet" href="oobe_screen_enable_kiosk.css"> +<link rel="stylesheet" href="oobe_screen_terms_of_service.css"> +<link rel="stylesheet" href="oobe_screen_auto_enrollment_check.css"> +<link rel="stylesheet" href="oobe_screen_user_image.css"> +<link rel="stylesheet" href="oobe_screen_supervision_transition.css"> +<link rel="stylesheet" href="screen_app_launch_splash.css"> +<link rel="stylesheet" href="screen_arc_kiosk_splash.css"> +<link rel="stylesheet" href="screen_arc_terms_of_service.css"> +<link rel="stylesheet" href="screen_gaia_signin.css"> +<link rel="stylesheet" href="screen_error_message.css"> +<link rel="stylesheet" href="screen_tpm_error.css"> +<link rel="stylesheet" href="screen_password_changed.css"> +<link rel="stylesheet" href="screen_wrong_hwid.css"> +<link rel="stylesheet" href="screen_confirm_password.css"> +<link rel="stylesheet" href="screen_fatal_error.css"> +<link rel="stylesheet" href="screen_device_disabled.css"> +<link rel="stylesheet" href="screen_unrecoverable_cryptohome_error.css"> +<link rel="stylesheet" href="screen_active_directory_password_change.css"> +<link rel="stylesheet" href="screen_update_required.css"> + +<script src="chrome://oobe/keyboard_utils.js"></script> <include src="notification_card.html"> <script src="chrome://oobe/login.js"></script> </head>
diff --git a/chrome/browser/resources/chromeos/login/md_login.js b/chrome/browser/resources/chromeos/login/md_login.js index 9fc51d7..d373973 100644 --- a/chrome/browser/resources/chromeos/login/md_login.js +++ b/chrome/browser/resources/chromeos/login/md_login.js
@@ -8,8 +8,79 @@ var isMd = true; -// <include src="md_login_shared.js"> -// <include src="login_non_lock_shared.js"> +// <include src="test_util.js"> +// <include src="../../../../../ui/login/screen.js"> +// <include src="screen_context.js"> +// <include src="../user_images_grid.js"> +// <include src="apps_menu.js"> +// <include src="../../../../../ui/login/bubble.js"> +// <include src="../../../../../ui/login/display_manager.js"> +// <include src="md_header_bar.js"> +// <include src="md_top_header_bar.js"> +// <include src="demo_mode_test_helper.js"> + +// <include +// src="../../../../../ui/login/account_picker/md_screen_account_picker.js"> + +// <include src="../../../../../ui/login/login_ui_tools.js"> +// <include src="../../../../../ui/login/account_picker/md_user_pod_row.js"> +// <include src="../../../../../ui/login/resource_loader.js"> +// <include src="cr_ui.js"> +// <include src="oobe_screen_reset.js"> +// <include src="oobe_screen_autolaunch.js"> +// <include src="oobe_screen_enable_kiosk.js"> +// <include src="oobe_screen_terms_of_service.js"> +// <include src="oobe_screen_user_image.js"> +// <include src="oobe_screen_supervision_transition.js"> +// <include src="oobe_screen_assistant_optin_flow.js"> +// <include src="oobe_select.js"> + +// <include src="screen_app_launch_splash.js"> +// <include src="screen_arc_kiosk_splash.js"> +// <include src="screen_arc_terms_of_service.js"> +// <include src="screen_error_message.js"> +// <include src="screen_gaia_signin.js"> +// <include src="screen_password_changed.js"> +// <include src="screen_tpm_error.js"> +// <include src="screen_wrong_hwid.js"> +// <include src="screen_confirm_password.js"> +// <include src="screen_fatal_error.js"> +// <include src="screen_device_disabled.js"> +// <include src="screen_unrecoverable_cryptohome_error.js"> +// <include src="screen_active_directory_password_change.js"> +// <include src="screen_encryption_migration.js"> +// <include src="screen_update_required.js"> +// <include src="screen_sync_consent.js"> +// <include src="screen_fingerprint_setup.js"> +// <include src="screen_recommend_apps.js"> +// <include src="screen_app_downloading.js"> +// <include src="screen_discover.js"> +// <include src="screen_marketing_opt_in.js"> +// <include src="screen_multidevice_setup.js"> + +// <include src="../../gaia_auth_host/authenticator.js"> + +// Register assets for async loading. +[{ + id: SCREEN_OOBE_ENROLLMENT, + html: [{url: 'chrome://oobe/enrollment.html', targetID: 'inner-container'}], + css: ['chrome://oobe/enrollment.css'], + js: ['chrome://oobe/enrollment.js'] +}].forEach(cr.ui.login.ResourceLoader.registerAssets); + +(function() { +'use strict'; + +document.addEventListener('DOMContentLoaded', function() { + // Immediately load async assets. + cr.ui.login.ResourceLoader.loadAssets(SCREEN_OOBE_ENROLLMENT, function() { + // This screen is async-loaded so we manually trigger i18n processing. + i18nTemplate.process($('oauth-enrollment'), loadTimeData); + // Delayed binding since this isn't defined yet. + login.OAuthEnrollmentScreen.register(); + }); +}); +})(); // <include src="notification_card.js"> /**
diff --git a/chrome/browser/resources/chromeos/login/md_login_shared.html b/chrome/browser/resources/chromeos/login/md_login_shared.html deleted file mode 100644 index 14783f5..0000000 --- a/chrome/browser/resources/chromeos/login/md_login_shared.html +++ /dev/null
@@ -1,55 +0,0 @@ -<!-- -This file is included for OOBE, login, and the lock screen. Only files which are -needed by all three scenarios should be included here. If a file should only be -shared between OOBE and login, add it to login_non_lock_shared.html. - -Any additional include increases the lock screen initialization time. ---> - -<!-- This must be the first import in all login pages. --> -<link rel="import" href="chrome://resources/html/polymer.html"> - -<link rel="import" href="chrome://resources/cr_components/chromeos/quick_unlock/pin_keyboard.html"> - -<link rel="stylesheet" href="chrome://resources/css/butter_bar.css"> -<link rel="stylesheet" href="chrome://resources/css/dialogs.css"> -<link rel="stylesheet" href="chrome://resources/css/list.css"> -<link rel="stylesheet" href="chrome://resources/css/menu_button.css"> -<link rel="stylesheet" href="chrome://resources/css/menu.css"> -<link rel="stylesheet" href="chrome://resources/css/spinner.css"> -<link rel="stylesheet" href="chrome://resources/css/throbber.css"> -<link rel="stylesheet" href="chrome://resources/css/widgets.css"> - -<link rel="stylesheet" href="apps_menu.css"> -<link rel="stylesheet" href="../../../../../ui/login/bubble.css"> -<link rel="stylesheet" href="md_header_bar.css"> -<link rel="stylesheet" href="md_top_header_bar.css"> -<link rel="stylesheet" href="../../../../../ui/login/oobe.css"> -<link rel="stylesheet" href="oobe_popup_overlay.css"> -<link rel="stylesheet" href="oobe_screen.css"> - -<link rel="stylesheet" href="../../../../../ui/login/md_screen_container.css"> -<link rel="stylesheet" href="../../../../../ui/login/account_picker/md_screen_account_picker.css"> -<link rel="stylesheet" href="../../../../../ui/login/account_picker/md_user_pod_row.css"> - -<script src="chrome://resources/js/cr.js"></script> -<script src="chrome://resources/js/event_tracker.js"></script> -<script src="chrome://resources/js/cr/event_target.js"></script> -<script src="chrome://resources/js/cr/ui.js"></script> -<script src="chrome://resources/js/cr/ui/touch_handler.js"></script> -<script src="chrome://resources/js/cr/ui/array_data_model.js"></script> -<script src="chrome://resources/js/cr/ui/dialogs.js"></script> -<script src="chrome://resources/js/cr/ui/list_selection_controller.js"></script> -<script src="chrome://resources/js/cr/ui/list_selection_model.js"></script> -<script src="chrome://resources/js/cr/ui/list_single_selection_model.js"></script> -<script src="chrome://resources/js/cr/ui/list_item.js"></script> -<script src="chrome://resources/js/cr/ui/list.js"></script> -<script src="chrome://resources/js/cr/ui/grid.js"></script> -<script src="chrome://resources/js/cr/ui/position_util.js"></script> -<script src="chrome://resources/js/cr/ui/menu_item.js"></script> -<script src="chrome://resources/js/cr/ui/menu.js"></script> -<script src="chrome://resources/js/cr/ui/menu_button.js"></script> -<script src="chrome://resources/js/load_time_data.js"></script> -<script src="chrome://resources/js/promise_resolver.js"></script> -<script src="chrome://resources/js/util.js"></script> -<script src="chrome://oobe/strings.js"></script>
diff --git a/chrome/browser/resources/chromeos/login/oobe.html b/chrome/browser/resources/chromeos/login/oobe.html index 0cac1fe..2cc1b66 100644 --- a/chrome/browser/resources/chromeos/login/oobe.html +++ b/chrome/browser/resources/chromeos/login/oobe.html
@@ -7,8 +7,83 @@ <meta charset="utf-8"> <meta name="google" value="notranslate"> <title i18n-content="title"></title> -<include src="md_login_shared.html"> -<include src="login_non_lock_shared.html"> +<!-- This must be the first import in all login pages. --> +<link rel="import" href="chrome://resources/html/polymer.html"> + +<link rel="import" href="chrome://resources/cr_components/chromeos/quick_unlock/pin_keyboard.html"> + +<link rel="stylesheet" href="chrome://resources/css/butter_bar.css"> +<link rel="stylesheet" href="chrome://resources/css/dialogs.css"> +<link rel="stylesheet" href="chrome://resources/css/list.css"> +<link rel="stylesheet" href="chrome://resources/css/menu_button.css"> +<link rel="stylesheet" href="chrome://resources/css/menu.css"> +<link rel="stylesheet" href="chrome://resources/css/spinner.css"> +<link rel="stylesheet" href="chrome://resources/css/throbber.css"> +<link rel="stylesheet" href="chrome://resources/css/widgets.css"> + +<link rel="stylesheet" href="apps_menu.css"> +<link rel="stylesheet" href="../../../../../ui/login/bubble.css"> +<link rel="stylesheet" href="md_header_bar.css"> +<link rel="stylesheet" href="md_top_header_bar.css"> +<link rel="stylesheet" href="../../../../../ui/login/oobe.css"> +<link rel="stylesheet" href="oobe_popup_overlay.css"> +<link rel="stylesheet" href="oobe_screen.css"> + +<link rel="stylesheet" href="../../../../../ui/login/md_screen_container.css"> +<link rel="stylesheet" href="../../../../../ui/login/account_picker/md_screen_account_picker.css"> +<link rel="stylesheet" href="../../../../../ui/login/account_picker/md_user_pod_row.css"> + +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/event_tracker.js"></script> +<script src="chrome://resources/js/cr/event_target.js"></script> +<script src="chrome://resources/js/cr/ui.js"></script> +<script src="chrome://resources/js/cr/ui/touch_handler.js"></script> +<script src="chrome://resources/js/cr/ui/array_data_model.js"></script> +<script src="chrome://resources/js/cr/ui/dialogs.js"></script> +<script src="chrome://resources/js/cr/ui/list_selection_controller.js"></script> +<script src="chrome://resources/js/cr/ui/list_selection_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_single_selection_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_item.js"></script> +<script src="chrome://resources/js/cr/ui/list.js"></script> +<script src="chrome://resources/js/cr/ui/grid.js"></script> +<script src="chrome://resources/js/cr/ui/position_util.js"></script> +<script src="chrome://resources/js/cr/ui/menu_item.js"></script> +<script src="chrome://resources/js/cr/ui/menu.js"></script> +<script src="chrome://resources/js/cr/ui/menu_button.js"></script> +<script src="chrome://resources/js/load_time_data.js"></script> +<script src="chrome://resources/js/promise_resolver.js"></script> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://oobe/strings.js"></script> +<link rel="stylesheet" href="api_keys_notice.css"> + +<link rel="stylesheet" href="oobe_screen_enable_debugging.css"> +<link rel="stylesheet" href="oobe_screen_eula_installation_settings_overlay.css"> +<link rel="stylesheet" href="oobe_screen_welcome.css"> +<link rel="stylesheet" href="oobe_screen_reset.css"> +<link rel="stylesheet" href="oobe_screen_autolaunch.css"> +<link rel="stylesheet" href="oobe_screen_enable_kiosk.css"> +<link rel="stylesheet" href="oobe_screen_terms_of_service.css"> +<link rel="stylesheet" href="oobe_screen_auto_enrollment_check.css"> +<link rel="stylesheet" href="oobe_screen_user_image.css"> +<link rel="stylesheet" href="oobe_screen_supervision_transition.css"> + +<link rel="stylesheet" href="screen_app_launch_splash.css"> +<link rel="stylesheet" href="screen_arc_kiosk_splash.css"> +<link rel="stylesheet" href="screen_arc_terms_of_service.css"> +<link rel="stylesheet" href="screen_gaia_signin.css"> +<link rel="stylesheet" href="screen_error_message.css"> +<link rel="stylesheet" href="screen_tpm_error.css"> +<link rel="stylesheet" href="screen_password_changed.css"> +<link rel="stylesheet" href="screen_wrong_hwid.css"> +<link rel="stylesheet" href="screen_confirm_password.css"> +<link rel="stylesheet" href="screen_fatal_error.css"> +<link rel="stylesheet" href="screen_device_disabled.css"> +<link rel="stylesheet" href="screen_unrecoverable_cryptohome_error.css"> +<link rel="stylesheet" href="screen_active_directory_password_change.css"> +<link rel="stylesheet" href="screen_update_required.css"> + +<script src="chrome://oobe/keyboard_utils.js"></script> + <link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://oobe/custom_elements.html"> <link rel="stylesheet" href="accessibility_menu.css">
diff --git a/chrome/browser/resources/chromeos/login/oobe.js b/chrome/browser/resources/chromeos/login/oobe.js index b84d189c..c8b9b96f 100644 --- a/chrome/browser/resources/chromeos/login/oobe.js +++ b/chrome/browser/resources/chromeos/login/oobe.js
@@ -7,8 +7,79 @@ * This is the main code for the OOBE WebUI implementation. */ -// <include src="md_login_shared.js"> -// <include src="login_non_lock_shared.js"> +// <include src="test_util.js"> +// <include src="../../../../../ui/login/screen.js"> +// <include src="screen_context.js"> +// <include src="../user_images_grid.js"> +// <include src="apps_menu.js"> +// <include src="../../../../../ui/login/bubble.js"> +// <include src="../../../../../ui/login/display_manager.js"> +// <include src="md_header_bar.js"> +// <include src="md_top_header_bar.js"> +// <include src="demo_mode_test_helper.js"> + +// <include +// src="../../../../../ui/login/account_picker/md_screen_account_picker.js"> + +// <include src="../../../../../ui/login/login_ui_tools.js"> +// <include src="../../../../../ui/login/account_picker/md_user_pod_row.js"> +// <include src="../../../../../ui/login/resource_loader.js"> +// <include src="cr_ui.js"> +// <include src="oobe_screen_reset.js"> +// <include src="oobe_screen_autolaunch.js"> +// <include src="oobe_screen_enable_kiosk.js"> +// <include src="oobe_screen_terms_of_service.js"> +// <include src="oobe_screen_user_image.js"> +// <include src="oobe_screen_supervision_transition.js"> +// <include src="oobe_screen_assistant_optin_flow.js"> +// <include src="oobe_select.js"> + +// <include src="screen_app_launch_splash.js"> +// <include src="screen_arc_kiosk_splash.js"> +// <include src="screen_arc_terms_of_service.js"> +// <include src="screen_error_message.js"> +// <include src="screen_gaia_signin.js"> +// <include src="screen_password_changed.js"> +// <include src="screen_tpm_error.js"> +// <include src="screen_wrong_hwid.js"> +// <include src="screen_confirm_password.js"> +// <include src="screen_fatal_error.js"> +// <include src="screen_device_disabled.js"> +// <include src="screen_unrecoverable_cryptohome_error.js"> +// <include src="screen_active_directory_password_change.js"> +// <include src="screen_encryption_migration.js"> +// <include src="screen_update_required.js"> +// <include src="screen_sync_consent.js"> +// <include src="screen_fingerprint_setup.js"> +// <include src="screen_recommend_apps.js"> +// <include src="screen_app_downloading.js"> +// <include src="screen_discover.js"> +// <include src="screen_marketing_opt_in.js"> +// <include src="screen_multidevice_setup.js"> + +// <include src="../../gaia_auth_host/authenticator.js"> + +// Register assets for async loading. +[{ + id: SCREEN_OOBE_ENROLLMENT, + html: [{url: 'chrome://oobe/enrollment.html', targetID: 'inner-container'}], + css: ['chrome://oobe/enrollment.css'], + js: ['chrome://oobe/enrollment.js'] +}].forEach(cr.ui.login.ResourceLoader.registerAssets); + +(function() { +'use strict'; + +document.addEventListener('DOMContentLoaded', function() { + // Immediately load async assets. + cr.ui.login.ResourceLoader.loadAssets(SCREEN_OOBE_ENROLLMENT, function() { + // This screen is async-loaded so we manually trigger i18n processing. + i18nTemplate.process($('oauth-enrollment'), loadTimeData); + // Delayed binding since this isn't defined yet. + login.OAuthEnrollmentScreen.register(); + }); +}); +})(); // <include src="oobe_screen_auto_enrollment_check.js"> // <include src="oobe_screen_demo_setup.js"> // <include src="oobe_screen_demo_preferences.js">
diff --git a/chrome/browser/resources/cryptotoken/cryptotokenbackground.js b/chrome/browser/resources/cryptotoken/cryptotokenbackground.js index 610f3dc..111d18f 100644 --- a/chrome/browser/resources/cryptotoken/cryptotokenbackground.js +++ b/chrome/browser/resources/cryptotoken/cryptotokenbackground.js
@@ -77,6 +77,15 @@ * @param {*} response The response to return. */ function sendResponseToActiveTabOnly(request, sender, sendResponse, response) { + // For WebAuthn-proxied requests on Windows, dismissing the native Windows + // UI after a timeout races with the error being returned here. Hence, skip + // the focus check for all timeouts. + if (response.responseData && + response.responseData.errorCode == ErrorCodes.TIMEOUT) { + defaultResponseCallback(request, sendResponse, response); + return; + } + tabInForeground(sender.tab.id).then(function(result) { // If the tab is no longer in the foreground, drop the result: the user // is no longer interacting with the tab that originated the request.
diff --git a/chrome/browser/resources/local_ntp/local_ntp.js b/chrome/browser/resources/local_ntp/local_ntp.js index 3ff9488..a155b2f40 100644 --- a/chrome/browser/resources/local_ntp/local_ntp.js +++ b/chrome/browser/resources/local_ntp/local_ntp.js
@@ -462,6 +462,10 @@ * @private */ function sendThemeInfoToEditCustomLinkIframe() { + if (!configData.isGooglePage) { + return; + } + const info = getThemeBackgroundInfo(); if (!info) { return;
diff --git a/chrome/browser/resources/settings/languages_page/languages.js b/chrome/browser/resources/settings/languages_page/languages.js index 68bd88f..2bf2bbd0 100644 --- a/chrome/browser/resources/settings/languages_page/languages.js +++ b/chrome/browser/resources/settings/languages_page/languages.js
@@ -986,7 +986,10 @@ * @return {!chrome.languageSettingsPrivate.Language|undefined} */ getLanguage: function(languageCode) { - return this.supportedLanguageMap_.get(languageCode); + // If a languageCode is not found, try language without location. + return this.supportedLanguageMap_.get(languageCode) || + this.supportedLanguageMap_.get( + this.getLanguageCodeWithoutRegion(languageCode)); }, /**
diff --git a/chrome/browser/resources/settings/people_page/change_picture.html b/chrome/browser/resources/settings/people_page/change_picture.html index 941efeb..002b1f13 100644 --- a/chrome/browser/resources/settings/people_page/change_picture.html +++ b/chrome/browser/resources/settings/people_page/change_picture.html
@@ -38,6 +38,7 @@ top: calc(var(--cr-settings-header-height) + var(--title-padding) + var(--title-height)); + user-select: none; } #picturePane {
diff --git a/chrome/browser/resources/settings/search_settings.js b/chrome/browser/resources/settings/search_settings.js index 1d3cc52..3a11f43 100644 --- a/chrome/browser/resources/settings/search_settings.js +++ b/chrome/browser/resources/settings/search_settings.js
@@ -33,6 +33,7 @@ 'CONTENT', 'CR-ACTION-MENU', 'CR-DIALOG', + 'CR-ICON-BUTTON', 'CR-SLIDER', 'DIALOG', 'IMG',
diff --git a/chrome/browser/resources/ssl/ssl_error_assistant/gen_ssl_error_assistant_proto.py b/chrome/browser/resources/ssl/ssl_error_assistant/gen_ssl_error_assistant_proto.py index 2c69d28..46aeced 100755 --- a/chrome/browser/resources/ssl/ssl_error_assistant/gen_ssl_error_assistant_proto.py +++ b/chrome/browser/resources/ssl/ssl_error_assistant/gen_ssl_error_assistant_proto.py
@@ -11,6 +11,10 @@ import os import sys +# Subdirectory to be copied to Google Cloud Storage. Contains a copy of the +# generated proto under a versioned directory. +GS_COPY_DIR = "gs_copy" + # Import the binary proto generator. Walks up to the root of the source tree # which is six directories above, and finds the protobufs directory from there. proto_generator_path = os.path.normpath(os.path.join(os.path.abspath(__file__), @@ -18,6 +22,11 @@ sys.path.insert(0, proto_generator_path) from binary_proto_generator import BinaryProtoGenerator +def MakeSubDirs(outfile): + """ Make the subdirectories needed to create file |outfile| """ + dirname = os.path.dirname(outfile) + if not os.path.exists(dirname): + os.makedirs(dirname) class SSLErrorAssistantProtoGenerator(BinaryProtoGenerator): def ImportProtoModule(self): @@ -38,7 +47,21 @@ def ProcessPb(self, opts, pb): binary_pb_str = pb.SerializeToString() outfile = os.path.join(opts.outdir, opts.outbasename) - open(outfile, 'wb').write(binary_pb_str) + + # Write two copies of the proto: + # 1. Under the root of the gen directory for .grd files to refer to + # (./ssl_error_assistant/ssl_error_assistant.pb) + # 2. Under a versioned directory for the proto pusher to refer to + # (./ssl_error_assistant/gs_copy/<version>/all/ssl_error_assistant.pb) + outfile = os.path.join(opts.outdir, opts.outbasename) + with open(outfile, 'wb') as f: + f.write(binary_pb_str) + + outfile_copy = os.path.join(opts.outdir, GS_COPY_DIR, str(pb.version_id), + "all", opts.outbasename) + MakeSubDirs(outfile_copy) + with open(outfile_copy, 'wb') as f: + f.write(binary_pb_str) def main():
diff --git a/chrome/browser/resources/ssl/ssl_error_assistant/push_proto.py b/chrome/browser/resources/ssl/ssl_error_assistant/push_proto.py new file mode 100755 index 0000000..b7727ee --- /dev/null +++ b/chrome/browser/resources/ssl/ssl_error_assistant/push_proto.py
@@ -0,0 +1,89 @@ +#!/usr/bin/python +# Copyright 2018 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Build and push the {vers}/all/ssl_error_assistant.pb file to GCS so +# that the component update system will pick it up and push it to users. +# See README.md before running this. +# +# Requires ninja and gsutil to be in the user's path. + +import optparse +import os +import shutil +import subprocess +import sys + + +DEST_BUCKET = 'gs://chrome-components-ssl-error-assistant' +RESOURCE_SUBDIR = 'chrome/browser/resources/ssl/ssl_error_assistant' + +# Subdirectory to be copied to Google Cloud Storage. Contains a copy of the +# generated proto under a versioned directory. +GS_COPY_DIR = "gs_copy" + +# TODO(meacer): This is pretty much a duplicate of +# chrome/browser/safe_browsing/push_file_type_proto.py. Consider +# refactoring and reusing code. +def main(): + parser = optparse.OptionParser() + parser.add_option('-d', '--dir', + help='An up-to-date GN/Ninja build directory, ' + 'such as ./out/Debug') + + (opts, _) = parser.parse_args() + if opts.dir is None: + parser.print_help() + return 1 + + # Clear out the target dir before we build so we can be sure we've got + # the freshest version. + target_dir = os.path.join(opts.dir, "gen", RESOURCE_SUBDIR) + if os.path.isdir(target_dir): + shutil.rmtree(target_dir) + + gn_command = ['ninja', + '-C', opts.dir, + RESOURCE_SUBDIR + ':make_ssl_error_assistant_protobuf'] + print "Running the following" + print " " + (' '.join(gn_command)) + if subprocess.call(gn_command): + print "Ninja failed." + return 1 + + # Use the versioned files under the copy directory to push to the GCS bucket. + copy_dir = os.path.join(target_dir, GS_COPY_DIR) + os.chdir(copy_dir) + + # Sanity check that there is a versioned copy under the directory. + dirs = os.listdir('.') + assert len(dirs) == 1 and dirs[0].isdigit(), ( + "There must be a single versioned dir under " + copy_dir) + + # Push the files with their directories, in the form + # {vers}/{platform}/download_file_types.pb + # Don't overwrite existing files, in case we forgot to increment the + # version. + version_dir = dirs[0] + command = ['gsutil', 'cp', '-Rn', version_dir, DEST_BUCKET] + + print '\nGoing to run the following command' + print ' ', ' '.join(command) + print '\nIn directory' + print ' ', copy_dir + print '\nWhich should push the following files' + expected_files = [os.path.join(dp, f) for dp, _, fn in + os.walk(version_dir) for f in fn] + for f in expected_files: + print ' ', f + + shall = raw_input('\nAre you sure (y/N) ').lower() == 'y' + if not shall: + print 'aborting' + return 1 + return subprocess.call(command) + + +if __name__ == '__main__': + sys.exit(main())
diff --git a/chrome/browser/sessions/session_service_unittest.cc b/chrome/browser/sessions/session_service_unittest.cc index 81b2f19c..f4fa62a 100644 --- a/chrome/browser/sessions/session_service_unittest.cc +++ b/chrome/browser/sessions/session_service_unittest.cc
@@ -681,7 +681,7 @@ for (int i = 0; i < 5; ++i) { SerializedNavigationEntry nav = SerializedNavigationEntryTestHelper::CreateNavigation( - base_url + base::IntToString(i), "a"); + base_url + base::NumberToString(i), "a"); nav.set_index(i); UpdateNavigation(window_id, tab_id, nav, (i == 3)); } @@ -714,11 +714,11 @@ sessions::SessionTab* tab = windows[0]->tabs[0].get(); ASSERT_EQ(1, tab->current_navigation_index); EXPECT_EQ(3U, tab->navigations.size()); - EXPECT_EQ(GURL(base_url + base::IntToString(0)), + EXPECT_EQ(GURL(base_url + base::NumberToString(0)), tab->navigations[0].virtual_url()); - EXPECT_EQ(GURL(base_url + base::IntToString(3)), + EXPECT_EQ(GURL(base_url + base::NumberToString(3)), tab->navigations[1].virtual_url()); - EXPECT_EQ(GURL(base_url + base::IntToString(4)), + EXPECT_EQ(GURL(base_url + base::NumberToString(4)), tab->navigations[2].virtual_url()); }
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 3251029..6aaf3df9 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -2644,6 +2644,8 @@ "views/omnibox/omnibox_text_view.h", "views/omnibox/omnibox_view_views.cc", "views/omnibox/omnibox_view_views.h", + "views/omnibox/remove_suggestion_bubble.cc", + "views/omnibox/remove_suggestion_bubble.h", "views/omnibox/rounded_omnibox_results_frame.cc", "views/omnibox/rounded_omnibox_results_frame.h", "views/overlay/back_to_tab_image_button.cc",
diff --git a/chrome/browser/ui/ash/launcher/launcher_context_menu.cc b/chrome/browser/ui/ash/launcher/launcher_context_menu.cc index 087f6f4..bf468a3 100644 --- a/chrome/browser/ui/ash/launcher/launcher_context_menu.cc +++ b/chrome/browser/ui/ash/launcher/launcher_context_menu.cc
@@ -93,7 +93,7 @@ case ash::MENU_OPEN_NEW: // Use a copy of the id to avoid crashes, as this menu's owner will be // destroyed if LaunchApp replaces the ShelfItemDelegate instance. - controller_->LaunchApp(ash::ShelfID(item_.id), ash::LAUNCH_FROM_UNKNOWN, + controller_->LaunchApp(ash::ShelfID(item_.id), ash::LAUNCH_FROM_SHELF, ui::EF_NONE, display_id_); break; case ash::MENU_CLOSE:
diff --git a/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc b/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc index c47c0ca..a8201af 100644 --- a/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc +++ b/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc
@@ -249,7 +249,8 @@ AppLaunchParams params = CreateAppLaunchParamsWithEventFlags( profile_, extension, event_flags, extensions::SOURCE_APP_LAUNCHER, display_id); - if (source != ash::LAUNCH_FROM_UNKNOWN && + if ((source == ash::LAUNCH_FROM_APP_LIST || + source == ash::LAUNCH_FROM_APP_LIST_SEARCH) && app_id == extensions::kWebStoreAppId) { // Get the corresponding source string. std::string source_value = GetSourceFromAppListSource(source);
diff --git a/chrome/browser/ui/views/feature_promos/reopen_tab_promo_controller.cc b/chrome/browser/ui/views/feature_promos/reopen_tab_promo_controller.cc index 12f81403..a6c79f7 100644 --- a/chrome/browser/ui/views/feature_promos/reopen_tab_promo_controller.cc +++ b/chrome/browser/ui/views/feature_promos/reopen_tab_promo_controller.cc
@@ -53,7 +53,7 @@ iph_service_->TabReopened(); if (command_id == AppMenuModel::kMinRecentTabsCommandId) { - DCHECK_EQ(StepAtDismissal::kBubbleShown, promo_step_); + DCHECK_EQ(StepAtDismissal::kMenuOpened, promo_step_); promo_step_ = StepAtDismissal::kTabReopened; } } @@ -71,6 +71,9 @@ // Close the promo bubble since it doesn't automatically close on click. promo_bubble_->GetWidget()->Close(); + // Stop showing promo on app menu button. + browser_view_->toolbar()->app_menu_button()->SetPromoFeature(base::nullopt); + promo_step_ = StepAtDismissal::kMenuOpened; }
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc index 61802883..cab2fb66 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
@@ -13,6 +13,7 @@ #include "base/macros.h" #include "base/metrics/field_trial_params.h" #include "base/strings/string_util.h" +#include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "chrome/browser/ui/layout_constants.h" #include "chrome/browser/ui/omnibox/omnibox_theme.h" @@ -35,6 +36,7 @@ #include "ui/base/theme_provider.h" #include "ui/events/event.h" #include "ui/gfx/paint_vector_icon.h" +#include "ui/views/controls/menu/menu_runner.h" #if defined(OS_WIN) #include "base/win/atl.h" @@ -59,6 +61,14 @@ omnibox::kKeywordSearchIcon, GetLayoutConstant(LOCATION_BAR_ICON_SIZE), GetColor(OmniboxPart::RESULTS_ICON))); keyword_view_->icon()->SizeToPreferredSize(); + + if (base::FeatureList::IsEnabled( + omnibox::kOmniboxContextMenuForSuggestions)) { + // TODO(tommycli): Replace this with the real translated string from UX. + context_menu_contents_.AddItem(COMMAND_REMOVE_SUGGESTION, + base::ASCIIToUTF16("Remove suggestion...")); + set_context_menu_controller(this); + } } OmniboxResultView::~OmniboxResultView() {} @@ -387,6 +397,44 @@ SchedulePaint(); } +void OmniboxResultView::ShowContextMenuForView(views::View* source, + const gfx::Point& point, + ui::MenuSourceType source_type) { + // Deferred unhover of the result until the context menu is closed. + // If the mouse is still over the result when the context menu is closed, the + // View will receive an OnMouseMoved call anyways, which sets hover to true. + base::RepeatingClosure set_hovered_false = base::BindRepeating( + &OmniboxResultView::SetHovered, weak_factory_.GetWeakPtr(), false); + + context_menu_runner_ = std::make_unique<views::MenuRunner>( + &context_menu_contents_, + views::MenuRunner::HAS_MNEMONICS | views::MenuRunner::CONTEXT_MENU, + set_hovered_false); + context_menu_runner_->RunMenuAt(GetWidget(), nullptr, + gfx::Rect(point, gfx::Size()), + views::MENU_ANCHOR_TOPLEFT, source_type); + + // Opening the context menu unsets the hover state, but we still want the + // result 'hovered' as long as the context menu is open. + SetHovered(true); +} + +// ui::SimpleMenuModel::Delegate overrides: +bool OmniboxResultView::IsCommandIdChecked(int command_id) const { + return false; +} + +bool OmniboxResultView::IsCommandIdEnabled(int command_id) const { + DCHECK_EQ(COMMAND_REMOVE_SUGGESTION, command_id); + return match_.SupportsDeletion(); +} + +void OmniboxResultView::ExecuteCommand(int command_id, int event_flags) { + DCHECK_EQ(COMMAND_REMOVE_SUGGESTION, command_id); + + // TODO(tommycli): Launch modal bubble to confirm removing the suggestion. +} + void OmniboxResultView::ProvideButtonFocusHint() { suggestion_tab_switch_button_->ProvideFocusHint(); }
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.h b/chrome/browser/ui/views/omnibox/omnibox_result_view.h index 19153bd..848803d0 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_result_view.h +++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.h
@@ -10,14 +10,17 @@ #include <utility> #include "base/macros.h" +#include "base/memory/weak_ptr.h" #include "components/omnibox/browser/autocomplete_match.h" #include "components/omnibox/browser/suggestion_answer.h" #include "third_party/skia/include/core/SkColor.h" +#include "ui/base/models/simple_menu_model.h" #include "ui/base/window_open_disposition.h" #include "ui/gfx/animation/animation_delegate.h" #include "ui/gfx/animation/slide_animation.h" #include "ui/gfx/font_list.h" #include "ui/gfx/geometry/rect.h" +#include "ui/views/context_menu_controller.h" #include "ui/views/controls/button/button.h" #include "ui/views/controls/image_view.h" #include "ui/views/view.h" @@ -33,9 +36,15 @@ class Image; } +namespace views { +class MenuRunner; +} + class OmniboxResultView : public views::View, private gfx::AnimationDelegate, - public views::ButtonListener { + public views::ButtonListener, + public views::ContextMenuController, + public ui::SimpleMenuModel::Delegate { public: OmniboxResultView(OmniboxPopupContentsView* model, int model_index); ~OmniboxResultView() override; @@ -86,7 +95,20 @@ gfx::Size CalculatePreferredSize() const override; void OnNativeThemeChanged(const ui::NativeTheme* theme) override; + // views::ContextMenuController: + void ShowContextMenuForView(views::View* source, + const gfx::Point& point, + ui::MenuSourceType source_type) override; + + // ui::SimpleMenuModel::Delegate overrides: + bool IsCommandIdChecked(int command_id) const override; + bool IsCommandIdEnabled(int command_id) const override; + void ExecuteCommand(int command_id, int event_flags) override; + private: + // TODO(tommycli): This will be removed once we get final strings from UX. + enum CommandID { COMMAND_REMOVE_SUGGESTION }; + // Returns the height of the text portion of the result view. int GetTextHeight() const; @@ -120,11 +142,17 @@ // For sliding in the keyword search. std::unique_ptr<gfx::SlideAnimation> animation_; + // Context menu related members. + ui::SimpleMenuModel context_menu_contents_{this}; + std::unique_ptr<views::MenuRunner> context_menu_runner_; + // Weak pointers for easy reference. OmniboxMatchCellView* suggestion_view_; // The leading (or left) view. OmniboxMatchCellView* keyword_view_; // The trailing (or right) view. std::unique_ptr<OmniboxTabSwitchButton> suggestion_tab_switch_button_; + base::WeakPtrFactory<OmniboxResultView> weak_factory_{this}; + DISALLOW_COPY_AND_ASSIGN(OmniboxResultView); };
diff --git a/chrome/browser/ui/views/omnibox/remove_suggestion_bubble.cc b/chrome/browser/ui/views/omnibox/remove_suggestion_bubble.cc new file mode 100644 index 0000000..49b8b774 --- /dev/null +++ b/chrome/browser/ui/views/omnibox/remove_suggestion_bubble.cc
@@ -0,0 +1,71 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/views/omnibox/remove_suggestion_bubble.h" + +#include <memory> +#include <utility> + +#include "base/strings/utf_string_conversions.h" +#include "chrome/grit/generated_resources.h" +#include "components/omnibox/browser/autocomplete_match.h" +#include "components/strings/grit/components_strings.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/views/bubble/bubble_dialog_delegate_view.h" +#include "ui/views/controls/label.h" +#include "ui/views/layout/box_layout.h" + +namespace { + +class RemoveSuggestionBubbleDialogDelegateView + : public views::BubbleDialogDelegateView { + public: + RemoveSuggestionBubbleDialogDelegateView(views::View* anchor_view, + const AutocompleteMatch& match, + base::OnceClosure remove_closure) + : views::BubbleDialogDelegateView(anchor_view, + views::BubbleBorder::TOP_LEFT), + match_(match), + remove_closure_(std::move(remove_closure)) { + auto* layout_manager = SetLayoutManager( + std::make_unique<views::BoxLayout>(views::BoxLayout::kVertical)); + layout_manager->set_cross_axis_alignment( + views::BoxLayout::CROSS_AXIS_ALIGNMENT_START); + // TODO(tommycli): Replace this with the real translated string from UX. + AddChildView(new views::Label( + base::ASCIIToUTF16("Remove suggestion from history?"))); + } + + // views::DialogDelegateView: + base::string16 GetDialogButtonLabel(ui::DialogButton button) const override { + // TODO(tommycli): Replace this with the real translated string from UX. + if (button == ui::DIALOG_BUTTON_OK) + return base::ASCIIToUTF16("Remove"); + + return l10n_util::GetStringUTF16(IDS_CANCEL); + } + bool Accept() override { + std::move(remove_closure_).Run(); + return true; + } + + // views::WidgetDelegate: + ui::ModalType GetModalType() const override { return ui::MODAL_TYPE_WINDOW; } + base::string16 GetWindowTitle() const override { return match_.contents; } + + private: + AutocompleteMatch match_; + base::OnceClosure remove_closure_; +}; + +} // namespace + +void ShowRemoveSuggestion(views::View* anchor_view, + const AutocompleteMatch& match, + base::OnceClosure remove_closure) { + views::BubbleDialogDelegateView::CreateBubble( + new RemoveSuggestionBubbleDialogDelegateView(anchor_view, match, + std::move(remove_closure))) + ->Show(); +}
diff --git a/chrome/browser/ui/views/omnibox/remove_suggestion_bubble.h b/chrome/browser/ui/views/omnibox/remove_suggestion_bubble.h new file mode 100644 index 0000000..21a4f209 --- /dev/null +++ b/chrome/browser/ui/views/omnibox/remove_suggestion_bubble.h
@@ -0,0 +1,23 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_VIEWS_OMNIBOX_REMOVE_SUGGESTION_BUBBLE_H_ +#define CHROME_BROWSER_UI_VIEWS_OMNIBOX_REMOVE_SUGGESTION_BUBBLE_H_ + +#include "base/callback_forward.h" + +struct AutocompleteMatch; + +namespace views { +class View; +} + +// Shows a confirmation bubble to remove a suggestion represented by |match|. +// If the user clicks Remove, then |remove_closure| is executed, and the bubble +// is closed. +void ShowRemoveSuggestion(views::View* anchor_view, + const AutocompleteMatch& match, + base::OnceClosure remove_closure); + +#endif // CHROME_BROWSER_UI_VIEWS_OMNIBOX_REMOVE_SUGGESTION_BUBBLE_H_
diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller.cc b/chrome/browser/ui/views/tabs/tab_drag_controller.cc index a5b1590f..21904b5 100644 --- a/chrome/browser/ui/views/tabs/tab_drag_controller.cc +++ b/chrome/browser/ui/views/tabs/tab_drag_controller.cc
@@ -815,7 +815,7 @@ else target_tabstrip->GetWidget()->SetCapture(attached_tabstrip_); -#if !defined(OS_LINUX) +#if !defined(OS_LINUX) || defined(OS_CHROMEOS) // EndMoveLoop is going to snap the window back to its original location. // Hide it so users don't see this. Hiding a window in Linux aura causes // it to lose capture so skip it.
diff --git a/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc b/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc index af922e1..4a025ea 100644 --- a/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc +++ b/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc
@@ -32,12 +32,16 @@ #include "ui/base/resource/resource_bundle.h" #include "ui/base/theme_provider.h" #include "ui/base/ui_base_features.h" +#include "ui/compositor/paint_recorder.h" +#include "ui/gfx/animation/animation_delegate.h" +#include "ui/gfx/animation/throb_animation.h" #include "ui/gfx/canvas.h" #include "ui/gfx/color_palette.h" #include "ui/gfx/color_utils.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/views/animation/ink_drop.h" #include "ui/views/animation/ink_drop_highlight.h" +#include "ui/views/animation/ink_drop_mask.h" #include "ui/views/animation/ink_drop_state.h" #include "ui/views/controls/button/label_button_border.h" #include "ui/views/metrics.h" @@ -58,6 +62,65 @@ // maybe move this into theme system. constexpr SkColor kFeaturePromoHighlightColor = gfx::kGoogleBlue600; +// Cycle duration of ink drop pulsing animation used for in-product help. +constexpr base::TimeDelta kFeaturePromoPulseDuration = + base::TimeDelta::FromMilliseconds(800); + +// Max inset for pulsing animation. +constexpr float kFeaturePromoPulseInsetDip = 3.0f; + +// An InkDropMask used to animate the size of the BrowserAppMenuButton's ink +// drop. This is used when showing in-product help. +class PulsingInkDropMask : public gfx::AnimationDelegate, + public views::InkDropMask { + public: + PulsingInkDropMask(const gfx::Size& layer_size, + float normal_corner_radius, + float max_inset) + : views::InkDropMask(layer_size), + normal_corner_radius_(normal_corner_radius), + max_inset_(max_inset), + throb_animation_(this) { + throb_animation_.SetThrobDuration( + kFeaturePromoPulseDuration.InMilliseconds()); + throb_animation_.StartThrobbing(-1); + } + + private: + // views::InkDropMask: + void OnPaintLayer(const ui::PaintContext& context) override { + cc::PaintFlags flags; + flags.setStyle(cc::PaintFlags::kFill_Style); + flags.setAntiAlias(true); + + ui::PaintRecorder recorder(context, layer()->size()); + + gfx::RectF bounds(layer()->bounds()); + + const float current_inset = + throb_animation_.CurrentValueBetween(0.0f, max_inset_); + bounds.Inset(gfx::InsetsF(current_inset)); + const float corner_radius = normal_corner_radius_ - current_inset; + + recorder.canvas()->DrawRoundRect(bounds, corner_radius, flags); + } + + // gfx::AnimationDelegate: + void AnimationProgressed(const gfx::Animation* animation) override { + DCHECK_EQ(animation, &throb_animation_); + layer()->SchedulePaint(gfx::Rect(layer()->size())); + } + + // Normal corner radius of the ink drop without animation. This is also the + // corner radius at the largest instant of the animation. + const float normal_corner_radius_; + + // Max inset, used at the smallest instant of the animation. + const float max_inset_; + + gfx::ThrobAnimation throb_animation_; +}; + } // namespace #endif @@ -106,11 +169,30 @@ return; promo_feature_ = promo_feature; - // We override GetInkDropBaseColor below when |promo_feature_| is non-null. - // This sets the ink drop into the activated state, which will highlight it in - // the desired color. - GetInkDrop()->AnimateToState(promo_feature_ ? views::InkDropState::ACTIVATED - : views::InkDropState::HIDDEN); + + // We override GetInkDropBaseColor() and CreateInkDropMask(), returning the + // promo values if we are showing an in-product help promo. Calling + // HostSizeChanged() will force the new mask and color to be fetched. + // + // TODO(collinbaker): Consider adding explicit way to recreate mask instead of + // relying on HostSizeChanged() to do so. + GetInkDrop()->HostSizeChanged(size()); + + views::InkDropState next_state; + if (promo_feature_ || IsMenuShowing()) { + // If we are showing a promo, we must use the ACTIVATED state to show the + // highlight. Otherwise, if the menu is currently showing, we need to keep + // the ink drop in the ACTIVATED state. + next_state = views::InkDropState::ACTIVATED; + } else { + // If we are not showing a promo and the menu is hidden, we use the + // DEACTIVATED state. + next_state = views::InkDropState::DEACTIVATED; + // TODO(collinbaker): this is brittle since we don't know if something else + // should keep this ACTIVATED or in some other state. Consider adding code + // to track the correct state and restore to that. + } + GetInkDrop()->AnimateToState(next_state); UpdateIcon(); SchedulePaint(); @@ -293,6 +375,20 @@ return CreateToolbarInkDropHighlight(this); } +std::unique_ptr<views::InkDropMask> BrowserAppMenuButton::CreateInkDropMask() + const { +#if BUILDFLAG(ENABLE_DESKTOP_IN_PRODUCT_HELP) + if (promo_feature_) { + const float corner_radius = height() / 2.0f; + return std::make_unique<PulsingInkDropMask>(ink_drop_container()->size(), + corner_radius, + kFeaturePromoPulseInsetDip); + } +#endif + + return AppMenuButton::CreateInkDropMask(); +} + SkColor BrowserAppMenuButton::GetInkDropBaseColor() const { #if BUILDFLAG(ENABLE_DESKTOP_IN_PRODUCT_HELP) if (promo_feature_)
diff --git a/chrome/browser/ui/views/toolbar/browser_app_menu_button.h b/chrome/browser/ui/views/toolbar/browser_app_menu_button.h index 3d5b959a..6414e67 100644 --- a/chrome/browser/ui/views/toolbar/browser_app_menu_button.h +++ b/chrome/browser/ui/views/toolbar/browser_app_menu_button.h
@@ -83,6 +83,7 @@ int OnPerformDrop(const ui::DropTargetEvent& event) override; std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight() const override; + std::unique_ptr<views::InkDropMask> CreateInkDropMask() const override; SkColor GetInkDropBaseColor() const override; AppMenuIconController::TypeAndSeverity type_and_severity_{
diff --git a/chrome/browser/unified_consent/unified_consent_browsertest.cc b/chrome/browser/unified_consent/unified_consent_browsertest.cc index 4b25f2f..5c10df77 100644 --- a/chrome/browser/unified_consent/unified_consent_browsertest.cc +++ b/chrome/browser/unified_consent/unified_consent_browsertest.cc
@@ -96,18 +96,9 @@ metrics::SettingsHistogramValue::kNone, 0); histogram_tester_.ExpectBucketCount( "UnifiedConsent.SyncAndGoogleServicesSettings", - metrics::SettingsHistogramValue::kAllServicesWereEnabled, 1); - histogram_tester_.ExpectBucketCount( - "UnifiedConsent.SyncAndGoogleServicesSettings", metrics::SettingsHistogramValue::kUrlKeyedAnonymizedDataCollection, 1); - histogram_tester_.ExpectBucketCount( - "UnifiedConsent.SyncAndGoogleServicesSettings", - metrics::SettingsHistogramValue::kSafeBrowsingExtendedReporting, 0); - histogram_tester_.ExpectBucketCount( - "UnifiedConsent.SyncAndGoogleServicesSettings", - metrics::SettingsHistogramValue::kSpellCheck, 0); histogram_tester_.ExpectTotalCount( - "UnifiedConsent.SyncAndGoogleServicesSettings", 2); + "UnifiedConsent.SyncAndGoogleServicesSettings", 1); } } // namespace
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index e1ed9233..52f91f4 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc
@@ -707,16 +707,10 @@ // Android authentication account type for SPNEGO authentication const char kAuthAndroidNegotiateAccountType[] = "auth-spnego-account-type"; -// Disables Contextual Search. -const char kDisableContextualSearch[] = "disable-contextual-search"; - // Enable the accessibility tab switcher. const char kEnableAccessibilityTabSwitcher[] = "enable-accessibility-tab-switcher"; -// Enables Contextual Search. -const char kEnableContextualSearch[] = "enable-contextual-search"; - // Enables a hung renderer InfoBar allowing the user to close or wait on // unresponsive web content. const char kEnableHungRendererInfoBar[] = "enable-hung-renderer-infobar";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index 88f94861..12d77455 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h
@@ -208,9 +208,7 @@ #if defined(OS_ANDROID) extern const char kAuthAndroidNegotiateAccountType[]; -extern const char kDisableContextualSearch[]; extern const char kEnableAccessibilityTabSwitcher[]; -extern const char kEnableContextualSearch[]; extern const char kEnableHungRendererInfoBar[]; extern const char kForceShowUpdateMenuBadge[]; extern const char kForceShowUpdateMenuItemCustomSummary[];
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/notifications/MockNotificationManagerProxy.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/notifications/MockNotificationManagerProxy.java index a68335b..c46f166f 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/notifications/MockNotificationManagerProxy.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/notifications/MockNotificationManagerProxy.java
@@ -11,6 +11,7 @@ import android.os.Build; import android.support.annotation.Nullable; +import org.chromium.chrome.browser.notifications.ChromeNotification; import org.chromium.chrome.browser.notifications.NotificationManagerProxy; import java.util.ArrayList; @@ -115,6 +116,12 @@ mMutationCount++; } + @Override + public void notify(ChromeNotification notification) { + notify(notification.getMetadata().tag, notification.getMetadata().id, + notification.getNotification()); + } + private static String makeKey(int id, @Nullable String tag) { String key = Integer.toString(id); if (tag != null) key += KEY_SEPARATOR + tag;
diff --git a/chrome/test/data/webui/bookmarks/bookmarks_focus_test.js b/chrome/test/data/webui/bookmarks/bookmarks_focus_test.js index 6743624..8329647a 100644 --- a/chrome/test/data/webui/bookmarks/bookmarks_focus_test.js +++ b/chrome/test/data/webui/bookmarks/bookmarks_focus_test.js
@@ -279,17 +279,13 @@ test('simple keyboard selection', function() { let focusedItem = items[0]; assertEquals('0', focusedItem.getAttribute('tabindex')); - assertEquals( - '0', - focusedItem.$$('.more-vert-button button').getAttribute('tabindex')); + assertEquals(0, focusedItem.$.menuButton.tabIndex); focusedItem.focus(); keydown(focusedItem, 'ArrowDown'); focusedItem = items[1]; assertEquals('0', focusedItem.getAttribute('tabindex')); - assertEquals( - '0', - focusedItem.$$('.more-vert-button button').getAttribute('tabindex')); + assertEquals(0, focusedItem.$.menuButton.tabIndex); assertDeepEquals(['3'], normalizeIterable(store.data.selection.items)); keydown(focusedItem, 'ArrowUp'); @@ -444,10 +440,10 @@ // Iron-list attempts to focus the whole <bookmarks-item> when pressing // enter on the menu button. This checks that we block this behavior // during keydown on <bookmarks-list>. - const button = items[0].$$('.more-vert-button button'); + const button = items[0].$.menuButton; button.focus(); keydown(button, 'Enter'); - + commandManager.closeCommandMenu(); assertEquals(button, items[0].root.activeElement); }); });
diff --git a/chrome/test/data/webui/bookmarks/item_test.js b/chrome/test/data/webui/bookmarks/item_test.js index 5cca4e7..2f0837c 100644 --- a/chrome/test/data/webui/bookmarks/item_test.js +++ b/chrome/test/data/webui/bookmarks/item_test.js
@@ -41,7 +41,7 @@ }); test('pressing the menu button selects the item', function() { - MockInteractions.tap(item.$$('.more-vert-button')); + item.$.menuButton.click(); assertDeepEquals( bookmarks.actions.selectItem('2', store.data, { clear: true,
diff --git a/chrome/test/data/webui/cr_elements/cr_elements_browsertest.js b/chrome/test/data/webui/cr_elements/cr_elements_browsertest.js index 7bcafd2..2462a811 100644 --- a/chrome/test/data/webui/cr_elements/cr_elements_browsertest.js +++ b/chrome/test/data/webui/cr_elements/cr_elements_browsertest.js
@@ -425,6 +425,29 @@ mocha.run(); }); +/** + * @constructor + * @extends {CrElementsBrowserTest} + */ +function CrElementsIconButtonTest() {} + +CrElementsIconButtonTest.prototype = { + __proto__: CrElementsBrowserTest.prototype, + + /** @override */ + browsePreload: + 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html', + + /** @override */ + extraLibraries: CrElementsBrowserTest.prototype.extraLibraries.concat([ + '../settings/test_util.js', + 'cr_icon_button_tests.js', + ]), +}; + +TEST_F('CrElementsIconButtonTest', 'All', function() { + mocha.run(); +}); GEN('#if defined(OS_CHROMEOS)'); /**
diff --git a/chrome/test/data/webui/cr_elements/cr_icon_button_tests.js b/chrome/test/data/webui/cr_elements/cr_icon_button_tests.js new file mode 100644 index 0000000..09136368 --- /dev/null +++ b/chrome/test/data/webui/cr_elements/cr_icon_button_tests.js
@@ -0,0 +1,83 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +suite('cr-icon-button', function() { + let button; + + setup(async () => { + PolymerTest.clearBody(); + button = document.createElement('cr-icon-button'); + document.body.appendChild(button); + await PolymerTest.flushTasks(); + }); + + test('enabled/disabled', () => { + assertEquals('0', button.getAttribute('tabindex')); + assertEquals('false', button.getAttribute('aria-disabled')); + button.disabled = true; + assertEquals('-1', button.getAttribute('tabindex')); + assertEquals('true', button.getAttribute('aria-disabled')); + }); + + test('focus', () => { + if (cr.isMac) { + return; + } + button.focus(); + assertTrue(button.getRipple().holdDown); + button.disabled = true; + assertFalse(button.getRipple().holdDown); + }); + + test('iron-icon is created, reused and removed based on |ironIcon|', () => { + assertFalse(!!button.$$('iron-icon')); + button.ironIcon = 'icon-key'; + assertTrue(!!button.$$('iron-icon')); + button.$$('iron-icon').icon = 'icon-key'; + button.ironIcon = 'another-icon-key'; + assertEquals(1, button.shadowRoot.querySelectorAll('iron-icon').length); + button.$$('iron-icon').icon = 'another-icon-key'; + button.ironIcon = ''; + assertFalse(!!button.$$('iron-icon')); + }); + + test('enter emits click event', async () => { + const wait = test_util.eventToPromise('click', button); + MockInteractions.pressAndReleaseKeyOn(button, -1, [], 'Enter'); + await wait; + }); + + test('space emits click event', async () => { + const wait = test_util.eventToPromise('click', button); + MockInteractions.pressAndReleaseKeyOn(button, -1, [], ' '); + await wait; + }); + + test('disabled prevents UI and programmatic clicks', async () => { + let clickCount = 0; + const clickHandler = () => { + clickCount++; + }; + button.addEventListener('click', clickHandler); + + button.disabled = true; + await PolymerTest.flushTasks(); + MockInteractions.pressAndReleaseKeyOn(button, -1, [], 'Enter'); + MockInteractions.pressAndReleaseKeyOn(button, -1, [], ' '); + MockInteractions.downAndUp(button); + button.click(); + await PolymerTest.flushTasks(); + assertEquals(0, clickCount); + + button.disabled = false; + await PolymerTest.flushTasks(); + MockInteractions.pressAndReleaseKeyOn(button, -1, [], 'Enter'); + MockInteractions.pressAndReleaseKeyOn(button, -1, [], ' '); + MockInteractions.downAndUp(button); + button.click(); + await PolymerTest.flushTasks(); + assertEquals(4, clickCount); + button.removeEventListener('click', clickHandler); + }); +});
diff --git a/chrome/test/data/webui/settings/search_settings_test.js b/chrome/test/data/webui/settings/search_settings_test.js index ee3ee262..dfa8bbbc 100644 --- a/chrome/test/data/webui/settings/search_settings_test.js +++ b/chrome/test/data/webui/settings/search_settings_test.js
@@ -108,6 +108,7 @@ document.body.innerHTML = `<settings-section hidden-by-search> <cr-action-menu>${text}</cr-action-menu> <cr-dialog>${text}</cr-dialog> + <cr-icon-button>${text}</cr-icon-button> <cr-slider>${text}</cr-slider> <dialog>${text}</dialog> <iron-icon>${text}</iron-icon>
diff --git a/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp b/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp index 56b2da9..f00a481 100644 --- a/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp +++ b/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp
@@ -1081,9 +1081,9 @@ case rsaKey: { rv = l10n_util::GetStringFUTF8( IDS_CERT_RSA_PUBLIC_KEY_DUMP_FORMAT, - base::UintToString16(key->u.rsa.modulus.len * 8), + base::NumberToString16(key->u.rsa.modulus.len * 8), base::UTF8ToUTF16(ProcessRawBytes(&key->u.rsa.modulus)), - base::UintToString16(key->u.rsa.publicExponent.len * 8), + base::NumberToString16(key->u.rsa.publicExponent.len * 8), base::UTF8ToUTF16(ProcessRawBytes(&key->u.rsa.publicExponent))); break; }
diff --git a/chromecast/browser/android/cast_content_window_android.cc b/chromecast/browser/android/cast_content_window_android.cc index 000da0f..e056bb4 100644 --- a/chromecast/browser/android/cast_content_window_android.cc +++ b/chromecast/browser/android/cast_content_window_android.cc
@@ -114,6 +114,11 @@ env, java_window_, static_cast<int>(visibility_priority)); } +void CastContentWindowAndroid::SetActivityContext( + base::Value activity_context) {} + +void CastContentWindowAndroid::SetHostContext(base::Value host_context) {} + void CastContentWindowAndroid::NotifyVisibilityChange( VisibilityType visibility_type) { delegate_->OnVisibilityChange(visibility_type);
diff --git a/chromecast/browser/android/cast_content_window_android.h b/chromecast/browser/android/cast_content_window_android.h index 79459199..ec1f320 100644 --- a/chromecast/browser/android/cast_content_window_android.h +++ b/chromecast/browser/android/cast_content_window_android.h
@@ -34,6 +34,8 @@ void RevokeScreenAccess() override; void EnableTouchInput(bool enabled) override; void RequestVisibility(VisibilityPriority visibility_priority) override; + void SetActivityContext(base::Value activity_context) override; + void SetHostContext(base::Value host_context) override; void NotifyVisibilityChange(VisibilityType visibility_type) override; void RequestMoveOut() override;
diff --git a/chromecast/browser/cast_content_window.h b/chromecast/browser/cast_content_window.h index c5a6c81..712f3a2 100644 --- a/chromecast/browser/cast_content_window.h +++ b/chromecast/browser/cast_content_window.h
@@ -194,6 +194,15 @@ // change. virtual void RequestVisibility(VisibilityPriority visibility_priority) = 0; + // Provide activity-related metadata. This data should include information + // that is common for all activities, such as type. + // TODO(seantopping): Define a schema for this data. + virtual void SetActivityContext(base::Value activity_context) = 0; + + // Use this to stash custom data for this class. This data will be visible to + // the window manager. + virtual void SetHostContext(base::Value host_context) = 0; + // Notify the window that its visibility type has changed. This should only // ever be called by the window manager. // TODO(seantopping): Make this private to the window manager.
diff --git a/chromecast/browser/cast_content_window_aura.cc b/chromecast/browser/cast_content_window_aura.cc index 5598bf4..d0eeff3 100644 --- a/chromecast/browser/cast_content_window_aura.cc +++ b/chromecast/browser/cast_content_window_aura.cc
@@ -153,6 +153,10 @@ void CastContentWindowAura::RequestVisibility( VisibilityPriority visibility_priority){}; +void CastContentWindowAura::SetActivityContext(base::Value activity_context) {} + +void CastContentWindowAura::SetHostContext(base::Value host_context) {} + void CastContentWindowAura::NotifyVisibilityChange( VisibilityType visibility_type) { delegate_->OnVisibilityChange(visibility_type);
diff --git a/chromecast/browser/cast_content_window_aura.h b/chromecast/browser/cast_content_window_aura.h index 0548ec8a..7ce1a23 100644 --- a/chromecast/browser/cast_content_window_aura.h +++ b/chromecast/browser/cast_content_window_aura.h
@@ -37,6 +37,8 @@ void GrantScreenAccess() override; void RevokeScreenAccess() override; void RequestVisibility(VisibilityPriority visibility_priority) override; + void SetActivityContext(base::Value activity_context) override; + void SetHostContext(base::Value host_context) override; void NotifyVisibilityChange(VisibilityType visibility_type) override; void RequestMoveOut() override; void EnableTouchInput(bool enabled) override;
diff --git a/chromecast/browser/cast_web_view.h b/chromecast/browser/cast_web_view.h index 87f50a68..ef1139d 100644 --- a/chromecast/browser/cast_web_view.h +++ b/chromecast/browser/cast_web_view.h
@@ -120,10 +120,6 @@ CastWindowManager::WindowId z_order, VisibilityPriority initial_priority) = 0; - // Sets the activity context exposed to web view and content window. The exact - // format of context is defined by each activity. - virtual void SetContext(base::Value context) = 0; - // Allows the page to be shown on the screen. The page cannot be shown on the // screen until this is called. virtual void GrantScreenAccess() = 0;
diff --git a/chromecast/browser/cast_web_view_default.cc b/chromecast/browser/cast_web_view_default.cc index ee3ce58..5dc61d5 100644 --- a/chromecast/browser/cast_web_view_default.cc +++ b/chromecast/browser/cast_web_view_default.cc
@@ -145,8 +145,6 @@ web_contents_->Focus(); } -void CastWebViewDefault::SetContext(base::Value context) {} - void CastWebViewDefault::GrantScreenAccess() { window_->GrantScreenAccess(); }
diff --git a/chromecast/browser/cast_web_view_default.h b/chromecast/browser/cast_web_view_default.h index f87f9a08..01d34d9 100644 --- a/chromecast/browser/cast_web_view_default.h +++ b/chromecast/browser/cast_web_view_default.h
@@ -50,7 +50,6 @@ void InitializeWindow(CastWindowManager* window_manager, CastWindowManager::WindowId z_order, VisibilityPriority initial_priority) override; - void SetContext(base::Value context) override; void GrantScreenAccess() override; void RevokeScreenAccess() override;
diff --git a/chromecast/browser/cast_web_view_extension.cc b/chromecast/browser/cast_web_view_extension.cc index 742b7594..6f5a53f 100644 --- a/chromecast/browser/cast_web_view_extension.cc +++ b/chromecast/browser/cast_web_view_extension.cc
@@ -69,8 +69,6 @@ web_contents()->Focus(); } -void CastWebViewExtension::SetContext(base::Value context) {} - void CastWebViewExtension::GrantScreenAccess() { window_->GrantScreenAccess(); }
diff --git a/chromecast/browser/cast_web_view_extension.h b/chromecast/browser/cast_web_view_extension.h index 5bb68b61..ff4c14d 100644 --- a/chromecast/browser/cast_web_view_extension.h +++ b/chromecast/browser/cast_web_view_extension.h
@@ -51,7 +51,6 @@ void InitializeWindow(CastWindowManager* window_manager, CastWindowManager::WindowId z_order, VisibilityPriority initial_priority) override; - void SetContext(base::Value context) override; void GrantScreenAccess() override; void RevokeScreenAccess() override;
diff --git a/chromeos/dbus/fake_cicerone_client.cc b/chromeos/dbus/fake_cicerone_client.cc index b672f8c..7e8dc9c 100644 --- a/chromeos/dbus/fake_cicerone_client.cc +++ b/chromeos/dbus/fake_cicerone_client.cc
@@ -114,6 +114,7 @@ void FakeCiceroneClient::GetLinuxPackageInfo( const vm_tools::cicerone::LinuxPackageInfoRequest& request, DBusMethodCallback<vm_tools::cicerone::LinuxPackageInfoResponse> callback) { + most_recent_linux_package_info_request_ = request; base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), get_linux_package_info_response_)); @@ -123,18 +124,28 @@ const vm_tools::cicerone::InstallLinuxPackageRequest& request, DBusMethodCallback<vm_tools::cicerone::InstallLinuxPackageResponse> callback) { + most_recent_install_linux_package_request_ = request; base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), install_linux_package_response_)); } +void FakeCiceroneClient::SetOnUninstallPackageOwningFileCallback( + UninstallPackageOwningFileCallback callback) { + uninstall_package_owning_file_callback_ = std::move(callback); +} + void FakeCiceroneClient::UninstallPackageOwningFile( const vm_tools::cicerone::UninstallPackageOwningFileRequest& request, DBusMethodCallback<vm_tools::cicerone::UninstallPackageOwningFileResponse> callback) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(std::move(callback), - uninstall_package_owning_file_response_)); + if (uninstall_package_owning_file_callback_) { + uninstall_package_owning_file_callback_.Run(request, std::move(callback)); + } else { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), + uninstall_package_owning_file_response_)); + } } void FakeCiceroneClient::WaitForServiceToBeAvailable( @@ -278,4 +289,18 @@ } } +void FakeCiceroneClient::InstallLinuxPackageProgress( + const vm_tools::cicerone::InstallLinuxPackageProgressSignal& signal) { + for (auto& observer : observer_list_) { + observer.OnInstallLinuxPackageProgress(signal); + } +} + +void FakeCiceroneClient::UninstallPackageProgress( + const vm_tools::cicerone::UninstallPackageProgressSignal& signal) { + for (auto& observer : observer_list_) { + observer.OnUninstallPackageProgress(signal); + } +} + } // namespace chromeos
diff --git a/chromeos/dbus/fake_cicerone_client.h b/chromeos/dbus/fake_cicerone_client.h index 4454cea..2b6cc20 100644 --- a/chromeos/dbus/fake_cicerone_client.h +++ b/chromeos/dbus/fake_cicerone_client.h
@@ -15,6 +15,10 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS) FakeCiceroneClient : public CiceroneClient { public: + using UninstallPackageOwningFileCallback = base::RepeatingCallback<void( + const vm_tools::cicerone::UninstallPackageOwningFileRequest&, + DBusMethodCallback< + vm_tools::cicerone::UninstallPackageOwningFileResponse>)>; FakeCiceroneClient(); ~FakeCiceroneClient() override; @@ -86,9 +90,15 @@ DBusMethodCallback<vm_tools::cicerone::InstallLinuxPackageResponse> callback) override; + // Sets a callback to be called during any call to UninstallPackageOwningFile. + void SetOnUninstallPackageOwningFileCallback( + UninstallPackageOwningFileCallback callback); + // Fake version of the method that uninstalls an application inside a running - // Container. |callback| is called after the method call finishes. This does - // not cause progress events to be fired. + // Container. If SetOnUninstallPackageOwningFileCallback has been called, it + // just triggers that callback. Otherwise, it generates a task to call + // |callback| with the response from + // set_uninstall_package_owning_file_response. void UninstallPackageOwningFile( const vm_tools::cicerone::UninstallPackageOwningFileRequest& request, DBusMethodCallback<vm_tools::cicerone::UninstallPackageOwningFileResponse> @@ -216,12 +226,22 @@ container_app_icon_response_ = container_app_icon_response; } + const vm_tools::cicerone::LinuxPackageInfoRequest& + get_most_recent_linux_package_info_request() const { + return most_recent_linux_package_info_request_; + } + void set_linux_package_info_response( const vm_tools::cicerone::LinuxPackageInfoResponse& get_linux_package_info_response) { get_linux_package_info_response_ = get_linux_package_info_response; } + const vm_tools::cicerone::InstallLinuxPackageRequest& + get_most_recent_install_linux_package_request() const { + return most_recent_install_linux_package_request_; + } + void set_install_linux_package_response( const vm_tools::cicerone::InstallLinuxPackageResponse& install_linux_package_response) { @@ -284,6 +304,10 @@ const vm_tools::cicerone::ExportLxdContainerProgressSignal& signal); void NotifyImportLxdContainerProgress( const vm_tools::cicerone::ImportLxdContainerProgressSignal& signal); + void InstallLinuxPackageProgress( + const vm_tools::cicerone::InstallLinuxPackageProgressSignal& signal); + void UninstallPackageProgress( + const vm_tools::cicerone::UninstallPackageProgressSignal& signal); protected: void Init(dbus::Bus* bus) override {} @@ -310,7 +334,11 @@ vm_tools::cicerone::LaunchContainerApplicationResponse launch_container_application_response_; vm_tools::cicerone::ContainerAppIconResponse container_app_icon_response_; + vm_tools::cicerone::LinuxPackageInfoRequest + most_recent_linux_package_info_request_; vm_tools::cicerone::LinuxPackageInfoResponse get_linux_package_info_response_; + vm_tools::cicerone::InstallLinuxPackageRequest + most_recent_install_linux_package_request_; vm_tools::cicerone::InstallLinuxPackageResponse install_linux_package_response_; vm_tools::cicerone::UninstallPackageOwningFileResponse @@ -325,6 +353,8 @@ vm_tools::cicerone::ExportLxdContainerResponse export_lxd_container_response_; vm_tools::cicerone::ImportLxdContainerResponse import_lxd_container_response_; + UninstallPackageOwningFileCallback uninstall_package_owning_file_callback_; + base::ObserverList<Observer>::Unchecked observer_list_; DISALLOW_COPY_AND_ASSIGN(FakeCiceroneClient);
diff --git a/components/crash/content/app/BUILD.gn b/components/crash/content/app/BUILD.gn index 010123e8..915c034 100644 --- a/components/crash/content/app/BUILD.gn +++ b/components/crash/content/app/BUILD.gn
@@ -198,6 +198,7 @@ ] deps = [ + "//components/gwp_asan/crash_handler", "//third_party/crashpad/crashpad/handler:handler", ]
diff --git a/components/crash/content/app/chrome_crashpad_handler.cc b/components/crash/content/app/chrome_crashpad_handler.cc index ac121e2..24a8388 100644 --- a/components/crash/content/app/chrome_crashpad_handler.cc +++ b/components/crash/content/app/chrome_crashpad_handler.cc
@@ -2,8 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <memory> + +#include "components/gwp_asan/crash_handler/crash_handler.h" #include "third_party/crashpad/crashpad/handler/handler_main.h" +#include "third_party/crashpad/crashpad/handler/user_stream_data_source.h" int main(int argc, char* argv[]) { - return crashpad::HandlerMain(argc, argv, nullptr); + crashpad::UserStreamDataSources user_stream_data_sources; + user_stream_data_sources.push_back( + std::make_unique<gwp_asan::UserStreamDataSource>()); + + return crashpad::HandlerMain(argc, argv, &user_stream_data_sources); }
diff --git a/components/gwp_asan/BUILD.gn b/components/gwp_asan/BUILD.gn index b3540ff..5176c8c 100644 --- a/components/gwp_asan/BUILD.gn +++ b/components/gwp_asan/BUILD.gn
@@ -2,14 +2,12 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//components/gwp_asan/buildflags/buildflags.gni") - source_set("unit_tests") { testonly = true deps = [ "//components/gwp_asan/common:unit_tests", ] - if (enable_gwp_asan) { + if (is_win || is_mac) { deps += [ "//components/gwp_asan/client:unit_tests", "//components/gwp_asan/crash_handler:unit_tests",
diff --git a/components/gwp_asan/buildflags/buildflags.gni b/components/gwp_asan/buildflags/buildflags.gni index b2d23454..3cb25db9 100644 --- a/components/gwp_asan/buildflags/buildflags.gni +++ b/components/gwp_asan/buildflags/buildflags.gni
@@ -2,7 +2,9 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/allocator.gni") + declare_args() { # Is the GWP-ASan client enabled for chrome/ on a given platform. - enable_gwp_asan = is_win || is_mac + enable_gwp_asan = (is_win || is_mac) && use_allocator_shim }
diff --git a/components/gwp_asan/client/guarded_page_allocator.cc b/components/gwp_asan/client/guarded_page_allocator.cc index a50d076d..d511bdf 100644 --- a/components/gwp_asan/client/guarded_page_allocator.cc +++ b/components/gwp_asan/client/guarded_page_allocator.cc
@@ -4,6 +4,7 @@ #include "components/gwp_asan/client/guarded_page_allocator.h" +#include <algorithm> #include <iterator> #include <memory>
diff --git a/components/gwp_asan/client/guarded_page_allocator.h b/components/gwp_asan/client/guarded_page_allocator.h index e7e3cf6..523b3b0b 100644 --- a/components/gwp_asan/client/guarded_page_allocator.h +++ b/components/gwp_asan/client/guarded_page_allocator.h
@@ -7,6 +7,7 @@ #include <array> #include <atomic> +#include <limits> #include <memory> #include "base/compiler_specific.h" @@ -128,12 +129,12 @@ // Required for a singleton to access the constructor. friend base::NoDestructor<GuardedPageAllocator>; - DISALLOW_COPY_AND_ASSIGN(GuardedPageAllocator); - friend class GuardedPageAllocatorTest; FRIEND_TEST_ALL_PREFIXES(GuardedPageAllocatorTest, GetNearestValidPageEdgeCases); FRIEND_TEST_ALL_PREFIXES(GuardedPageAllocatorTest, GetErrorTypeEdgeCases); + + DISALLOW_COPY_AND_ASSIGN(GuardedPageAllocator); }; } // namespace internal
diff --git a/components/gwp_asan/client/guarded_page_allocator_unittest.cc b/components/gwp_asan/client/guarded_page_allocator_unittest.cc index 9a22e810..2a17c1a 100644 --- a/components/gwp_asan/client/guarded_page_allocator_unittest.cc +++ b/components/gwp_asan/client/guarded_page_allocator_unittest.cc
@@ -6,6 +6,8 @@ #include <array> #include <set> +#include <utility> +#include <vector> #include "base/bits.h" #include "base/process/process_metrics.h"
diff --git a/components/gwp_asan/client/sampling_allocator_shims.cc b/components/gwp_asan/client/sampling_allocator_shims.cc index c02bab6b..5651bd2 100644 --- a/components/gwp_asan/client/sampling_allocator_shims.cc +++ b/components/gwp_asan/client/sampling_allocator_shims.cc
@@ -4,6 +4,8 @@ #include "components/gwp_asan/client/sampling_allocator_shims.h" +#include <algorithm> + #include "base/allocator/allocator_shim.h" #include "base/allocator/buildflags.h" #include "base/compiler_specific.h"
diff --git a/components/gwp_asan/crash_handler/crash_analyzer.cc b/components/gwp_asan/crash_handler/crash_analyzer.cc index c963c8ce..0644caedc 100644 --- a/components/gwp_asan/crash_handler/crash_analyzer.cc +++ b/components/gwp_asan/crash_handler/crash_analyzer.cc
@@ -4,9 +4,9 @@ #include "components/gwp_asan/crash_handler/crash_analyzer.h" -#include <algorithm> - #include <stddef.h> +#include <algorithm> +#include <string> #include "base/logging.h" #include "base/process/process_metrics.h"
diff --git a/components/gwp_asan/crash_handler/crash_handler.cc b/components/gwp_asan/crash_handler/crash_handler.cc index ad2216e..925ebde 100644 --- a/components/gwp_asan/crash_handler/crash_handler.cc +++ b/components/gwp_asan/crash_handler/crash_handler.cc
@@ -5,6 +5,8 @@ #include "components/gwp_asan/crash_handler/crash_handler.h" #include <stddef.h> +#include <memory> +#include <string> #include "base/compiler_specific.h" #include "base/logging.h" @@ -25,7 +27,7 @@ class BufferExtensionStreamDataSource final : public crashpad::MinidumpUserExtensionStreamDataSource { public: - BufferExtensionStreamDataSource(uint32_t stream_type, Crash& crash); + BufferExtensionStreamDataSource(uint32_t stream_type, const Crash& crash); size_t StreamDataSize() override; bool ReadStreamData(Delegate* delegate) override; @@ -38,7 +40,7 @@ BufferExtensionStreamDataSource::BufferExtensionStreamDataSource( uint32_t stream_type, - Crash& crash) + const Crash& crash) : crashpad::MinidumpUserExtensionStreamDataSource(stream_type) { bool result = crash.SerializeToString(&data_); DCHECK(result);
diff --git a/components/gwp_asan/crash_handler/crash_handler_unittest.cc b/components/gwp_asan/crash_handler/crash_handler_unittest.cc index 82e4537..33c1c860 100644 --- a/components/gwp_asan/crash_handler/crash_handler_unittest.cc +++ b/components/gwp_asan/crash_handler/crash_handler_unittest.cc
@@ -4,6 +4,8 @@ #include "components/gwp_asan/crash_handler/crash_handler.h" +#include <map> +#include <memory> #include <string> #include <vector>
diff --git a/components/leveldb_proto/internal/unique_proto_database.h b/components/leveldb_proto/internal/unique_proto_database.h index 6469f655..ffac63d 100644 --- a/components/leveldb_proto/internal/unique_proto_database.h +++ b/components/leveldb_proto/internal/unique_proto_database.h
@@ -146,7 +146,6 @@ template <typename T> UniqueProtoDatabase<T>::~UniqueProtoDatabase() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); if (db_.get() && !db_wrapper_->task_runner()->DeleteSoon(FROM_HERE, db_.release())) { DLOG(WARNING) << "Proto database will not be deleted.";
diff --git a/components/metrics/persisted_logs.cc b/components/metrics/persisted_logs.cc index 1a820bf2..15ef46b 100644 --- a/components/metrics/persisted_logs.cc +++ b/components/metrics/persisted_logs.cc
@@ -151,13 +151,6 @@ } void PersistedLogs::PersistUnsentLogs() const { - // TODO(crbug.com/859477): The hypothesis is that a large part of crashes in - // base::ValueInternalCleanup() are caused by a not yet initialized local - // state. - CHECK_NE(PrefService::PrefInitializationStatus::INITIALIZATION_STATUS_WAITING, - local_state_->GetInitializationStatus()); - CHECK_NE(PrefService::PrefInitializationStatus::INITIALIZATION_STATUS_ERROR, - local_state_->GetInitializationStatus()); ListPrefUpdate update(local_state_, pref_name_); // TODO(crbug.com/859477): Verify that the preference has been properly // registered.
diff --git a/components/omnibox/browser/autocomplete_result.cc b/components/omnibox/browser/autocomplete_result.cc index 616b42d..0ac063a2 100644 --- a/components/omnibox/browser/autocomplete_result.cc +++ b/components/omnibox/browser/autocomplete_result.cc
@@ -449,7 +449,8 @@ std::pair<GURL, bool> p = GetMatchComparisonFields(*i); url_to_matches[p].push_back(i); } - // Find best default, and non-default, match in each group. + + // For each group of duplicate matches, choose the one that's considered best. for (auto& group : url_to_matches) { const auto& key = group.first; const GURL& gurl = key.first; @@ -458,36 +459,21 @@ if (gurl.is_empty() || duplicate_matches.size() == 1) continue; - auto best_match = duplicate_matches.end(); - auto best_default = duplicate_matches.end(); - for (auto match = duplicate_matches.begin(); - match != duplicate_matches.end(); ++match) { - if ((*match)->allowed_to_be_default_match) { - if (best_default == duplicate_matches.end() || - IsBetterMatch(**match, **best_default, page_classification)) { - best_default = match; - } - } - if (best_match == duplicate_matches.end() || - IsBetterMatch(**match, **best_match, page_classification)) { - best_match = match; - } + // Find the best match. + auto best_match = duplicate_matches.begin(); + for (auto i = std::next(best_match); i != duplicate_matches.end(); ++i) { + best_match = BetterMatch(i, best_match, page_classification); } - if (best_match != best_default && best_default != duplicate_matches.end()) { - (*best_default) - ->RecordAdditionalInfo(kACMatchPropertyScoreBoostedFrom, - (*best_default)->relevance); - (*best_default)->relevance = (*best_match)->relevance; - best_match = best_default; - } - // Rotate best first if necessary, so we know to keep it. + + // Rotate the chosen match to be first, if necessary, so we know to keep it. if (best_match != duplicate_matches.begin()) { duplicate_matches.splice(duplicate_matches.begin(), duplicate_matches, best_match); } + + // For each duplicate match, append its duplicates to that of the best + // match, then append it, before we erase it. for (auto i = std::next(best_match); i != duplicate_matches.end(); ++i) { - // For each duplicate match, append its duplicates to that of the best - // match, then append it, before we erase it. (*best_match)->duplicate_matches.insert( (*best_match)->duplicate_matches.end(), (*i)->duplicate_matches.begin(), @@ -495,6 +481,7 @@ (*best_match)->duplicate_matches.push_back(**i); } } + // Erase duplicate matches. matches->erase( std::remove_if( @@ -538,41 +525,78 @@ } // static -bool AutocompleteResult::IsBetterMatch( - AutocompleteMatch& first, - AutocompleteMatch& second, +std::list<ACMatches::iterator>::iterator AutocompleteResult::BetterMatch( + std::list<ACMatches::iterator>::iterator first, + std::list<ACMatches::iterator>::iterator second, metrics::OmniboxEventProto::PageClassification page_classification) { + std::list<ACMatches::iterator>::iterator preferred_match; + std::list<ACMatches::iterator>::iterator non_preferred_match; // This object implements greater than. CompareWithDemoteByType<AutocompleteMatch> compare_demote_by_type( page_classification); - if (first.type == ACMatchType::SEARCH_SUGGEST_ENTITY && - second.type != ACMatchType::SEARCH_SUGGEST_ENTITY) { - // If |first| is an entity suggestion and |second| isn't, |first| is - // considered better. If its type-adjusted relevance is lower, boost it to - // the value of |second|. - if (compare_demote_by_type(second, first)) { - first.RecordAdditionalInfo(kACMatchPropertyScoreBoostedFrom, - first.relevance); - first.relevance = second.relevance; + // The following logic enforces two constraints we care about regarding the + // the characteristics of the candidate matches. + // + // Entity suggestions: + // Entity suggestions are always preferred over non-entity suggestions, + // assuming both candidates have the same fill_into_edit value. In these + // cases, because the fill_into_edit value is the same in both and the + // selection of the entity suggestion appears to the user as simply a + // "promotion" of an equivalent suggestion by adding additional decoration, + // the entity suggestion is allowed to inherit the + // allowed_to_be_default_match and inline_autocompletion values from the + // other suggestion. + // + // allowed_to_be_default_match: + // A suggestion that is allowed to be the default match is always preferred + // over one that is not. + // + // Note that together these two constraints enforce an overall constraint, + // that if either candidate has allowed_to_be_default_match = true, the match + // which is preferred will always have allowed_to_be_default_match = true. + if ((*first)->type == ACMatchType::SEARCH_SUGGEST_ENTITY && + (*second)->type != ACMatchType::SEARCH_SUGGEST_ENTITY && + (*first)->fill_into_edit == (*second)->fill_into_edit) { + preferred_match = first; + non_preferred_match = second; + if ((*non_preferred_match)->allowed_to_be_default_match) { + (*preferred_match)->allowed_to_be_default_match = true; + (*preferred_match)->inline_autocompletion = + (*non_preferred_match)->inline_autocompletion; } - return true; - } else if (first.type != ACMatchType::SEARCH_SUGGEST_ENTITY && - second.type == ACMatchType::SEARCH_SUGGEST_ENTITY) { - // Likewise, if |second| is an entity suggestion and |first| isn't, first - // is not considered better, even if it has a higher type-adjusted - // relevance. If it does have a higher relevance, boost |second|. - if (compare_demote_by_type(first, second)) { - second.RecordAdditionalInfo(kACMatchPropertyScoreBoostedFrom, - second.relevance); - second.relevance = first.relevance; + } else if ((*first)->type != ACMatchType::SEARCH_SUGGEST_ENTITY && + (*second)->type == ACMatchType::SEARCH_SUGGEST_ENTITY && + (*first)->fill_into_edit == (*second)->fill_into_edit) { + preferred_match = second; + non_preferred_match = first; + if ((*non_preferred_match)->allowed_to_be_default_match) { + (*preferred_match)->allowed_to_be_default_match = true; + (*preferred_match)->inline_autocompletion = + (*non_preferred_match)->inline_autocompletion; } - return false; + } else if ((*first)->allowed_to_be_default_match && + !(*second)->allowed_to_be_default_match) { + preferred_match = first; + non_preferred_match = second; + } else if ((*second)->allowed_to_be_default_match && + !(*first)->allowed_to_be_default_match) { + preferred_match = second; + non_preferred_match = first; + } else { + // By default, simply prefer the match with the higher type-adjusted score. + return compare_demote_by_type(**first, **second) ? first : second; } - // In the case that both values are entity suggestions or both aren't, |first| - // is simply considered better if it's type-adjusted relevance is higher. - return compare_demote_by_type(first, second); + // If a match is preferred despite having a lower score, boost its score + // to that of the other match. + if (compare_demote_by_type(**non_preferred_match, **preferred_match)) { + (*preferred_match) + ->RecordAdditionalInfo(kACMatchPropertyScoreBoostedFrom, + (*preferred_match)->relevance); + (*preferred_match)->relevance = (*non_preferred_match)->relevance; + } + return preferred_match; } // static
diff --git a/components/omnibox/browser/autocomplete_result.h b/components/omnibox/browser/autocomplete_result.h index 747b278..b234c48 100644 --- a/components/omnibox/browser/autocomplete_result.h +++ b/components/omnibox/browser/autocomplete_result.h
@@ -7,6 +7,7 @@ #include <stddef.h> +#include <list> #include <map> #include "base/macros.h" @@ -138,21 +139,6 @@ private: FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest, ConvertsOpenTabsCorrectly); - FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest, - IsBetterMatchEntityWithHigherRelevance); - FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest, - IsBetterMatchEntityWithLowerRelevance); - FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest, - IsBetterMatchEntityWithEqualRelevance); - FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest, - IsBetterMatchNonEntityWithHigherRelevance); - FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest, - IsBetterMatchNonEntityWithLowerRelevance); - FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest, - IsBetterMatchNonEntityWithEqualRelevance); - FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest, IsBetterMatchBothEntities); - FRIEND_TEST_ALL_PREFIXES(AutocompleteResultTest, - IsBetterMatchBothNonEntities); typedef std::map<AutocompleteProvider*, ACMatches> ProviderToMatches; @@ -164,14 +150,13 @@ typedef ACMatches::iterator::difference_type matches_difference_type; #endif - // Returns true if |first| is preferred over |second| based on the type and - // relevance (as adjusted by the context of the match type and page type). If - // one candidate is preferred over another despite having lower type-adjusted - // relevance, copies the relevance from the higher relevance match into the - // lower. - static bool IsBetterMatch( - AutocompleteMatch& first, - AutocompleteMatch& second, + // Examines |first| and |second| and returns the one that is preferred based + // on the constraints we want to enforce when deduping. Note that this may + // modify the relevance, allowed_to_be_default_match, or inline_autocompletion + // values of the returned match. + static std::list<ACMatches::iterator>::iterator BetterMatch( + std::list<ACMatches::iterator>::iterator first, + std::list<ACMatches::iterator>::iterator second, metrics::OmniboxEventProto::PageClassification page_classification); // Returns true if |matches| contains a match with the same destination as
diff --git a/components/omnibox/browser/autocomplete_result_unittest.cc b/components/omnibox/browser/autocomplete_result_unittest.cc index a164f7c05..1203bac 100644 --- a/components/omnibox/browser/autocomplete_result_unittest.cc +++ b/components/omnibox/browser/autocomplete_result_unittest.cc
@@ -803,9 +803,12 @@ ASSERT_EQ(3U, result.size()); EXPECT_EQ("http://c/", result.match_at(0)->destination_url.spec()); EXPECT_EQ(1100, result.match_at(0)->relevance); + EXPECT_TRUE(result.match_at(0)->allowed_to_be_default_match); EXPECT_EQ(GetProvider(4), result.match_at(0)->provider); EXPECT_EQ("http://a/", result.match_at(1)->destination_url.spec()); + EXPECT_FALSE(result.match_at(1)->allowed_to_be_default_match); EXPECT_EQ("http://b/", result.match_at(2)->destination_url.spec()); + EXPECT_FALSE(result.match_at(2)->allowed_to_be_default_match); } TEST_F(AutocompleteResultTest, SortAndCullPromoteUnconsecutiveMatches) { @@ -841,6 +844,118 @@ EXPECT_EQ("http://e/", result.match_at(4)->destination_url.spec()); } +struct EntityTestData { + AutocompleteMatchType::Type type; + std::string destination_url; + int relevance; + bool allowed_to_be_default_match; + std::string fill_into_edit; + std::string inline_autocompletion; +}; + +void PopulateEntityTestCases(std::vector<EntityTestData>& test_cases, + ACMatches* matches) { + for (const auto& test_case : test_cases) { + AutocompleteMatch match; + match.type = test_case.type; + match.destination_url = GURL(test_case.destination_url); + match.relevance = test_case.relevance; + match.allowed_to_be_default_match = test_case.allowed_to_be_default_match; + match.fill_into_edit = base::UTF8ToUTF16(test_case.fill_into_edit); + match.inline_autocompletion = + base::UTF8ToUTF16(test_case.inline_autocompletion); + matches->push_back(match); + } +} + +TEST_F(AutocompleteResultTest, SortAndCullPreferEntities) { + // clang-format off + std::vector<EntityTestData> test_cases = { + { + AutocompleteMatchType::SEARCH_SUGGEST, + "http://search/?q=foo", 1100, false, "foo", "" + }, + { + AutocompleteMatchType::SEARCH_SUGGEST_ENTITY, + "http://search/?q=foo", 1000, false, "foo", "" + }, + { + AutocompleteMatchType::SEARCH_SUGGEST, + "http://search/?q=foo", 900, true, "foo", "oo" + }, + // This match will be the first result but it won't affect the entity + // deduping because it has a different URL. + { + AutocompleteMatchType::SEARCH_SUGGEST_PERSONALIZED, + "http://search/?q=bar", 1200, true, "foo", "oo" + }, + }; + // clang-format on + ACMatches matches; + PopulateEntityTestCases(test_cases, &matches); + + AutocompleteInput input(base::ASCIIToUTF16("f"), + metrics::OmniboxEventProto::OTHER, + TestSchemeClassifier()); + AutocompleteResult result; + result.AppendMatches(input, matches); + result.SortAndCull(input, template_url_service_.get()); + + // The first result will be the personalized suggestion. + EXPECT_EQ(2UL, result.size()); + EXPECT_EQ(AutocompleteMatchType::SEARCH_SUGGEST_PERSONALIZED, + result.match_at(0)->type); + EXPECT_EQ(1200, result.match_at(0)->relevance); + + // The second result will be the result of deduping the other three. + // The chosen match should be the entity suggestion and it should have been + // promoted to receive the first match's relevance and the last match's + // allowed_to_be_default_match and inline_autocompletion values. + EXPECT_EQ(AutocompleteMatchType::SEARCH_SUGGEST_ENTITY, + result.match_at(1)->type); + EXPECT_EQ(1100, result.match_at(1)->relevance); + EXPECT_TRUE(result.match_at(1)->allowed_to_be_default_match); + EXPECT_EQ(base::ASCIIToUTF16("oo"), + result.match_at(1)->inline_autocompletion); +} + +TEST_F(AutocompleteResultTest, SortAndCullPreferEntitiesFillIntoEditMustMatch) { + // clang-format off + std::vector<EntityTestData> test_cases = { + { + AutocompleteMatchType::SEARCH_SUGGEST_PERSONALIZED, + "http://search/?q=foo", 1100, false, "foo", "" + }, + { + AutocompleteMatchType::SEARCH_SUGGEST_ENTITY, + "http://search/?q=foo", 1000, false, "foobar", "" + }, + { + AutocompleteMatchType::SEARCH_SUGGEST, + "http://search/?q=foo", 900, true, "foo", "oo" + }, + }; + // clang-format on + ACMatches matches; + PopulateEntityTestCases(test_cases, &matches); + + AutocompleteInput input(base::ASCIIToUTF16("f"), + metrics::OmniboxEventProto::OTHER, + TestSchemeClassifier()); + AutocompleteResult result; + result.AppendMatches(input, matches); + result.SortAndCull(input, template_url_service_.get()); + + // The entity suggestion won't be chosen in this case because it has a non- + // matching value for fill_into_edit. + EXPECT_EQ(1UL, result.size()); + EXPECT_EQ(AutocompleteMatchType::SEARCH_SUGGEST, result.match_at(0)->type); + EXPECT_EQ(1100, result.match_at(0)->relevance); + EXPECT_TRUE(result.match_at(0)->allowed_to_be_default_match); + EXPECT_EQ(base::ASCIIToUTF16("oo"), + result.match_at(0)->inline_autocompletion); +} + TEST_F(AutocompleteResultTest, SortAndCullPromoteDuplicateSearchURLs) { // Register a template URL that corresponds to 'foo' search engine. TemplateURLData url_data; @@ -1002,166 +1117,6 @@ EXPECT_FALSE(result.match_at(2)->has_tab_match); } -namespace { - -void CheckRelevanceExpectations(const AutocompleteMatch& first, - const AutocompleteMatch& second, - int first_expected_relevance, - int second_expected_relevance, - const char* first_expected_boosted_from, - const char* second_expected_boosted_from) { - EXPECT_EQ(first_expected_relevance, first.relevance); - EXPECT_EQ(second_expected_relevance, second.relevance); - EXPECT_EQ(std::string(first_expected_boosted_from), - first.GetAdditionalInfo(kACMatchPropertyScoreBoostedFrom)); - EXPECT_EQ(std::string(second_expected_boosted_from), - second.GetAdditionalInfo(kACMatchPropertyScoreBoostedFrom)); -} - -} // namespace - -TEST_F(AutocompleteResultTest, IsBetterMatchEntityWithHigherRelevance) { - AutocompleteMatch first; - first.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY; - first.relevance = 1000; - - AutocompleteMatch second; - second.type = AutocompleteMatchType::SEARCH_SUGGEST; - second.relevance = 600; - - // Expect the entity suggestion to be better and its relevance unchanged. - // HOME_PAGE is used here because it doesn't trigger the special logic in - // OmniboxFieldTrial::GetDemotionsByType. There should otherwise be no - // demotions since the field trial params are cleared in the test setup. - EXPECT_TRUE(AutocompleteResult::IsBetterMatch(first, second, - OmniboxEventProto::HOME_PAGE)); - CheckRelevanceExpectations(first, second, 1000, 600, "", ""); -} - -TEST_F(AutocompleteResultTest, IsBetterMatchEntityWithLowerRelevance) { - AutocompleteMatch first; - first.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY; - first.relevance = 600; - - AutocompleteMatch second; - second.type = AutocompleteMatchType::SEARCH_SUGGEST; - second.relevance = 1000; - - // Expect the entity suggestion to be better and its relevance to have been - // boosted to that of the non-entity suggestion. - EXPECT_TRUE(AutocompleteResult::IsBetterMatch(first, second, - OmniboxEventProto::HOME_PAGE)); - CheckRelevanceExpectations(first, second, 1000, 1000, "600", ""); -} - -TEST_F(AutocompleteResultTest, IsBetterMatchEntityWithEqualRelevance) { - AutocompleteMatch first; - first.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY; - first.relevance = 1000; - - AutocompleteMatch second; - second.type = AutocompleteMatchType::SEARCH_SUGGEST; - second.relevance = 1000; - - // Expect the entity suggestion to be better and the relevance scores - // unchanged. - EXPECT_TRUE(AutocompleteResult::IsBetterMatch(first, second, - OmniboxEventProto::HOME_PAGE)); - CheckRelevanceExpectations(first, second, 1000, 1000, "", ""); -} - -TEST_F(AutocompleteResultTest, IsBetterMatchNonEntityWithHigherRelevance) { - AutocompleteMatch first; - first.type = AutocompleteMatchType::SEARCH_SUGGEST; - first.relevance = 1000; - - AutocompleteMatch second; - second.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY; - second.relevance = 600; - - // Expect the non-entity suggestion to *not* be better and the relevance of - // the entity suggestion to have been boosted. - EXPECT_FALSE(AutocompleteResult::IsBetterMatch(first, second, - OmniboxEventProto::HOME_PAGE)); - CheckRelevanceExpectations(first, second, 1000, 1000, "", "600"); -} - -TEST_F(AutocompleteResultTest, IsBetterMatchNonEntityWithLowerRelevance) { - AutocompleteMatch first; - first.type = AutocompleteMatchType::SEARCH_SUGGEST; - first.relevance = 600; - - AutocompleteMatch second; - second.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY; - second.relevance = 1000; - - // Expect the non-entity suggestion to *not* be better and the relevance - // scores unchanged. - EXPECT_FALSE(AutocompleteResult::IsBetterMatch(first, second, - OmniboxEventProto::HOME_PAGE)); - CheckRelevanceExpectations(first, second, 600, 1000, "", ""); -} - -TEST_F(AutocompleteResultTest, IsBetterMatchNonEntityWithEqualRelevance) { - AutocompleteMatch first; - first.type = AutocompleteMatchType::SEARCH_SUGGEST; - first.relevance = 1000; - - AutocompleteMatch second; - second.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY; - second.relevance = 1000; - - // Expect the non-entity suggestion to *not* be better and the relevance - // scores unchanged. - EXPECT_FALSE(AutocompleteResult::IsBetterMatch(first, second, - OmniboxEventProto::HOME_PAGE)); - CheckRelevanceExpectations(first, second, 1000, 1000, "", ""); -} - -TEST_F(AutocompleteResultTest, IsBetterMatchBothEntities) { - AutocompleteMatch first; - first.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY; - first.relevance = 1000; - - AutocompleteMatch second; - second.type = AutocompleteMatchType::SEARCH_SUGGEST_ENTITY; - second.relevance = 600; - - // Expect the first suggestion to be better since its relevance is higher and - // the relevance scores unchanged. - EXPECT_TRUE(AutocompleteResult::IsBetterMatch(first, second, - OmniboxEventProto::HOME_PAGE)); - CheckRelevanceExpectations(first, second, 1000, 600, "", ""); - - // Expect the reversed condition to be false and the relevance scores - // unchanged. - EXPECT_FALSE(AutocompleteResult::IsBetterMatch(second, first, - OmniboxEventProto::HOME_PAGE)); - CheckRelevanceExpectations(first, second, 1000, 600, "", ""); -} - -TEST_F(AutocompleteResultTest, IsBetterMatchBothNonEntities) { - AutocompleteMatch first; - first.type = AutocompleteMatchType::SEARCH_SUGGEST; - first.relevance = 1000; - - AutocompleteMatch second; - second.type = AutocompleteMatchType::SEARCH_SUGGEST; - second.relevance = 600; - - // Expect the first suggestion to be better since its relevance is higher and - // the relevance scores unchanged. - EXPECT_TRUE(AutocompleteResult::IsBetterMatch(first, second, - OmniboxEventProto::HOME_PAGE)); - CheckRelevanceExpectations(first, second, 1000, 600, "", ""); - - // Expect the reversed condition to be false and the relevance scores - // unchanged. - EXPECT_FALSE(AutocompleteResult::IsBetterMatch(second, first, - OmniboxEventProto::HOME_PAGE)); - CheckRelevanceExpectations(first, second, 1000, 600, "", ""); -} - TEST_F(AutocompleteResultTest, PedalSuggestionsCantBeDefaultMatch) { TestData data[] = { {1, 1, 500, true},
diff --git a/components/omnibox/browser/omnibox_field_trial.cc b/components/omnibox/browser/omnibox_field_trial.cc index db2c4b8d..e99cc442c 100644 --- a/components/omnibox/browser/omnibox_field_trial.cc +++ b/components/omnibox/browser/omnibox_field_trial.cc
@@ -153,6 +153,12 @@ OmniboxFieldTrial::PedalSuggestionMode::DEDICATED, &kPedalSuggestionModeOptions}; +// Feature used to show a context menu for suggestions when the user +// right-clicks a suggestion in the omnibox dropdown. It's currently disabled +// by default during development, but will eventually be enabled by default. +const base::Feature kOmniboxContextMenuForSuggestions{ + "OmniboxContextMenuForSuggestions", base::FEATURE_DISABLED_BY_DEFAULT}; + // Feature used to enable clipboard provider, which provides the user with // suggestions of the URL in the user's clipboard (if any) upon omnibox focus. const base::Feature kEnableClipboardProvider {
diff --git a/components/omnibox/browser/omnibox_field_trial.h b/components/omnibox/browser/omnibox_field_trial.h index 5a576a9..6058d8c3 100644 --- a/components/omnibox/browser/omnibox_field_trial.h +++ b/components/omnibox/browser/omnibox_field_trial.h
@@ -39,6 +39,7 @@ extern const base::Feature kOmniboxReverseTabSwitchLogic; extern const base::Feature kExperimentalKeywordMode; extern const base::Feature kOmniboxPedalSuggestions; +extern const base::Feature kOmniboxContextMenuForSuggestions; extern const base::Feature kEnableClipboardProvider; extern const base::Feature kEnableClipboardProviderTextSuggestions; extern const base::Feature kEnableClipboardProviderImageSuggestions;
diff --git a/components/prefs/pref_registry_simple.cc b/components/prefs/pref_registry_simple.cc index feb090f..bab05dd5 100644 --- a/components/prefs/pref_registry_simple.cc +++ b/components/prefs/pref_registry_simple.cc
@@ -55,15 +55,6 @@ RegisterPreference(path, std::move(default_value), flags); } -void PrefRegistrySimple::RegisterListPref( - const std::string& path, - std::unique_ptr<base::Value> default_value, - uint32_t flags) { - DCHECK(default_value); - RegisterListPref( - path, base::Value::FromUniquePtrValue(std::move(default_value)), flags); -} - void PrefRegistrySimple::RegisterDictionaryPref(const std::string& path, uint32_t flags) { RegisterPreference(path, base::Value(base::Value::Type::DICTIONARY), flags); @@ -75,15 +66,6 @@ RegisterPreference(path, std::move(default_value), flags); } -void PrefRegistrySimple::RegisterDictionaryPref( - const std::string& path, - std::unique_ptr<base::Value> default_value, - uint32_t flags) { - DCHECK(default_value); - RegisterDictionaryPref( - path, base::Value::FromUniquePtrValue(std::move(default_value)), flags); -} - void PrefRegistrySimple::RegisterInt64Pref(const std::string& path, int64_t default_value, uint32_t flags) {
diff --git a/components/prefs/pref_registry_simple.h b/components/prefs/pref_registry_simple.h index c1677ce..b167e94 100644 --- a/components/prefs/pref_registry_simple.h +++ b/components/prefs/pref_registry_simple.h
@@ -54,11 +54,6 @@ base::Value default_value, uint32_t flags = NO_REGISTRATION_FLAGS); - // Deprecated: prefer to use the version that takes a base::Value by value. - void RegisterListPref(const std::string& path, - std::unique_ptr<base::Value> default_value, - uint32_t flags = NO_REGISTRATION_FLAGS); - void RegisterDictionaryPref(const std::string& path, uint32_t flags = NO_REGISTRATION_FLAGS); @@ -66,11 +61,6 @@ base::Value default_value, uint32_t flags = NO_REGISTRATION_FLAGS); - // Deprecated: prefer to use the version that takes a base::Value by value. - void RegisterDictionaryPref(const std::string& path, - std::unique_ptr<base::Value> default_value, - uint32_t flags = NO_REGISTRATION_FLAGS); - void RegisterInt64Pref(const std::string& path, int64_t default_value, uint32_t flags = NO_REGISTRATION_FLAGS);
diff --git a/components/unified_consent/pref_names.cc b/components/unified_consent/pref_names.cc index e242092..1f74743 100644 --- a/components/unified_consent/pref_names.cc +++ b/components/unified_consent/pref_names.cc
@@ -7,16 +7,7 @@ namespace unified_consent { namespace prefs { -// Boolean indicating whether all unified consent services were ever enabled -// because the user opted into unified consent. This pref is used during -// rollback to disable off-by-default services. -const char kAllUnifiedConsentServicesWereEnabled[] = - "unified_consent.all_services_were_enabled"; - -// Integer indicating the migration state of unified consent, defined in -// unified_consent::MigrationState. const char kUnifiedConsentMigrationState[] = "unified_consent.migration_state"; - const char kUrlKeyedAnonymizedDataCollectionEnabled[] = "url_keyed_anonymized_data_collection.enabled";
diff --git a/components/unified_consent/pref_names.h b/components/unified_consent/pref_names.h index 534f9d14b..5220958 100644 --- a/components/unified_consent/pref_names.h +++ b/components/unified_consent/pref_names.h
@@ -8,8 +8,12 @@ namespace unified_consent { namespace prefs { -extern const char kAllUnifiedConsentServicesWereEnabled[]; +// Integer indicating the migration state of unified consent, defined in +// unified_consent::MigrationState. extern const char kUnifiedConsentMigrationState[]; + +// Boolean indicating whether anonymized URL-keyed data data collection is +// enabled. extern const char kUrlKeyedAnonymizedDataCollectionEnabled[]; } // namespace prefs
diff --git a/components/unified_consent/unified_consent_metrics.cc b/components/unified_consent/unified_consent_metrics.cc index 45707e86..b03867c 100644 --- a/components/unified_consent/unified_consent_metrics.cc +++ b/components/unified_consent/unified_consent_metrics.cc
@@ -50,12 +50,7 @@ } // namespace void RecordSettingsHistogram(PrefService* pref_service) { - bool metric_recorded = false; - - metric_recorded |= RecordSettingsHistogramFromPref( - prefs::kAllUnifiedConsentServicesWereEnabled, pref_service, - metrics::SettingsHistogramValue::kAllServicesWereEnabled); - metric_recorded |= RecordSettingsHistogramFromPref( + bool metric_recorded = RecordSettingsHistogramFromPref( prefs::kUrlKeyedAnonymizedDataCollectionEnabled, pref_service, metrics::SettingsHistogramValue::kUrlKeyedAnonymizedDataCollection); if (!metric_recorded)
diff --git a/components/unified_consent/unified_consent_service.cc b/components/unified_consent/unified_consent_service.cc index 5792d4d0..6fc8b603 100644 --- a/components/unified_consent/unified_consent_service.cc +++ b/components/unified_consent/unified_consent_service.cc
@@ -47,8 +47,6 @@ registry->RegisterIntegerPref( prefs::kUnifiedConsentMigrationState, static_cast<int>(MigrationState::kNotInitialized)); - registry->RegisterBooleanPref(prefs::kAllUnifiedConsentServicesWereEnabled, - false); } // static @@ -66,22 +64,14 @@ // Clear all unified consent prefs. user_pref_service->ClearPref(prefs::kUrlKeyedAnonymizedDataCollectionEnabled); user_pref_service->ClearPref(prefs::kUnifiedConsentMigrationState); - user_pref_service->ClearPref(prefs::kAllUnifiedConsentServicesWereEnabled); } void UnifiedConsentService::EnableGoogleServices() { DCHECK(identity_manager_->HasPrimaryAccount()); - DCHECK_LT(MigrationState::kNotInitialized, GetMigrationState()); + DCHECK_EQ(MigrationState::kCompleted, GetMigrationState()); - if (GetMigrationState() != MigrationState::kCompleted) { - // If the user opted into unified consent, the migration is completed. - SetMigrationState(MigrationState::kCompleted); - } - - // Enable all Google services except sync. pref_service_->SetBoolean(prefs::kUrlKeyedAnonymizedDataCollectionEnabled, true); - pref_service_->SetBoolean(prefs::kAllUnifiedConsentServicesWereEnabled, true); } void UnifiedConsentService::Shutdown() { @@ -91,13 +81,10 @@ void UnifiedConsentService::OnPrimaryAccountCleared( const AccountInfo& account_info) { - pref_service_->SetBoolean(prefs::kAllUnifiedConsentServicesWereEnabled, - false); - - // By design, signing out of Chrome automatically disables off-by-default - // services. + // By design, clearing the primary account disables URL-keyed data collection. pref_service_->SetBoolean(prefs::kUrlKeyedAnonymizedDataCollectionEnabled, false); + if (GetMigrationState() != MigrationState::kCompleted) { // When the user signs out, the migration is complete. SetMigrationState(MigrationState::kCompleted);
diff --git a/components/unified_consent/unified_consent_service_unittest.cc b/components/unified_consent/unified_consent_service_unittest.cc index dd3a25f..1c8e6864 100644 --- a/components/unified_consent/unified_consent_service_unittest.cc +++ b/components/unified_consent/unified_consent_service_unittest.cc
@@ -82,11 +82,6 @@ new unified_consent::ScopedUnifiedConsent(feature_state)); } - bool AreAllGoogleServicesEnabled() { - return pref_service_.GetBoolean( - prefs::kUrlKeyedAnonymizedDataCollectionEnabled); - } - unified_consent::MigrationState GetMigrationState() { int migration_state_int = pref_service_.GetInteger(prefs::kUnifiedConsentMigrationState); @@ -115,11 +110,11 @@ identity_test_environment_.SetPrimaryAccount("testaccount"); EXPECT_FALSE(pref_service_.GetBoolean( prefs::kUrlKeyedAnonymizedDataCollectionEnabled)); - EXPECT_FALSE(AreAllGoogleServicesEnabled()); // Enable services and check expectations. consent_service_->EnableGoogleServices(); - EXPECT_TRUE(AreAllGoogleServicesEnabled()); + EXPECT_TRUE(pref_service_.GetBoolean( + prefs::kUrlKeyedAnonymizedDataCollectionEnabled)); } TEST_F(UnifiedConsentServiceTest, EnableServices_WithUnsupportedService) { @@ -127,11 +122,11 @@ identity_test_environment_.SetPrimaryAccount("testaccount"); EXPECT_FALSE(pref_service_.GetBoolean( prefs::kUrlKeyedAnonymizedDataCollectionEnabled)); - EXPECT_FALSE(AreAllGoogleServicesEnabled()); // Enable services and check expectations. consent_service_->EnableGoogleServices(); - EXPECT_TRUE(AreAllGoogleServicesEnabled()); + EXPECT_TRUE(pref_service_.GetBoolean( + prefs::kUrlKeyedAnonymizedDataCollectionEnabled)); } TEST_F(UnifiedConsentServiceTest, Migration_UpdateSettings) { @@ -160,12 +155,12 @@ // Precondition: Enable unified consent. consent_service_->EnableGoogleServices(); - EXPECT_TRUE(AreAllGoogleServicesEnabled()); + EXPECT_TRUE(pref_service_.GetBoolean( + prefs::kUrlKeyedAnonymizedDataCollectionEnabled)); // Clearing primary account revokes unfied consent and a couple of other // non-personalized services. identity_test_environment_.ClearPrimaryAccount(); - EXPECT_FALSE(AreAllGoogleServicesEnabled()); EXPECT_FALSE(pref_service_.GetBoolean( prefs::kUrlKeyedAnonymizedDataCollectionEnabled)); } @@ -187,10 +182,11 @@ CreateConsentService(); consent_service_->EnableGoogleServices(); // Check expectations after opt-in. - EXPECT_TRUE(AreAllGoogleServicesEnabled()); + EXPECT_TRUE(pref_service_.GetBoolean( + prefs::kUrlKeyedAnonymizedDataCollectionEnabled)); EXPECT_EQ(unified_consent::MigrationState::kCompleted, GetMigrationState()); - EXPECT_TRUE( - pref_service_.GetBoolean(prefs::kAllUnifiedConsentServicesWereEnabled)); + EXPECT_TRUE(pref_service_.GetBoolean( + prefs::kUrlKeyedAnonymizedDataCollectionEnabled)); consent_service_->Shutdown(); consent_service_.reset();
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl.cc b/components/viz/service/display_embedder/skia_output_surface_impl.cc index 7cee2bd..484bc1e 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl.cc +++ b/components/viz/service/display_embedder/skia_output_surface_impl.cc
@@ -9,6 +9,7 @@ #include <vector> #include "base/bind.h" +#include "base/bind_helpers.h" #include "base/callback_helpers.h" #include "base/synchronization/waitable_event.h" #include "base/threading/thread_task_runner_handle.h" @@ -679,25 +680,30 @@ base::BindOnce(&base::WaitableEvent::Signal, base::Unretained(event))); } - auto did_swap_buffer_complete_callback = base::BindRepeating( - &SkiaOutputSurfaceImpl::DidSwapBuffersComplete, weak_ptr_); - did_swap_buffer_complete_callback = CreateSafeCallback( - client_thread_task_runner_, did_swap_buffer_complete_callback); - auto buffer_presented_callback = - base::BindRepeating(&SkiaOutputSurfaceImpl::BufferPresented, weak_ptr_); - buffer_presented_callback = - CreateSafeCallback(client_thread_task_runner_, buffer_presented_callback); - auto context_lost_callback = - base::BindRepeating(&SkiaOutputSurfaceImpl::ContextLost, weak_ptr_); - context_lost_callback = - CreateSafeCallback(client_thread_task_runner_, context_lost_callback); - if (task_executor_) { + // When |task_executor_| is not nullptr, DidSwapBuffersComplete(), + // BufferPresented(), ContextList() are not expected to be called by this + // class. The SurfacesInstance will do it. impl_on_gpu_ = std::make_unique<SkiaOutputSurfaceImplOnGpu>( task_executor_.get(), gl_surface_, std::move(shared_context_state_), - sequence_->GetSequenceId(), did_swap_buffer_complete_callback, - buffer_presented_callback, context_lost_callback); + sequence_->GetSequenceId(), + base::DoNothing::Repeatedly<gpu::SwapBuffersCompleteParams, + const gfx::Size&>(), + base::DoNothing::Repeatedly<const gfx::PresentationFeedback&>(), + base::DoNothing::Repeatedly<>()); } else { + auto did_swap_buffer_complete_callback = base::BindRepeating( + &SkiaOutputSurfaceImpl::DidSwapBuffersComplete, weak_ptr_); + did_swap_buffer_complete_callback = CreateSafeCallback( + client_thread_task_runner_, did_swap_buffer_complete_callback); + auto buffer_presented_callback = + base::BindRepeating(&SkiaOutputSurfaceImpl::BufferPresented, weak_ptr_); + buffer_presented_callback = CreateSafeCallback(client_thread_task_runner_, + buffer_presented_callback); + auto context_lost_callback = + base::BindRepeating(&SkiaOutputSurfaceImpl::ContextLost, weak_ptr_); + context_lost_callback = + CreateSafeCallback(client_thread_task_runner_, context_lost_callback); impl_on_gpu_ = std::make_unique<SkiaOutputSurfaceImplOnGpu>( gpu_service_, surface_handle_, did_swap_buffer_complete_callback, buffer_presented_callback, context_lost_callback);
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.cc b/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.cc index a91f40e..102a73d 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.cc +++ b/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.cc
@@ -8,6 +8,7 @@ #include "base/atomic_sequence_num.h" #include "base/bind.h" +#include "base/bind_helpers.h" #include "base/callback_helpers.h" #include "base/synchronization/waitable_event.h" #include "components/viz/common/frame_sinks/begin_frame_source.h" @@ -171,7 +172,7 @@ void SkiaOutputSurfaceImplNonDDL::SetNeedsSwapSizeNotifications( bool needs_swap_size_notifications) { - needs_swap_size_notifications_ = needs_swap_size_notifications; + NOTIMPLEMENTED(); } SkCanvas* SkiaOutputSurfaceImplNonDDL::BeginPaintCurrentFrame() { @@ -296,13 +297,8 @@ void SkiaOutputSurfaceImplNonDDL::SkiaSwapBuffers(OutputSurfaceFrame frame) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - gpu::SwapBuffersCompleteParams params; - params.swap_response.swap_start = base::TimeTicks::Now(); - params.swap_response.result = gl_surface_->SwapBuffers(base::BindOnce( - &SkiaOutputSurfaceImplNonDDL::BufferPresented, base::Unretained(this))); - params.swap_response.swap_end = base::TimeTicks::Now(); - - DidSwapBuffersComplete(params, gfx::Size()); + gl_surface_->SwapBuffers( + base::DoNothing::Once<const gfx::PresentationFeedback&>()); } SkCanvas* SkiaOutputSurfaceImplNonDDL::BeginPaintRenderPass( @@ -431,27 +427,6 @@ metadata.resource_format, backend_texture); } -void SkiaOutputSurfaceImplNonDDL::DidSwapBuffersComplete( - const gpu::SwapBuffersCompleteParams& params, - const gfx::Size& pixel_size) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DCHECK(client_); - - DCHECK(params.texture_in_use_responses.empty()); - DCHECK(params.ca_layer_params.is_empty); - - client_->DidReceiveSwapBuffersAck(); - if (needs_swap_size_notifications_) - client_->DidSwapWithSize(pixel_size); -} - -void SkiaOutputSurfaceImplNonDDL::BufferPresented( - const gfx::PresentationFeedback& feedback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DCHECK(client_); - client_->DidReceivePresentationFeedback(feedback); -} - void SkiaOutputSurfaceImplNonDDL::ContextLost() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); for (auto& observer : observers_)
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.h b/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.h index 903b658..ca5662de 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.h +++ b/components/viz/service/display_embedder/skia_output_surface_impl_non_ddl.h
@@ -21,13 +21,8 @@ class GLSurface; } -namespace gfx { -struct PresentationFeedback; -} - namespace gpu { class MailboxManager; -struct SwapBuffersCompleteParams; class SyncPointClientState; class SyncPointManager; class SyncPointOrderData; @@ -112,9 +107,6 @@ bool GetGrBackendTexture(const ResourceMetadata& metadata, GrBackendTexture* backend_texture); - void DidSwapBuffersComplete(const gpu::SwapBuffersCompleteParams& params, - const gfx::Size& pixel_size); - void BufferPresented(const gfx::PresentationFeedback& feedback); void ContextLost(); uint64_t sync_fence_release_ = 0; @@ -139,9 +131,6 @@ // The current render pass id set by BeginPaintRenderPass. RenderPassId current_render_pass_id_ = 0; - // Whether to send OutputSurfaceClient::DidSwapWithSize notifications. - bool needs_swap_size_notifications_ = false; - // Observers for context lost. base::ObserverList<ContextLostObserver>::Unchecked observers_;
diff --git a/components/zucchini/rel32_utils.h b/components/zucchini/rel32_utils.h index 7a01230..ff9e7127 100644 --- a/components/zucchini/rel32_utils.h +++ b/components/zucchini/rel32_utils.h
@@ -5,18 +5,22 @@ #ifndef COMPONENTS_ZUCCHINI_REL32_UTILS_H_ #define COMPONENTS_ZUCCHINI_REL32_UTILS_H_ +#include <algorithm> +#include <memory> #include <vector> #include "base/macros.h" #include "base/optional.h" #include "components/zucchini/address_translator.h" +#include "components/zucchini/arm_utils.h" #include "components/zucchini/buffer_view.h" #include "components/zucchini/image_utils.h" +#include "components/zucchini/io_utils.h" namespace zucchini { -// A visitor that emits References (locations and target) from a specified -// portion of an x86 / x64 image, given a list of valid locations. +// Reader that emits x86 / x64 References (locations and target) from a list of +// valid locations, constrained by a portion of an image. class Rel32ReaderX86 : public ReferenceReader { public: // |image| is an image containing x86 / x64 code in [|lo|, |hi|). @@ -45,7 +49,7 @@ DISALLOW_COPY_AND_ASSIGN(Rel32ReaderX86); }; -// Writer for x86 / x64 rel32 references. +// Writer for x86 / x64 rel32 References. class Rel32WriterX86 : public ReferenceWriter { public: // |image| wraps the raw bytes of a binary in which rel32 references will be @@ -65,6 +69,114 @@ DISALLOW_COPY_AND_ASSIGN(Rel32WriterX86); }; +// Reader that emits x86 / x64 References (locations and target) of a spcific +// type from a list of valid locations, constrained by a portion of an image. +template <class ADDR_TRAITS> +class Rel32ReaderArm : public ReferenceReader { + public: + using CODE_T = typename ADDR_TRAITS::code_t; + + Rel32ReaderArm(const AddressTranslator& translator, + ConstBufferView view, + const std::vector<offset_t>& rel32_locations, + offset_t lo, + offset_t hi) + : view_(view), + offset_to_rva_(translator), + rva_to_offset_(translator), + hi_(hi) { + cur_it_ = + std::lower_bound(rel32_locations.begin(), rel32_locations.end(), lo); + rel32_end_ = rel32_locations.end(); + } + + base::Optional<Reference> GetNext() override { + while (cur_it_ < rel32_end_ && *cur_it_ < hi_) { + offset_t location = *(cur_it_++); + CODE_T code = ADDR_TRAITS::Fetch(view_, location); + rva_t instr_rva = offset_to_rva_.Convert(location); + rva_t target_rva = kInvalidRva; + if (ADDR_TRAITS::Read(instr_rva, code, &target_rva)) { + offset_t target = rva_to_offset_.Convert(target_rva); + if (target != kInvalidOffset) + return Reference{location, target}; + } + } + return base::nullopt; + } + + private: + ConstBufferView view_; + AddressTranslator::OffsetToRvaCache offset_to_rva_; + AddressTranslator::RvaToOffsetCache rva_to_offset_; + std::vector<offset_t>::const_iterator cur_it_; + std::vector<offset_t>::const_iterator rel32_end_; + offset_t hi_; + + DISALLOW_COPY_AND_ASSIGN(Rel32ReaderArm); +}; + +// Writer for ARM rel32 References of a specific type. +template <class ADDR_TRAITS> +class Rel32WriterArm : public ReferenceWriter { + public: + using CODE_T = typename ADDR_TRAITS::code_t; + + Rel32WriterArm(const AddressTranslator& translator, + MutableBufferView mutable_view) + : mutable_view_(mutable_view), offset_to_rva_(translator) {} + + void PutNext(Reference ref) override { + CODE_T code = ADDR_TRAITS::Fetch(mutable_view_, ref.location); + rva_t instr_rva = offset_to_rva_.Convert(ref.location); + rva_t target_rva = offset_to_rva_.Convert(ref.target); + if (ADDR_TRAITS::Write(instr_rva, target_rva, &code)) { + ADDR_TRAITS::Store(mutable_view_, ref.location, code); + } else { + LOG(ERROR) << "Write error: " << AsHex<8>(ref.location) << ": " + << AsHex<static_cast<int>(sizeof(CODE_T)) * 2>(code) + << " <= " << AsHex<8>(target_rva) << "."; + } + } + + private: + MutableBufferView mutable_view_; + AddressTranslator::OffsetToRvaCache offset_to_rva_; + + DISALLOW_COPY_AND_ASSIGN(Rel32WriterArm); +}; + +// Type for specialized versions of ArmCopyDisp(). +// TODO(etiennep/huangs): Fold ReferenceByteMixer into Disassembler and remove +// direct function pointer usage. +typedef bool (*ArmCopyDispFun)(ConstBufferView src_view, + offset_t src_idx, + MutableBufferView dst_view, + offset_t dst_idx); + +// Copier that makes |*dst_it| similar to |*src_it| (both assumed to point to +// rel32 instructions of type ADDR_TRAITS) by copying the displacement (i.e., +// payload bits) from |src_it| to |dst_it|. If successful, updates |*dst_it|, +// and returns true. Otherwise returns false. Note that alignment is not an +// issue since the displacement is not translated to target RVA! +template <class ADDR_TRAITS> +bool ArmCopyDisp(ConstBufferView src_view, + offset_t src_idx, + MutableBufferView dst_view, + offset_t dst_idx) { + using CODE_T = typename ADDR_TRAITS::code_t; + CODE_T src_code = ADDR_TRAITS::Fetch(src_view, src_idx); + arm_disp_t disp = 0; + if (ADDR_TRAITS::Decode(src_code, &disp)) { + CODE_T dst_code = ADDR_TRAITS::Fetch(dst_view, dst_idx); + if (ADDR_TRAITS::Encode(disp, &dst_code)) { + ADDR_TRAITS::Store(dst_view, dst_idx, dst_code); + return true; + } + } + return false; +} + } // namespace zucchini #endif // COMPONENTS_ZUCCHINI_REL32_UTILS_H_
diff --git a/components/zucchini/rel32_utils_unittest.cc b/components/zucchini/rel32_utils_unittest.cc index 29e8560..e3d34f4 100644 --- a/components/zucchini/rel32_utils_unittest.cc +++ b/components/zucchini/rel32_utils_unittest.cc
@@ -7,11 +7,13 @@ #include <stdint.h> #include <memory> +#include <utility> #include <vector> #include "base/optional.h" #include "base/test/gtest_util.h" #include "components/zucchini/address_translator.h" +#include "components/zucchini/arm_utils.h" #include "components/zucchini/image_utils.h" #include "testing/gtest/include/gtest/gtest.h" @@ -31,7 +33,7 @@ // Checks that |reader| emits and only emits |expected_refs|, in order. void CheckReader(const std::vector<Reference>& expected_refs, - ReferenceReader* reader) { + std::unique_ptr<ReferenceReader> reader) { for (Reference expected_ref : expected_refs) { auto ref = reader->GetNext(); EXPECT_TRUE(ref.has_value()); @@ -40,6 +42,31 @@ EXPECT_EQ(base::nullopt, reader->GetNext()); // Nothing should be left. } +// Copies displacements from |bytes1| to |bytes2| and checks results against +// |bytes_exp_1_to_2|. Then repeats for |*bytes2| , |*byte1|, and +// |bytes_exp_2_to_1|. Empty expected bytes mean failure is expected. The copy +// function is specified by |copier|. +void CheckCopy(const std::vector<uint8_t>& bytes_exp_1_to_2, + const std::vector<uint8_t>& bytes_exp_2_to_1, + const std::vector<uint8_t>& bytes1, + const std::vector<uint8_t>& bytes2, + ArmCopyDispFun copier) { + auto run_test = [&copier](const std::vector<uint8_t>& bytes_exp, + const std::vector<uint8_t>& bytes_in, + std::vector<uint8_t> bytes_out) { + ConstBufferView buffer_in(&bytes_in[0], bytes_in.size()); + MutableBufferView buffer_out(&bytes_out[0], bytes_out.size()); + if (bytes_exp.empty()) { + EXPECT_FALSE(copier(buffer_in, 0U, buffer_out, 0U)); + } else { + EXPECT_TRUE(copier(buffer_in, 0U, buffer_out, 0U)); + EXPECT_EQ(bytes_exp, bytes_out); + } + }; + run_test(bytes_exp_1_to_2, bytes1, bytes2); + run_test(bytes_exp_2_to_1, bytes2, bytes1); +} + } // namespace TEST(Rel32UtilsTest, Rel32ReaderX86) { @@ -64,24 +91,24 @@ std::vector<offset_t> rel32_locations = {0x0008U, 0x0010U, 0x0018U, 0x001CU}; // Generate everything. - Rel32ReaderX86 reader1(buffer, 0x0000U, 0x0020U, &rel32_locations, - translator); + auto reader1 = std::make_unique<Rel32ReaderX86>(buffer, 0x0000U, 0x0020U, + &rel32_locations, translator); CheckReader({{0x0008U, 0x0010U}, {0x0010U, 0x0014U}, {0x0018U, 0x0010U}, {0x001CU, 0x0004U}}, - &reader1); + std::move(reader1)); // Exclude last. - Rel32ReaderX86 reader2(buffer, 0x0000U, 0x001CU, &rel32_locations, - translator); + auto reader2 = std::make_unique<Rel32ReaderX86>(buffer, 0x0000U, 0x001CU, + &rel32_locations, translator); CheckReader({{0x0008U, 0x0010U}, {0x0010U, 0x0014U}, {0x0018U, 0x0010U}}, - &reader2); + std::move(reader2)); // Only find one. - Rel32ReaderX86 reader3(buffer, 0x000CU, 0x0018U, &rel32_locations, - translator); - CheckReader({{0x0010U, 0x0014U}}, &reader3); + auto reader3 = std::make_unique<Rel32ReaderX86>(buffer, 0x000CU, 0x0018U, + &rel32_locations, translator); + CheckReader({{0x0010U, 0x0014U}}, std::move(reader3)); } TEST(Rel32UtilsTest, Rel32WriterX86) { @@ -118,4 +145,392 @@ bytes); } +TEST(Rel32UtilsTest, Rel32ReaderArm_Arm32) { + constexpr offset_t kTestImageSize = 0x00100000U; + constexpr rva_t kRvaBegin = 0x00030000U; + TestAddressTranslator translator(kTestImageSize, kRvaBegin); + + // A24. + std::vector<uint8_t> bytes = { + 0xFF, 0xFF, 0xFF, 0xFF, // 00030000: (Filler) + 0xFF, 0xFF, 0xFF, 0xFF, // 00030004: (Filler) + 0x00, 0x00, 0x00, 0xEA, // 00030008: B 00030010 ; A24 + 0xFF, 0xFF, 0xFF, 0xFF, // 0003000C: (Filler) + 0xFF, 0xFF, 0xFF, 0xEB, // 00030010: BL 00030014 ; A24 + 0xFF, 0xFF, 0xFF, 0xFF, // 00030014: (Filler) + 0xFC, 0xFF, 0xFF, 0xEB, // 00030018: BL 00030010 ; A24 + 0xF8, 0xFF, 0xFF, 0xEA, // 0003001C: B 00030004 ; A24 + }; + ConstBufferView region(&bytes[0], bytes.size()); + // Specify rel32 locations directly, instead of parsing. + std::vector<offset_t> rel32_locations_A24 = {0x0008U, 0x0010U, 0x0018U, + 0x001CU}; + + // Generate everything. + auto reader1 = + std::make_unique<Rel32ReaderArm<Arm32Rel32Translator::AddrTraits_A24>>( + translator, region, rel32_locations_A24, 0x0000U, 0x0020U); + CheckReader({{0x0008U, 0x0010U}, + {0x0010U, 0x0014U}, + {0x0018U, 0x0010U}, + {0x001CU, 0x0004U}}, + std::move(reader1)); + + // Exclude last. + auto reader2 = + std::make_unique<Rel32ReaderArm<Arm32Rel32Translator::AddrTraits_A24>>( + translator, region, rel32_locations_A24, 0x0000U, 0x001CU); + CheckReader({{0x0008U, 0x0010U}, {0x0010U, 0x0014U}, {0x0018U, 0x0010U}}, + std::move(reader2)); + + // Only find one. + auto reader3 = + std::make_unique<Rel32ReaderArm<Arm32Rel32Translator::AddrTraits_A24>>( + translator, region, rel32_locations_A24, 0x000CU, 0x0018U); + CheckReader({{0x0010U, 0x0014U}}, std::move(reader3)); +} + +TEST(Rel32UtilsTest, Rel32WriterArm_Arm32_Easy) { + constexpr offset_t kTestImageSize = 0x00100000U; + constexpr rva_t kRvaBegin = 0x00030000U; + TestAddressTranslator translator(kTestImageSize, kRvaBegin); + + std::vector<uint8_t> bytes = { + 0xFF, 0xFF, // 00030000: (Filler) + 0x01, 0xDE, // 00030002: B 00030008 ; T8 + 0xFF, 0xFF, 0xFF, 0xFF, // 00030004: (Filler) + 0x01, 0xE0, // 00030008: B 0003000E ; T11 + 0xFF, 0xFF, // 0003000A: (Filler) + 0x80, 0xF3, 0x00, 0x80, // 0003000C: B 00030010 ; T20 + }; + MutableBufferView region(&bytes[0], bytes.size()); + + auto writer1 = + std::make_unique<Rel32WriterArm<Arm32Rel32Translator::AddrTraits_T8>>( + translator, region); + writer1->PutNext({0x0002U, 0x0004U}); + EXPECT_EQ(0xFF, bytes[0x02]); // 00030002: B 00030004 ; T8 + EXPECT_EQ(0xDE, bytes[0x03]); + + writer1->PutNext({0x0002U, 0x000AU}); + EXPECT_EQ(0x02, bytes[0x02]); // 00030002: B 0003000A ; T8 + EXPECT_EQ(0xDE, bytes[0x03]); + + auto writer2 = + std::make_unique<Rel32WriterArm<Arm32Rel32Translator::AddrTraits_T11>>( + translator, region); + writer2->PutNext({0x0008U, 0x0008U}); + EXPECT_EQ(0xFE, bytes[0x08]); // 00030008: B 00030008 ; T11 + EXPECT_EQ(0xE7, bytes[0x09]); + writer2->PutNext({0x0008U, 0x0010U}); + EXPECT_EQ(0x02, bytes[0x08]); // 00030008: B 00030010 ; T11 + EXPECT_EQ(0xE0, bytes[0x09]); + + auto writer3 = + std::make_unique<Rel32WriterArm<Arm32Rel32Translator::AddrTraits_T20>>( + translator, region); + writer3->PutNext({0x000CU, 0x000AU}); + EXPECT_EQ(0xBF, bytes[0x0C]); // 0003000C: B 0003000A ; T20 + EXPECT_EQ(0xF7, bytes[0x0D]); + EXPECT_EQ(0xFD, bytes[0x0E]); + EXPECT_EQ(0xAF, bytes[0x0F]); + writer3->PutNext({0x000CU, 0x0010U}); + EXPECT_EQ(0x80, bytes[0x0C]); // 0003000C: B 00030010 ; T20 + EXPECT_EQ(0xF3, bytes[0x0D]); + EXPECT_EQ(0x00, bytes[0x0E]); + EXPECT_EQ(0x80, bytes[0x0F]); +} + +TEST(Rel32UtilsTest, Rel32WriterArm_Arm32_Hard) { + constexpr offset_t kTestImageSize = 0x10000000U; + constexpr rva_t kRvaBegin = 0x0C030000U; + TestAddressTranslator translator(kTestImageSize, kRvaBegin); + + std::vector<uint8_t> bytes = { + 0xFF, 0xFF, // 0C030000: (Filler) + 0x00, 0xF0, 0x00, 0xB8, // 0C030002: B 0C030006 ; T24 + 0xFF, 0xFF, 0xFF, 0xFF, // 0C030006: (Filler) + 0x00, 0xF0, 0x7A, 0xE8, // 0C03000A: BLX 0C030100 ; T24 + 0xFF, 0xFF, // 0C03000E: (Filler) + 0x00, 0xF0, 0x7A, 0xE8, // 0C030010: BLX 0C030108 ; T24 + }; + MutableBufferView region(&bytes[0], bytes.size()); + + auto writer = + std::make_unique<Rel32WriterArm<Arm32Rel32Translator::AddrTraits_T24>>( + translator, region); + writer->PutNext({0x0002U, 0x0000U}); + EXPECT_EQ(0xFF, bytes[0x02]); // 0C030002: B 0C030000 ; T24 + EXPECT_EQ(0xF7, bytes[0x03]); + EXPECT_EQ(0xFD, bytes[0x04]); + EXPECT_EQ(0xBF, bytes[0x05]); + writer->PutNext({0x0002U, 0x0008U}); + EXPECT_EQ(0x00, bytes[0x02]); // 0C030002: B 0C030008 ; T24 + EXPECT_EQ(0xF0, bytes[0x03]); + EXPECT_EQ(0x01, bytes[0x04]); + EXPECT_EQ(0xB8, bytes[0x05]); + + // BLX complication, with location that's not 4-byte aligned. + writer->PutNext({0x000AU, 0x0010U}); + EXPECT_EQ(0x00, bytes[0x0A]); // 0C03000A: BLX 0C030010 ; T24 + EXPECT_EQ(0xF0, bytes[0x0B]); + EXPECT_EQ(0x02, bytes[0x0C]); + EXPECT_EQ(0xE8, bytes[0x0D]); + writer->PutNext({0x000AU, 0x0100U}); + EXPECT_EQ(0x00, bytes[0x0A]); // 0C03000A: BLX 0C030100 ; T24 + EXPECT_EQ(0xF0, bytes[0x0B]); + EXPECT_EQ(0x7A, bytes[0x0C]); + EXPECT_EQ(0xE8, bytes[0x0D]); + writer->PutNext({0x000AU, 0x0000U}); + EXPECT_EQ(0xFF, bytes[0x0A]); // 0C03000A: BLX 0C030000 ; T24 + EXPECT_EQ(0xF7, bytes[0x0B]); + EXPECT_EQ(0xFA, bytes[0x0C]); + EXPECT_EQ(0xEF, bytes[0x0D]); + + // BLX complication, with location that's 4-byte aligned. + writer->PutNext({0x0010U, 0x0010U}); + EXPECT_EQ(0xFF, bytes[0x10]); // 0C030010: BLX 0C030010 ; T24 + EXPECT_EQ(0xF7, bytes[0x11]); + EXPECT_EQ(0xFE, bytes[0x12]); + EXPECT_EQ(0xEF, bytes[0x13]); + writer->PutNext({0x0010U, 0x0108U}); + EXPECT_EQ(0x00, bytes[0x10]); // 0C030010: BLX 0C030108 ; T24 + EXPECT_EQ(0xF0, bytes[0x11]); + EXPECT_EQ(0x7A, bytes[0x12]); + EXPECT_EQ(0xE8, bytes[0x13]); +} + +// Test BLX encoding A2, which is an ARM instruction that switches to THUMB2, +// and therefore should have 2-byte alignment. +TEST(Rel32UtilsTest, Arm32SwitchToThumb2) { + constexpr offset_t kTestImageSize = 0x10000000U; + constexpr rva_t kRvaBegin = 0x08030000U; + TestAddressTranslator translator(kTestImageSize, kRvaBegin); + + std::vector<uint8_t> bytes = { + 0xFF, 0xFF, 0x00, 0x00, // 08030000: (Filler) + 0x00, 0x00, 0x00, 0xFA, // 08030004: BLX 0803000C ; A24 + }; + MutableBufferView region(&bytes[0], bytes.size()); + + auto writer = + std::make_unique<Rel32WriterArm<Arm32Rel32Translator::AddrTraits_A24>>( + translator, region); + + // To location that's 4-byte aligned. + writer->PutNext({0x0004U, 0x0100U}); + EXPECT_EQ(0x3D, bytes[0x04]); // 08030004: BLX 08030100 ; A24 + EXPECT_EQ(0x00, bytes[0x05]); + EXPECT_EQ(0x00, bytes[0x06]); + EXPECT_EQ(0xFA, bytes[0x07]); + + // To location that's 2-byte aligned but not 4-byte aligned. + writer->PutNext({0x0004U, 0x0052U}); + EXPECT_EQ(0x11, bytes[0x04]); // 08030004: BLX 08030052 ; A24 + EXPECT_EQ(0x00, bytes[0x05]); + EXPECT_EQ(0x00, bytes[0x06]); + EXPECT_EQ(0xFB, bytes[0x07]); + + // Clean slate code. + writer->PutNext({0x0004U, 0x000CU}); + EXPECT_EQ(0x00, bytes[0x04]); // 08030004: BLX 0803000C ; A24 + EXPECT_EQ(0x00, bytes[0x05]); + EXPECT_EQ(0x00, bytes[0x06]); + EXPECT_EQ(0xFA, bytes[0x07]); +} + +TEST(Rel32UtilsTest, ArmCopyDisp_Arm32) { + std::vector<uint8_t> expect_fail; + + // Successful A24. + ArmCopyDispFun copier_A24 = ArmCopyDisp<Arm32Rel32Translator::AddrTraits_A24>; + CheckCopy({0x12, 0x34, 0x56, 0xEB}, // 00000100: BL 0158D150 + {0xA0, 0xC0, 0x0E, 0x2A}, // 00000100: BCS 003B0388 + {0x12, 0x34, 0x56, 0x2A}, // 00000100: BCS 0158D150 + {0xA0, 0xC0, 0x0E, 0xEB}, // 00000100: BL 003B0388 + copier_A24); + + // Successful T8. + ArmCopyDispFun copier_T8 = ArmCopyDisp<Arm32Rel32Translator::AddrTraits_T8>; + CheckCopy({0x12, 0xD5}, // 00000100: BPL 00000128 + {0xAB, 0xD8}, // 00000100: BHI 0000005A + {0x12, 0xD8}, // 00000100: BHI 00000128 + {0xAB, 0xD5}, // 00000100: BPL 0000005A + copier_T8); + + // Successful T11. + ArmCopyDispFun copier_T11 = ArmCopyDisp<Arm32Rel32Translator::AddrTraits_T11>; + CheckCopy({0xF5, 0xE0}, // 00000100: B 000002EE + {0x12, 0xE7}, // 00000100: B FFFFFF28 + {0xF5, 0xE0}, // 00000100: B 000002EE + {0x12, 0xE7}, // 00000100: B FFFFFF28 + copier_T11); + + // Failure if wrong copier is used. + CheckCopy(expect_fail, expect_fail, {0xF5, 0xE0}, {0x12, 0xE7}, copier_T8); + + // Successful T20. + ArmCopyDispFun copier_T20 = ArmCopyDisp<Arm32Rel32Translator::AddrTraits_T20>; + CheckCopy({0x41, 0xF2, 0xA5, 0x88}, // 00000100: BLS.W 0008124E + {0x04, 0xF3, 0x3C, 0xA2}, // 00000100: BGT.W 0004457C + {0x01, 0xF3, 0xA5, 0x88}, // 00000100: BGT.W 0008124E + {0x44, 0xF2, 0x3C, 0xA2}, // 00000100: BLS.W 0004457C + copier_T20); + CheckCopy({0x7F, 0xF6, 0xFF, 0xAF}, // 00000100: BLS.W 00000102 + {0x00, 0xF3, 0x00, 0x80}, // 00000100: BGT.W 00000104 + {0x3F, 0xF7, 0xFF, 0xAF}, // 00000100: BGT.W 00000102 + {0x40, 0xF2, 0x00, 0x80}, // 00000100: BLS.W 00000104 + copier_T20); + + // Failure if wrong copier is used. + CheckCopy(expect_fail, expect_fail, {0x41, 0xF2, 0xA5, 0x88}, + {0x84, 0xF3, 0x3C, 0xA2}, copier_A24); + + // T24: Mix B encoding T4 and BL encoding T1. + ArmCopyDispFun copier_T24 = ArmCopyDisp<Arm32Rel32Translator::AddrTraits_T24>; + CheckCopy({0xFF, 0xF7, 0xFF, 0xFF}, // 00000100: BL 00000102 + {0x00, 0xF0, 0x00, 0x90}, // 00000100: B.W 00C00104 + {0xFF, 0xF7, 0xFF, 0xBF}, // 00000100: B.W 00000102 + {0x00, 0xF0, 0x00, 0xD0}, // 00000100: BL 00C00104 + copier_T24); + + // Mix B encoding T4 and BLX encoding T2. Note that the forward direction + // fails because B's target is invalid for BLX! It's possible to do "best + // effort" copying to reduce diff -- but right now we're not doing this. + CheckCopy(expect_fail, {0x00, 0xF0, 0x00, 0x90}, // 00000100: B.W 00C00104 + {0xFF, 0xF7, 0xFF, 0xBF}, // 00000100: B.W 00000102 + {0x00, 0xF0, 0x00, 0xC0}, // 00000100: BLX 00C00104 + copier_T24); + // Success if ow B's target is valid for BLX. + CheckCopy({0xFF, 0xF7, 0xFE, 0xEF}, // 00000100: BLX 00000100 + {0x00, 0xF0, 0x00, 0x90}, // 00000100: B.W 00C00104 + {0xFF, 0xF7, 0xFE, 0xBF}, // 00000100: B.W 00000100 + {0x00, 0xF0, 0x00, 0xC0}, // 00000100: BLX 00C00104 + copier_T24); +} + +TEST(Rel32UtilsTest, Rel32ReaderArm_AArch64) { + constexpr offset_t kTestImageSize = 0x00100000U; + constexpr rva_t kRvaBegin = 0x00030000U; + TestAddressTranslator translator(kTestImageSize, kRvaBegin); + + std::vector<uint8_t> bytes = { + 0xFF, 0xFF, 0xFF, 0xFF, // 00030000: (Filler) + 0xFF, 0xFF, 0xFF, 0xFF, // 00030004: (Filler) + 0x02, 0x00, 0x00, 0x14, // 00030008: B 00030010 ; Immd26 + 0xFF, 0xFF, 0xFF, 0xFF, // 0003000C: (Filler) + 0x25, 0x00, 0x00, 0x35, // 00030010: CBNZ R5,00030014 ; Immd19 + 0xFF, 0xFF, 0xFF, 0xFF, // 00030014: (Filler) + 0xCA, 0xFF, 0xFF, 0x54, // 00030018: BGE 00030010 ; Immd19 + 0x4C, 0xFF, 0x8F, 0x36, // 0003001C: TBZ X12,#17,00030004 ; Immd14 + }; + MutableBufferView region(&bytes[0], bytes.size()); + + // Generate Immd26. We specify rel32 locations directly. + std::vector<offset_t> rel32_locations_Immd26 = {0x0008U}; + auto reader1 = std::make_unique< + Rel32ReaderArm<AArch64Rel32Translator::AddrTraits_Immd26>>( + translator, region, rel32_locations_Immd26, 0x0000U, 0x0020U); + CheckReader({{0x0008U, 0x0010U}}, std::move(reader1)); + + // Generate Immd19. + std::vector<offset_t> rel32_locations_Immd19 = {0x0010U, 0x0018U}; + auto reader2 = std::make_unique< + Rel32ReaderArm<AArch64Rel32Translator::AddrTraits_Immd19>>( + translator, region, rel32_locations_Immd19, 0x0000U, 0x0020U); + CheckReader({{0x0010U, 0x0014U}, {0x0018U, 0x0010U}}, std::move(reader2)); + + // Generate Immd14. + std::vector<offset_t> rel32_locations_Immd14 = {0x001CU}; + auto reader3 = std::make_unique< + Rel32ReaderArm<AArch64Rel32Translator::AddrTraits_Immd14>>( + translator, region, rel32_locations_Immd14, 0x0000U, 0x0020U); + CheckReader({{0x001CU, 0x0004U}}, std::move(reader3)); +} + +TEST(Rel32UtilsTest, Rel32WriterArm_AArch64) { + constexpr offset_t kTestImageSize = 0x00100000U; + constexpr rva_t kRvaBegin = 0x00030000U; + TestAddressTranslator translator(kTestImageSize, kRvaBegin); + + std::vector<uint8_t> bytes = { + 0xFF, 0xFF, 0xFF, 0xFF, // 00030000: (Filler) + 0xFF, 0xFF, 0xFF, 0xFF, // 00030004: (Filler) + 0x02, 0x00, 0x00, 0x14, // 00030008: B 00030010 ; Immd26 + 0xFF, 0xFF, 0xFF, 0xFF, // 0003000C: (Filler) + 0x25, 0x00, 0x00, 0x35, // 00030010: CBNZ R5,00030014 ; Immd19 + 0xFF, 0xFF, 0xFF, 0xFF, // 00030014: (Filler) + 0xCA, 0xFF, 0xFF, 0x54, // 00030018: BGE 00030010 ; Immd19 + 0x4C, 0xFF, 0x8F, 0x36, // 0003001C: TBZ X12,#17,00030004 ; Immd14 + }; + MutableBufferView region(&bytes[0], bytes.size()); + + auto writer1 = std::make_unique< + Rel32WriterArm<AArch64Rel32Translator::AddrTraits_Immd26>>(translator, + region); + writer1->PutNext({0x0008U, 0x0000U}); + EXPECT_EQ(0xFE, bytes[0x08]); // 00030008: B 00030000 ; Immd26 + EXPECT_EQ(0xFF, bytes[0x09]); + EXPECT_EQ(0xFF, bytes[0x0A]); + EXPECT_EQ(0x17, bytes[0x0B]); + + auto writer2 = std::make_unique< + Rel32WriterArm<AArch64Rel32Translator::AddrTraits_Immd19>>(translator, + region); + writer2->PutNext({0x0010U, 0x0000U}); + EXPECT_EQ(0x85, bytes[0x10]); // 00030010: CBNZ R5,00030000 ; Immd19 + EXPECT_EQ(0xFF, bytes[0x11]); + EXPECT_EQ(0xFF, bytes[0x12]); + EXPECT_EQ(0x35, bytes[0x13]); + writer2->PutNext({0x0018U, 0x001CU}); + EXPECT_EQ(0x2A, bytes[0x18]); // 00030018: BGE 0003001C ; Immd19 + EXPECT_EQ(0x00, bytes[0x19]); + EXPECT_EQ(0x00, bytes[0x1A]); + EXPECT_EQ(0x54, bytes[0x1B]); + + auto writer3 = std::make_unique< + Rel32WriterArm<AArch64Rel32Translator::AddrTraits_Immd14>>(translator, + region); + writer3->PutNext({0x001CU, 0x0010U}); + EXPECT_EQ(0xAC, bytes[0x1C]); // 0003001C: TBZ X12,#17,00030010 ; Immd14 + EXPECT_EQ(0xFF, bytes[0x1D]); + EXPECT_EQ(0x8F, bytes[0x1E]); + EXPECT_EQ(0x36, bytes[0x1F]); +} + +TEST(Rel32UtilsTest, ArmCopyDisp_AArch64) { + std::vector<uint8_t> expect_fail; + + // Successful Imm26. + ArmCopyDispFun copier_Immd26 = + ArmCopyDisp<AArch64Rel32Translator::AddrTraits_Immd26>; + CheckCopy({0x12, 0x34, 0x56, 0x94}, // 00000100: BL 0158D148 + {0xA1, 0xC0, 0x0E, 0x17}, // 00000100: B FC3B0384 + {0x12, 0x34, 0x56, 0x14}, // 00000100: B 0158D148 + {0xA1, 0xC0, 0x0E, 0x97}, // 00000100: BL FC3B0384 + copier_Immd26); + + // Successful Imm19. + ArmCopyDispFun copier_Immd19 = + ArmCopyDisp<AArch64Rel32Translator::AddrTraits_Immd19>; + CheckCopy({0x24, 0x12, 0x34, 0x54}, // 00000100: BMI 00068344 + {0xD7, 0xA5, 0xFC, 0xB4}, // 00000100: CBZ X23,FFFF95B8 + {0x37, 0x12, 0x34, 0xB4}, // 00000100: CBZ X23,00068344 + {0xC4, 0xA5, 0xFC, 0x54}, // 00000100: BMI FFFF95B8 + copier_Immd19); + + // Successful Imm14. + ArmCopyDispFun copier_Immd14 = + ArmCopyDisp<AArch64Rel32Translator::AddrTraits_Immd14>; + CheckCopy({0x00, 0x00, 0x00, 0x36}, // 00000100: TBZ X0,#0,00000100 + {0xFF, 0xFF, 0xFF, 0xB7}, // 00000100: TBNZ ZR,#63,000000FC + {0x1F, 0x00, 0xF8, 0xB7}, // 00000100: TBNZ ZR,#63,00000100 + {0xE0, 0xFF, 0x07, 0x36}, // 00000100: TBZ X0,#0,000000FC + copier_Immd14); + + // Failure if wrong copier is used. + CheckCopy(expect_fail, expect_fail, {0x1F, 0x00, 0xF8, 0xB7}, + {0xE0, 0xFF, 0x07, 0x36}, copier_Immd26); +} + } // namespace zucchini
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index 46d8b92c..9bcbb0a 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -1288,8 +1288,6 @@ "permissions/permission_service_impl.h", "picture_in_picture/overlay_surface_embedder.cc", "picture_in_picture/overlay_surface_embedder.h", - "picture_in_picture/picture_in_picture_service_impl.cc", - "picture_in_picture/picture_in_picture_service_impl.h", "picture_in_picture/picture_in_picture_window_controller_impl.cc", "picture_in_picture/picture_in_picture_window_controller_impl.h", "portal/portal.cc",
diff --git a/content/browser/accessibility/accessibility_win_browsertest.cc b/content/browser/accessibility/accessibility_win_browsertest.cc index ff6f11d..12d8e998 100644 --- a/content/browser/accessibility/accessibility_win_browsertest.cc +++ b/content/browser/accessibility/accessibility_win_browsertest.cc
@@ -1981,6 +1981,69 @@ EXPECT_EQ(kContentsLength, end_offset); } +IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, + DISABLED_TestSetSelectionRanges) { + Microsoft::WRL::ComPtr<IAccessibleText> input_text; + SetUpInputField(&input_text); + Microsoft::WRL::ComPtr<IAccessible2_4> ax_input; + ASSERT_HRESULT_SUCCEEDED(input_text.CopyTo(IID_PPV_ARGS(&ax_input))); + + LONG n_ranges = 1; + IA2Range* ranges = + reinterpret_cast<IA2Range*>(CoTaskMemAlloc(sizeof(IA2Range))); + ranges[0].anchor = ax_input.Get(); + ranges[0].anchorOffset = -1; + ranges[0].active = ax_input.Get(); + ranges[0].activeOffset = kContentsLength; + EXPECT_HRESULT_FAILED(ax_input->setSelectionRanges(n_ranges, ranges)); + ranges[0].anchorOffset = 0; + ranges[0].activeOffset = kContentsLength + 1; + EXPECT_HRESULT_FAILED(ax_input->setSelectionRanges(n_ranges, ranges)); + + ranges[0].activeOffset = kContentsLength; + AccessibilityNotificationWaiter waiter( + shell()->web_contents(), ui::kAXModeComplete, + ax::mojom::Event::kTextSelectionChanged); + EXPECT_HRESULT_SUCCEEDED(ax_input->setSelectionRanges(n_ranges, ranges)); + waiter.WaitForNotification(); + CoTaskMemFree(ranges); + ranges = nullptr; + n_ranges = 0; + + HRESULT hr = ax_input->get_selectionRanges(&ranges, &n_ranges); + EXPECT_EQ(S_OK, hr); + EXPECT_EQ(1, n_ranges); + ASSERT_NE(nullptr, ranges); + EXPECT_EQ(ax_input.Get(), ranges[0].anchor); + EXPECT_EQ(0, ranges[0].anchorOffset); + EXPECT_EQ(ax_input.Get(), ranges[0].active); + EXPECT_EQ(kContentsLength, ranges[0].activeOffset); + + n_ranges = 1; + ranges = + reinterpret_cast<IA2Range*>(CoTaskMemRealloc(ranges, sizeof(IA2Range))); + ranges[0].anchor = ax_input.Get(); + ranges[0].anchorOffset = kContentsLength; + ranges[0].active = ax_input.Get(); + ranges[0].activeOffset = 1; + EXPECT_HRESULT_SUCCEEDED(ax_input->setSelectionRanges(n_ranges, ranges)); + waiter.WaitForNotification(); + CoTaskMemFree(ranges); + ranges = nullptr; + n_ranges = 0; + + hr = ax_input->get_selectionRanges(&ranges, &n_ranges); + EXPECT_EQ(S_OK, hr); + EXPECT_EQ(1, n_ranges); + ASSERT_NE(nullptr, ranges); + EXPECT_EQ(ax_input.Get(), ranges[0].anchor); + EXPECT_EQ(kContentsLength, ranges[0].anchorOffset); + EXPECT_EQ(ax_input.Get(), ranges[0].active); + EXPECT_EQ(1, ranges[0].activeOffset); + CoTaskMemFree(ranges); + ranges = nullptr; +} + IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, TestMultiLineSetSelection) { Microsoft::WRL::ComPtr<IAccessibleText> textarea_text; SetUpTextareaField(&textarea_text); @@ -2022,6 +2085,69 @@ } IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, + DISABLED_TestMultiLineSetSelectionRanges) { + Microsoft::WRL::ComPtr<IAccessibleText> textarea_text; + SetUpTextareaField(&textarea_text); + Microsoft::WRL::ComPtr<IAccessible2_4> ax_textarea; + ASSERT_HRESULT_SUCCEEDED(textarea_text.CopyTo(IID_PPV_ARGS(&ax_textarea))); + + LONG n_ranges = 1; + IA2Range* ranges = + reinterpret_cast<IA2Range*>(CoTaskMemAlloc(sizeof(IA2Range))); + ranges[0].anchor = ax_textarea.Get(); + ranges[0].anchorOffset = -1; + ranges[0].active = ax_textarea.Get(); + ranges[0].activeOffset = kContentsLength; + EXPECT_HRESULT_FAILED(ax_textarea->setSelectionRanges(n_ranges, ranges)); + ranges[0].anchorOffset = 0; + ranges[0].activeOffset = kContentsLength + 1; + EXPECT_HRESULT_FAILED(ax_textarea->setSelectionRanges(n_ranges, ranges)); + + ranges[0].activeOffset = kContentsLength; + AccessibilityNotificationWaiter waiter( + shell()->web_contents(), ui::kAXModeComplete, + ax::mojom::Event::kTextSelectionChanged); + EXPECT_HRESULT_SUCCEEDED(ax_textarea->setSelectionRanges(n_ranges, ranges)); + waiter.WaitForNotification(); + CoTaskMemFree(ranges); + ranges = nullptr; + n_ranges = 0; + + HRESULT hr = ax_textarea->get_selectionRanges(&ranges, &n_ranges); + EXPECT_EQ(S_OK, hr); + EXPECT_EQ(1, n_ranges); + ASSERT_NE(nullptr, ranges); + EXPECT_EQ(ax_textarea.Get(), ranges[0].anchor); + EXPECT_EQ(0, ranges[0].anchorOffset); + EXPECT_EQ(ax_textarea.Get(), ranges[0].active); + EXPECT_EQ(kContentsLength, ranges[0].activeOffset); + + n_ranges = 1; + ranges = + reinterpret_cast<IA2Range*>(CoTaskMemRealloc(ranges, sizeof(IA2Range))); + ranges[0].anchor = ax_textarea.Get(); + ranges[0].anchorOffset = kContentsLength - 1; + ranges[0].active = ax_textarea.Get(); + ranges[0].activeOffset = 0; + EXPECT_HRESULT_SUCCEEDED(ax_textarea->setSelectionRanges(n_ranges, ranges)); + waiter.WaitForNotification(); + CoTaskMemFree(ranges); + ranges = nullptr; + n_ranges = 0; + + hr = ax_textarea->get_selectionRanges(&ranges, &n_ranges); + EXPECT_EQ(S_OK, hr); + EXPECT_EQ(1, n_ranges); + ASSERT_NE(nullptr, ranges); + EXPECT_EQ(ax_textarea.Get(), ranges[0].anchor); + EXPECT_EQ(kContentsLength - 1, ranges[0].anchorOffset); + EXPECT_EQ(ax_textarea.Get(), ranges[0].active); + EXPECT_EQ(0, ranges[0].activeOffset); + CoTaskMemFree(ranges); + ranges = nullptr; +} + +IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, TestStaticTextSetSelection) { Microsoft::WRL::ComPtr<IAccessibleText> paragraph_text; SetUpSampleParagraph(¶graph_text); @@ -2060,6 +2186,73 @@ } IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, + DISABLED_TestStaticTextSetSelectionRanges) { + Microsoft::WRL::ComPtr<IAccessibleText> paragraph_text; + SetUpSampleParagraph(¶graph_text); + Microsoft::WRL::ComPtr<IAccessible2_4> ax_paragraph; + ASSERT_HRESULT_SUCCEEDED(paragraph_text.CopyTo(IID_PPV_ARGS(&ax_paragraph))); + + LONG child_count = 0; + ASSERT_HRESULT_SUCCEEDED(ax_paragraph->get_accChildCount(&child_count)); + ASSERT_LT(0, child_count); + + LONG n_ranges = 1; + IA2Range* ranges = + reinterpret_cast<IA2Range*>(CoTaskMemAlloc(sizeof(IA2Range))); + ranges[0].anchor = ax_paragraph.Get(); + ranges[0].anchorOffset = -1; + ranges[0].active = ax_paragraph.Get(); + ranges[0].activeOffset = child_count; + EXPECT_HRESULT_FAILED(ax_paragraph->setSelectionRanges(n_ranges, ranges)); + ranges[0].anchorOffset = 0; + ranges[0].activeOffset = child_count + 1; + EXPECT_HRESULT_FAILED(ax_paragraph->setSelectionRanges(n_ranges, ranges)); + + ranges[0].activeOffset = child_count; + AccessibilityNotificationWaiter waiter( + shell()->web_contents(), ui::kAXModeComplete, + ax::mojom::Event::kDocumentSelectionChanged); + EXPECT_HRESULT_SUCCEEDED(ax_paragraph->setSelectionRanges(n_ranges, ranges)); + waiter.WaitForNotification(); + CoTaskMemFree(ranges); + ranges = nullptr; + n_ranges = 0; + + HRESULT hr = ax_paragraph->get_selectionRanges(&ranges, &n_ranges); + EXPECT_EQ(S_OK, hr); + EXPECT_EQ(1, n_ranges); + ASSERT_NE(nullptr, ranges); + EXPECT_EQ(ax_paragraph.Get(), ranges[0].anchor); + EXPECT_EQ(0, ranges[0].anchorOffset); + EXPECT_EQ(ax_paragraph.Get(), ranges[0].active); + EXPECT_EQ(child_count, ranges[0].activeOffset); + + n_ranges = 1; + ranges = + reinterpret_cast<IA2Range*>(CoTaskMemRealloc(ranges, sizeof(IA2Range))); + ranges[0].anchor = ax_paragraph.Get(); + ranges[0].anchorOffset = child_count - 1; + ranges[0].active = ax_paragraph.Get(); + ranges[0].activeOffset = 0; + EXPECT_HRESULT_SUCCEEDED(ax_paragraph->setSelectionRanges(n_ranges, ranges)); + waiter.WaitForNotification(); + CoTaskMemFree(ranges); + ranges = nullptr; + n_ranges = 0; + + hr = ax_paragraph->get_selectionRanges(&ranges, &n_ranges); + EXPECT_EQ(S_OK, hr); + EXPECT_EQ(1, n_ranges); + ASSERT_NE(nullptr, ranges); + EXPECT_EQ(ax_paragraph.Get(), ranges[0].anchor); + EXPECT_EQ(kContentsLength - 1, ranges[0].anchorOffset); + EXPECT_EQ(ax_paragraph.Get(), ranges[0].active); + EXPECT_EQ(0, ranges[0].activeOffset); + CoTaskMemFree(ranges); + ranges = nullptr; +} + +IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, TestTextAtOffsetWithInvalidArguments) { Microsoft::WRL::ComPtr<IAccessibleText> input_text; SetUpInputField(&input_text);
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc index 8ca8828b..4cbb5aa 100644 --- a/content/browser/accessibility/browser_accessibility.cc +++ b/content/browser/accessibility/browser_accessibility.cc
@@ -1231,6 +1231,9 @@ case ax::mojom::Action::kScrollToMakeVisible: manager_->ScrollToMakeVisible(*this, data.target_rect); return true; + case ax::mojom::Action::kSetSelection: + manager_->SetSelection(data); + return true; case ax::mojom::Action::kSetValue: manager_->SetValue(*this, data.value); return true;
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc index 0116955..d719009d 100644 --- a/content/browser/accessibility/browser_accessibility_manager.cc +++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -667,7 +667,15 @@ delegate_->AccessibilityPerformAction(action_data); } -void BrowserAccessibilityManager::SetSelection(AXPlatformRange range) { +void BrowserAccessibilityManager::SetSelection( + const ui::AXActionData& action_data) { + if (!delegate_) + return; + delegate_->AccessibilityPerformAction(action_data); +} + +void BrowserAccessibilityManager::SetSelection( + const BrowserAccessibilityRange& range) { if (!delegate_ || range.IsNull()) return;
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h index a1a0472..84bbe6e0 100644 --- a/content/browser/accessibility/browser_accessibility_manager.h +++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -113,6 +113,12 @@ // Manages a tree of BrowserAccessibility objects. class CONTENT_EXPORT BrowserAccessibilityManager : public ui::AXTreeObserver { + protected: + using BrowserAccessibilityPositionInstance = + BrowserAccessibilityPosition::AXPositionInstance; + using BrowserAccessibilityRange = + ui::AXRange<BrowserAccessibilityPositionInstance::element_type>; + public: // Creates the platform-specific BrowserAccessibilityManager, but // with no parent window pointer. Only useful for unit tests. @@ -220,10 +226,8 @@ void SetFocus(const BrowserAccessibility& node); void SetScrollOffset(const BrowserAccessibility& node, gfx::Point offset); void SetValue(const BrowserAccessibility& node, const std::string& value); - void SetSelection( - ui::AXRange< - BrowserAccessibilityPosition::AXPositionInstance::element_type> - range); + void SetSelection(const ui::AXActionData& action_data); + void SetSelection(const BrowserAccessibilityRange& range); void ShowContextMenu(const BrowserAccessibility& node); // Retrieve the bounds of the parent View in screen coordinates. @@ -385,11 +389,6 @@ void CacheHitTestResult(BrowserAccessibility* hit_test_result); protected: - using BrowserAccessibilityPositionInstance = - BrowserAccessibilityPosition::AXPositionInstance; - using AXPlatformRange = - ui::AXRange<BrowserAccessibilityPositionInstance::element_type>; - BrowserAccessibilityManager( BrowserAccessibilityDelegate* delegate, BrowserAccessibilityFactory* factory);
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 62c0957..36b893e 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -73,7 +73,6 @@ #include "content/browser/permissions/permission_controller_impl.h" #include "content/browser/permissions/permission_service_context.h" #include "content/browser/permissions/permission_service_impl.h" -#include "content/browser/picture_in_picture/picture_in_picture_service_impl.h" #include "content/browser/portal/portal.h" #include "content/browser/presentation/presentation_service_impl.h" #include "content/browser/quota_dispatcher_host.h" @@ -4084,9 +4083,6 @@ registry_->AddInterface(base::BindRepeating(&WakeLockServiceImpl::Create, base::Unretained(this))); - - registry_->AddInterface(base::BindRepeating( - &PictureInPictureServiceImpl::Create, base::Unretained(this))); } void RenderFrameHostImpl::ResetWaitingState() { @@ -5657,7 +5653,7 @@ } void RenderFrameHostImpl::CreateDedicatedWorkerHostFactory( - blink::mojom::DedicatedWorkerFactoryRequest request) { + blink::mojom::DedicatedWorkerHostFactoryRequest request) { content::CreateDedicatedWorkerHostFactory(process_->GetID(), routing_id_, last_committed_origin_, std::move(request));
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index deb7dc5..5c720af 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -72,7 +72,7 @@ #include "third_party/blink/public/mojom/frame/navigation_initiator.mojom.h" #include "third_party/blink/public/mojom/presentation/presentation.mojom.h" #include "third_party/blink/public/mojom/serial/serial.mojom.h" -#include "third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom.h" +#include "third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom.h" #include "third_party/blink/public/platform/modules/bluetooth/web_bluetooth.mojom.h" #include "third_party/blink/public/platform/modules/webauthn/authenticator.mojom.h" #include "third_party/blink/public/platform/web_focus_type.h" @@ -1285,7 +1285,7 @@ void CreateWebSocket(network::mojom::WebSocketRequest request); void CreateDedicatedWorkerHostFactory( - blink::mojom::DedicatedWorkerFactoryRequest request); + blink::mojom::DedicatedWorkerHostFactoryRequest request); // Callback for connection error on the media::mojom::InterfaceFactory client. void OnMediaInterfaceFactoryConnectionError();
diff --git a/content/browser/media/media_web_contents_observer.cc b/content/browser/media/media_web_contents_observer.cc index 740bdc6..6e29f3c 100644 --- a/content/browser/media/media_web_contents_observer.cc +++ b/content/browser/media/media_web_contents_observer.cc
@@ -77,6 +77,11 @@ picture_in_picture_allowed_in_fullscreen_.reset(); fullscreen_player_.reset(); } + + // Usually the frame will exit PIP before it is deleted but for OOPIF, it + // seems that the player never notifies the browser process. + if (pip_player_ && pip_player_->render_frame_host == render_frame_host) + ExitPictureInPictureInternal(); } void MediaWebContentsObserver::MaybeUpdateAudibleState() { @@ -115,6 +120,15 @@ return fullscreen_player_; } +const base::Optional<WebContentsObserver::MediaPlayerId>& +MediaWebContentsObserver::GetPictureInPictureVideoMediaPlayerId() const { + return pip_player_; +} + +void MediaWebContentsObserver::ResetPictureInPictureVideoMediaPlayerId() { + pip_player_.reset(); +} + bool MediaWebContentsObserver::OnMessageReceived( const IPC::Message& msg, RenderFrameHost* render_frame_host) { @@ -134,8 +148,16 @@ IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnMediaSizeChanged, OnMediaSizeChanged) IPC_MESSAGE_HANDLER( + MediaPlayerDelegateHostMsg_OnPictureInPictureModeStarted, + OnPictureInPictureModeStarted) + IPC_MESSAGE_HANDLER(MediaPlayerDelegateHostMsg_OnPictureInPictureModeEnded, + OnPictureInPictureModeEnded) + IPC_MESSAGE_HANDLER( MediaPlayerDelegateHostMsg_OnSetPictureInPictureCustomControls, OnSetPictureInPictureCustomControls) + IPC_MESSAGE_HANDLER( + MediaPlayerDelegateHostMsg_OnPictureInPictureSurfaceChanged, + OnPictureInPictureSurfaceChanged) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; @@ -165,6 +187,16 @@ return MediaPlayerEntryExists(player_id, active_audio_players_); } +void MediaWebContentsObserver::OnPictureInPictureWindowResize( + const gfx::Size& window_size) { + DCHECK(pip_player_.has_value()); + + pip_player_->render_frame_host->Send( + new MediaPlayerDelegateMsg_OnPictureInPictureWindowResize( + pip_player_->render_frame_host->GetRoutingID(), + pip_player_->delegate_id, window_size)); +} + void MediaWebContentsObserver::OnMediaDestroyed( RenderFrameHost* render_frame_host, int delegate_id) { @@ -180,6 +212,16 @@ const bool removed_video = RemoveMediaPlayerEntry(player_id, &active_video_players_); + if (!web_contents()->IsBeingDestroyed() && pip_player_ == player_id) { + PictureInPictureWindowControllerImpl* pip_controller = + PictureInPictureWindowControllerImpl::FromWebContents( + web_contents_impl()); + if (pip_controller) { + pip_controller->UpdatePlaybackState(false /* is not playing */, + reached_end_of_stream); + } + } + if (removed_audio || removed_video) { // Notify observers the player has been "paused". web_contents_impl()->MediaStoppedPlaying( @@ -221,6 +263,16 @@ return; } + if (!web_contents()->IsBeingDestroyed() && pip_player_ == id) { + PictureInPictureWindowControllerImpl* pip_controller = + PictureInPictureWindowControllerImpl::FromWebContents( + web_contents_impl()); + if (pip_controller) { + pip_controller->UpdatePlaybackState(true /* is not playing */, + false /* reached_end_of_stream */); + } + } + // Notify observers of the new player. web_contents_impl()->MediaStartedPlaying( WebContentsObserver::MediaPlayerInfo(has_video, has_audio), id); @@ -265,6 +317,41 @@ web_contents_impl()->MediaResized(size, id); } +void MediaWebContentsObserver::OnPictureInPictureModeStarted( + RenderFrameHost* render_frame_host, + int delegate_id, + const viz::SurfaceId& surface_id, + const gfx::Size& natural_size, + int request_id, + bool show_play_pause_button) { + DCHECK(surface_id.is_valid()); + pip_player_ = MediaPlayerId(render_frame_host, delegate_id); + + gfx::Size window_size = + web_contents_impl()->EnterPictureInPicture(surface_id, natural_size); + + if (auto* pip_controller = + PictureInPictureWindowControllerImpl::FromWebContents( + web_contents_impl())) + pip_controller->SetAlwaysHidePlayPauseButton(show_play_pause_button); + + render_frame_host->Send( + new MediaPlayerDelegateMsg_OnPictureInPictureModeStarted_ACK( + render_frame_host->GetRoutingID(), delegate_id, request_id, + window_size)); +} + +void MediaWebContentsObserver::OnPictureInPictureModeEnded( + RenderFrameHost* render_frame_host, + int delegate_id, + int request_id) { + ExitPictureInPictureInternal(); + + render_frame_host->Send( + new MediaPlayerDelegateMsg_OnPictureInPictureModeEnded_ACK( + render_frame_host->GetRoutingID(), delegate_id, request_id)); +} + void MediaWebContentsObserver::OnSetPictureInPictureCustomControls( RenderFrameHost* render_frame_host, int delegate_id, @@ -276,6 +363,26 @@ pip_controller->SetPictureInPictureCustomControls(controls); } +void MediaWebContentsObserver::OnPictureInPictureSurfaceChanged( + RenderFrameHost* render_frame_host, + int delegate_id, + const viz::SurfaceId& surface_id, + const gfx::Size& natural_size, + bool show_play_pause_button) { + DCHECK(surface_id.is_valid()); + + pip_player_ = MediaPlayerId(render_frame_host, delegate_id); + + // The PictureInPictureWindowController instance may not have been created by + // the embedder. + if (auto* pip_controller = + PictureInPictureWindowControllerImpl::FromWebContents( + web_contents_impl())) { + pip_controller->EmbedSurface(surface_id, natural_size); + pip_controller->SetAlwaysHidePlayPauseButton(show_play_pause_button); + } +} + void MediaWebContentsObserver::ClearWakeLocks( RenderFrameHost* render_frame_host) { std::set<MediaPlayerId> video_players; @@ -375,6 +482,16 @@ player_map->erase(it); } +void MediaWebContentsObserver::ExitPictureInPictureInternal() { + DCHECK(pip_player_); + + web_contents_impl()->ExitPictureInPicture(); + + // Reset must happen after notifying the WebContents because it may interact + // with it. + ResetPictureInPictureVideoMediaPlayerId(); +} + WebContentsImpl* MediaWebContentsObserver::web_contents_impl() const { return static_cast<WebContentsImpl*>(web_contents()); }
diff --git a/content/browser/media/media_web_contents_observer.h b/content/browser/media/media_web_contents_observer.h index 788c018..d1eb2af 100644 --- a/content/browser/media/media_web_contents_observer.h +++ b/content/browser/media/media_web_contents_observer.h
@@ -34,6 +34,10 @@ class Size; } // namespace size +namespace viz { +class SurfaceId; +} // namespace viz + namespace content { class AudibleMetrics; @@ -68,6 +72,14 @@ // Gets the MediaPlayerId of the fullscreen video if it exists. const base::Optional<MediaPlayerId>& GetFullscreenVideoMediaPlayerId() const; + // Gets the MediaPlayerId of the picture in picture video if it exists. + const base::Optional<MediaPlayerId>& GetPictureInPictureVideoMediaPlayerId() + const; + + // Reset the MediaPlayerId of the picture in picture video when user closes + // Picture-in-Picture window manually. + void ResetPictureInPictureVideoMediaPlayerId(); + // WebContentsObserver implementation. void WebContentsDestroyed() override; void RenderFrameDeleted(RenderFrameHost* render_frame_host) override; @@ -84,6 +96,11 @@ // Returns whether or not the given player id is active. bool IsPlayerActive(const MediaPlayerId& player_id) const; + // Called by the Picture-in-Picture controller when the associated window is + // resized. |window_size| represents the new size of the window. It MUST be + // called when there is a player in Picture-in-Picture. + void OnPictureInPictureWindowResize(const gfx::Size& window_size); + bool has_audio_wake_lock_for_testing() const { return has_audio_wake_lock_for_testing_; } @@ -118,10 +135,24 @@ void OnMediaMutedStatusChanged(RenderFrameHost* render_frame_host, int delegate_id, bool muted); + void OnPictureInPictureModeStarted(RenderFrameHost* render_frame_host, + int delegate_id, + const viz::SurfaceId&, + const gfx::Size& natural_size, + int request_id, + bool show_play_pause_button); + void OnPictureInPictureModeEnded(RenderFrameHost* render_frame_host, + int delegate_id, + int request_id); void OnSetPictureInPictureCustomControls( RenderFrameHost* render_frame_host, int delegate_id, const std::vector<blink::PictureInPictureControlInfo>& controls); + void OnPictureInPictureSurfaceChanged(RenderFrameHost*, + int delegate_id, + const viz::SurfaceId&, + const gfx::Size&, + bool show_play_pause_button); // Clear |render_frame_host|'s tracking entry for its WakeLocks. void ClearWakeLocks(RenderFrameHost* render_frame_host); @@ -145,6 +176,10 @@ ActiveMediaPlayerMap* player_map, std::set<MediaPlayerId>* removed_players); + // Internal method to exit Picture-in-Picture from an event received from the + // renderer process. + void ExitPictureInPictureInternal(); + // Convenience method that casts web_contents() to a WebContentsImpl*. WebContentsImpl* web_contents_impl() const; @@ -156,6 +191,7 @@ ActiveMediaPlayerMap active_video_players_; device::mojom::WakeLockPtr audio_wake_lock_; base::Optional<MediaPlayerId> fullscreen_player_; + base::Optional<MediaPlayerId> pip_player_; base::Optional<bool> picture_in_picture_allowed_in_fullscreen_; bool has_audio_wake_lock_for_testing_ = false;
diff --git a/content/browser/picture_in_picture/picture_in_picture_service_impl.cc b/content/browser/picture_in_picture/picture_in_picture_service_impl.cc deleted file mode 100644 index 4d3bc41b..0000000 --- a/content/browser/picture_in_picture/picture_in_picture_service_impl.cc +++ /dev/null
@@ -1,130 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "content/browser/picture_in_picture/picture_in_picture_service_impl.h" - -#include <utility> - -#include "content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h" -#include "content/browser/web_contents/web_contents_impl.h" - -namespace content { - -// static -void PictureInPictureServiceImpl::Create( - RenderFrameHost* render_frame_host, - blink::mojom::PictureInPictureServiceRequest request) { - DCHECK(render_frame_host); - new PictureInPictureServiceImpl(render_frame_host, std::move(request)); -} - -// static -PictureInPictureServiceImpl* PictureInPictureServiceImpl::CreateForTesting( - RenderFrameHost* render_frame_host, - blink::mojom::PictureInPictureServiceRequest request) { - return new PictureInPictureServiceImpl(render_frame_host, std::move(request)); -} - -void PictureInPictureServiceImpl::StartSession( - uint32_t player_id, - const base::Optional<viz::SurfaceId>& surface_id, - const gfx::Size& natural_size, - bool show_play_pause_button, - StartSessionCallback callback) { - player_id_ = MediaPlayerId(render_frame_host_, player_id); - - auto* pip_controller = GetController(); - if (pip_controller) - pip_controller->set_service(this); - - gfx::Size window_size = web_contents_impl()->EnterPictureInPicture( - surface_id.value(), natural_size); - - if (pip_controller) - pip_controller->SetAlwaysHidePlayPauseButton(show_play_pause_button); - - std::move(callback).Run(window_size); -} - -void PictureInPictureServiceImpl::EndSession(EndSessionCallback callback) { - DCHECK(player_id_); - - ExitPictureInPictureInternal(); - - std::move(callback).Run(); -} - -void PictureInPictureServiceImpl::UpdateSession( - uint32_t player_id, - const base::Optional<viz::SurfaceId>& surface_id, - const gfx::Size& natural_size, - bool show_play_pause_button) { - player_id_ = MediaPlayerId(render_frame_host_, player_id); - - // The PictureInPictureWindowController instance may not have been created by - // the embedder. - if (auto* pip_controller = GetController()) { - pip_controller->EmbedSurface(surface_id.value(), natural_size); - pip_controller->SetAlwaysHidePlayPauseButton(show_play_pause_button); - pip_controller->set_service(this); - } -} - -void PictureInPictureServiceImpl::SetDelegate( - blink::mojom::PictureInPictureDelegatePtr delegate) { - delegate.set_connection_error_handler( - base::BindOnce(&PictureInPictureServiceImpl::OnDelegateDisconnected, - // delegate is held by |this|. - base::Unretained(this))); - - if (delegate_) - mojo::ReportBadMessage("SetDelegate() should only be called once."); - - delegate_ = std::move(delegate); -} - -void PictureInPictureServiceImpl::NotifyWindowResized(const gfx::Size& size) { - if (delegate_) - delegate_->PictureInPictureWindowSizeChanged(size); -} - -PictureInPictureServiceImpl::PictureInPictureServiceImpl( - RenderFrameHost* render_frame_host, - blink::mojom::PictureInPictureServiceRequest request) - : FrameServiceBase(render_frame_host, std::move(request)), - render_frame_host_(render_frame_host) {} - -PictureInPictureServiceImpl::~PictureInPictureServiceImpl() { - if (player_id_) - ExitPictureInPictureInternal(); - if (GetController()) - GetController()->set_service(nullptr); -} - -PictureInPictureWindowControllerImpl* -PictureInPictureServiceImpl::GetController() { - return PictureInPictureWindowControllerImpl::GetOrCreateForWebContents( - web_contents_impl()); -} - -void PictureInPictureServiceImpl::OnDelegateDisconnected() { - delegate_ = nullptr; -} - -void PictureInPictureServiceImpl::ExitPictureInPictureInternal() { - web_contents_impl()->ExitPictureInPicture(); - - // Reset must happen after notifying the WebContents because it may interact - // with it. - player_id_.reset(); - - if (auto* controller = GetController()) - controller->set_service(nullptr); -} - -WebContentsImpl* PictureInPictureServiceImpl::web_contents_impl() { - return static_cast<WebContentsImpl*>(web_contents()); -} - -} // namespace content
diff --git a/content/browser/picture_in_picture/picture_in_picture_service_impl.h b/content/browser/picture_in_picture/picture_in_picture_service_impl.h deleted file mode 100644 index 28710e3..0000000 --- a/content/browser/picture_in_picture/picture_in_picture_service_impl.h +++ /dev/null
@@ -1,78 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CONTENT_BROWSER_PICTURE_IN_PICTURE_PICTURE_IN_PICTURE_SERVICE_IMPL_H_ -#define CONTENT_BROWSER_PICTURE_IN_PICTURE_PICTURE_IN_PICTURE_SERVICE_IMPL_H_ - -#include "base/containers/unique_ptr_adapters.h" -#include "content/common/content_export.h" -#include "content/public/browser/frame_service_base.h" -#include "third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom.h" - -namespace content { - -class PictureInPictureWindowControllerImpl; - -// Receives Picture-in-Picture messages from a given RenderFrame. There is one -// PictureInPictureServiceImpl per RenderFrameHost. It talks directly to the -// PictureInPictureWindowControllerImpl. Only one service interacts with the -// window at a given time. -class CONTENT_EXPORT PictureInPictureServiceImpl final - : public content::FrameServiceBase<blink::mojom::PictureInPictureService> { - public: - static void Create(RenderFrameHost*, - blink::mojom::PictureInPictureServiceRequest); - static PictureInPictureServiceImpl* CreateForTesting( - RenderFrameHost*, - blink::mojom::PictureInPictureServiceRequest); - - // PictureInPictureService implementation. - void StartSession(uint32_t player_id, - const base::Optional<viz::SurfaceId>& surface_id, - const gfx::Size& natural_size, - bool show_play_pause_button, - StartSessionCallback) final; - void EndSession(EndSessionCallback) final; - void UpdateSession(uint32_t player_id, - const base::Optional<viz::SurfaceId>& surface_id, - const gfx::Size& natural_size, - bool show_play_pause_button) final; - void SetDelegate(blink::mojom::PictureInPictureDelegatePtr) final; - - void NotifyWindowResized(const gfx::Size&); - - // Returns the player that is currently in Picture-in-Picture in the context - // of the frame associated with the service. Returns nullopt if there are - // none. - const base::Optional<MediaPlayerId>& player_id() const { return player_id_; } - void ResetPlayerId() { player_id_.reset(); } - - private: - PictureInPictureServiceImpl(RenderFrameHost*, - blink::mojom::PictureInPictureServiceRequest); - ~PictureInPictureServiceImpl() override; - - // Returns the PictureInPictureWindowControllerImpl associated with the - // WebContents. Can be null. - PictureInPictureWindowControllerImpl* GetController(); - - // Callack run when the delegate is disconnected. Only one delegate should be - // set at any given time. - void OnDelegateDisconnected(); - - // Implementation of ExitPictureInPicture without callback handling. - void ExitPictureInPictureInternal(); - - WebContentsImpl* web_contents_impl(); - - blink::mojom::PictureInPictureDelegatePtr delegate_ = nullptr; - RenderFrameHost* render_frame_host_ = nullptr; - base::Optional<MediaPlayerId> player_id_; - - DISALLOW_COPY_AND_ASSIGN(PictureInPictureServiceImpl); -}; - -} // namespace content - -#endif // CONTENT_BROWSER_PICTURE_IN_PICTURE_PICTURE_IN_PICTURE_SERVICE_IMPL_H_
diff --git a/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc b/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc deleted file mode 100644 index 4c8a5b723..0000000 --- a/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc +++ /dev/null
@@ -1,145 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "content/browser/picture_in_picture/picture_in_picture_service_impl.h" - -#include <memory> -#include <utility> -#include <vector> - -#include "content/common/media/media_player_delegate_messages.h" -#include "content/public/browser/overlay_window.h" -#include "content/public/browser/web_contents_delegate.h" -#include "content/test/test_content_browser_client.h" -#include "content/test/test_render_frame_host.h" -#include "content/test/test_render_view_host.h" -#include "content/test/test_web_contents.h" -#include "mojo/public/cpp/bindings/interface_ptr.h" -#include "testing/gmock/include/gmock/gmock.h" - -namespace content { - -class PictureInPictureDelegate : public WebContentsDelegate { - public: - PictureInPictureDelegate() = default; - - MOCK_METHOD3(EnterPictureInPicture, - gfx::Size(WebContents*, - const viz::SurfaceId&, - const gfx::Size&)); - - private: - DISALLOW_COPY_AND_ASSIGN(PictureInPictureDelegate); -}; - -class TestOverlayWindow : public OverlayWindow { - public: - TestOverlayWindow() = default; - ~TestOverlayWindow() override{}; - - static std::unique_ptr<OverlayWindow> Create( - PictureInPictureWindowController* controller) { - return std::unique_ptr<OverlayWindow>(new TestOverlayWindow()); - } - - bool IsActive() const override { return false; } - void Close() override {} - void Show() override {} - void Hide() override {} - void SetPictureInPictureCustomControls( - const std::vector<blink::PictureInPictureControlInfo>& controls) - override {} - bool IsVisible() const override { return false; } - bool IsAlwaysOnTop() const override { return false; } - ui::Layer* GetLayer() override { return nullptr; } - gfx::Rect GetBounds() const override { return gfx::Rect(); } - void UpdateVideoSize(const gfx::Size& natural_size) override {} - void SetPlaybackState(PlaybackState playback_state) override {} - void SetAlwaysHidePlayPauseButton(bool is_visible) override {} - ui::Layer* GetWindowBackgroundLayer() override { return nullptr; } - ui::Layer* GetVideoLayer() override { return nullptr; } - gfx::Rect GetVideoBounds() override { return gfx::Rect(); } - void SetSkipAdButtonVisibility(bool is_visible) override {} - - private: - DISALLOW_COPY_AND_ASSIGN(TestOverlayWindow); -}; - -class PictureInPictureTestBrowserClient : public TestContentBrowserClient { - public: - PictureInPictureTestBrowserClient() = default; - ~PictureInPictureTestBrowserClient() override = default; - - std::unique_ptr<OverlayWindow> CreateWindowForPictureInPicture( - PictureInPictureWindowController* controller) override { - return TestOverlayWindow::Create(controller); - } -}; - -class PictureInPictureServiceImplTest : public RenderViewHostImplTestHarness { - public: - void SetUp() override { - RenderViewHostImplTestHarness::SetUp(); - // WebUIControllerFactory::RegisterFactory( - // ContentWebUIControllerFactory::GetInstance()); - - SetBrowserClientForTesting(&browser_client_); - - TestRenderFrameHost* render_frame_host = contents()->GetMainFrame(); - render_frame_host->InitializeRenderFrameIfNeeded(); - - contents()->SetDelegate(&delegate_); - - blink::mojom::PictureInPictureServiceRequest request; - service_impl_ = PictureInPictureServiceImpl::CreateForTesting( - render_frame_host, std::move(request)); - } - - void TearDown() override { - // WebUIControllerFactory::UnregisterFactoryForTesting( - // ContentWebUIControllerFactory::GetInstance()); - RenderViewHostImplTestHarness::TearDown(); - } - - PictureInPictureServiceImpl& service() { return *service_impl_; } - - PictureInPictureDelegate& delegate() { return delegate_; } - - private: - PictureInPictureTestBrowserClient browser_client_; - PictureInPictureDelegate delegate_; - // Will be deleted when the frame is destroyed. - PictureInPictureServiceImpl* service_impl_; -}; - -TEST_F(PictureInPictureServiceImplTest, EnterPictureInPicture) { - const int kPlayerVideoOnlyId = 30; - - // If Picture-in-Picture was never triggered, the media player id would not be - // set. - EXPECT_FALSE(service().player_id().has_value()); - - viz::SurfaceId surface_id = - viz::SurfaceId(viz::FrameSinkId(1, 1), - viz::LocalSurfaceId( - 11, base::UnguessableToken::Deserialize(0x111111, 0))); - - EXPECT_CALL(delegate(), - EnterPictureInPicture(contents(), surface_id, gfx::Size(42, 42))); - - service().StartSession(kPlayerVideoOnlyId, surface_id, gfx::Size(42, 42), - true /* show_play_pause_button */, base::DoNothing()); - EXPECT_TRUE(service().player_id().has_value()); - EXPECT_EQ(kPlayerVideoOnlyId, service().player_id()->delegate_id); - - // Picture-in-Picture media player id should not be reset when the media is - // destroyed (e.g. video stops playing). This allows the Picture-in-Picture - // window to continue to control the media. - contents()->GetMainFrame()->OnMessageReceived( - MediaPlayerDelegateHostMsg_OnMediaDestroyed( - contents()->GetMainFrame()->GetRoutingID(), kPlayerVideoOnlyId)); - EXPECT_TRUE(service().player_id().has_value()); -} - -} // namespace content
diff --git a/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.cc b/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.cc index 01f7ae73..a0096ef 100644 --- a/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.cc +++ b/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.cc
@@ -10,7 +10,6 @@ #include "content/browser/media/media_web_contents_observer.h" #include "content/browser/media/session/media_session_impl.h" #include "content/browser/picture_in_picture/overlay_surface_embedder.h" -#include "content/browser/picture_in_picture/picture_in_picture_service_impl.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/common/media/media_player_delegate_messages.h" #include "content/public/browser/content_browser_client.h" @@ -58,8 +57,7 @@ PictureInPictureWindowControllerImpl::PictureInPictureWindowControllerImpl( WebContents* initiator) - : WebContentsObserver(initiator), - initiator_(static_cast<WebContentsImpl* const>(initiator)) { + : initiator_(static_cast<WebContentsImpl* const>(initiator)) { DCHECK(initiator_); media_web_contents_observer_ = initiator_->media_web_contents_observer(); @@ -128,7 +126,9 @@ // surface id was updated for the same video, this is a no-op. This could // be updated for a different video if another media player on the same // |initiator_| enters Picture-in-Picture mode. - UpdateMediaPlayerId(); + media_player_id_ = + media_web_contents_observer_->GetPictureInPictureVideoMediaPlayerId(); + UpdatePlaybackState(IsPlayerActive(), !media_player_id_.has_value()); window_->UpdateVideoSize(natural_size); @@ -142,9 +142,9 @@ } void PictureInPictureWindowControllerImpl::UpdateLayerBounds() { - if (media_player_id_.has_value() && service_ && window_ && - window_->IsVisible()) { - service_->NotifyWindowResized(window_->GetBounds().size()); + if (media_player_id_.has_value() && window_ && window_->IsVisible()) { + media_web_contents_observer_->OnPictureInPictureWindowResize( + window_->GetBounds().size()); } if (embedder_) @@ -152,12 +152,10 @@ } bool PictureInPictureWindowControllerImpl::IsPlayerActive() { - if (!media_player_id_.has_value()) - media_player_id_ = service_ ? service_->player_id() : base::nullopt; - - // At creation time, the player id may not be set. - if (!media_player_id_.has_value()) - return false; + if (!media_player_id_.has_value()) { + media_player_id_ = + media_web_contents_observer_->GetPictureInPictureVideoMediaPlayerId(); + } return media_player_id_.has_value() && media_web_contents_observer_->IsPlayerActive(*media_player_id_); @@ -221,11 +219,6 @@ media_player_id_->delegate_id, control_id)); } -void PictureInPictureWindowControllerImpl::UpdateMediaPlayerId() { - media_player_id_ = service_ ? service_->player_id() : base::nullopt; - UpdatePlaybackState(IsPlayerActive(), !media_player_id_.has_value()); -} - void PictureInPictureWindowControllerImpl::SetAlwaysHidePlayPauseButton( bool is_visible) { always_hide_play_pause_button_ = is_visible; @@ -261,33 +254,6 @@ window_->SetSkipAdButtonVisibility(media_session_action_skip_ad_handled_); } -void PictureInPictureWindowControllerImpl::MediaStartedPlaying( - const MediaPlayerInfo&, - const MediaPlayerId& media_player_id) { - if (initiator_->IsBeingDestroyed()) - return; - - if (media_player_id_ != media_player_id) - return; - - UpdatePlaybackState(true /* is_playing */, false /* reached_end_of_stream */); -} - -void PictureInPictureWindowControllerImpl::MediaStoppedPlaying( - const MediaPlayerInfo&, - const MediaPlayerId& media_player_id, - WebContentsObserver::MediaStoppedReason reason) { - if (initiator_->IsBeingDestroyed()) - return; - - if (media_player_id_ != media_player_id) - return; - - UpdatePlaybackState( - false /* is_playing */, - reason == WebContentsObserver::MediaStoppedReason::kReachedEndOfStream); -} - void PictureInPictureWindowControllerImpl::OnLeavingPictureInPicture( bool should_pause_video, bool should_reset_pip_player) { @@ -303,12 +269,8 @@ new MediaPlayerDelegateMsg_EndPictureInPictureMode( media_player_id_->render_frame_host->GetRoutingID(), media_player_id_->delegate_id)); - - if (should_reset_pip_player) { - DCHECK(service_); - service_->ResetPlayerId(); - media_player_id_.reset(); - } + if (should_reset_pip_player) + media_web_contents_observer_->ResetPictureInPictureVideoMediaPlayerId(); } }
diff --git a/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h b/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h index 91701f7..f44a7ca 100644 --- a/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h +++ b/content/browser/picture_in_picture/picture_in_picture_window_controller_impl.h
@@ -14,11 +14,10 @@ namespace content { -class MediaWebContentsObserver; class OverlaySurfaceEmbedder; -class PictureInPictureServiceImpl; class WebContents; class WebContentsImpl; +class MediaWebContentsObserver; // TODO(thakis,mlamouri): PictureInPictureWindowControllerImpl isn't // CONTENT_EXPORT'd because it creates complicated build issues with @@ -28,8 +27,7 @@ // work with it. https://crbug.com/589840. class PictureInPictureWindowControllerImpl : public PictureInPictureWindowController, - public WebContentsUserData<PictureInPictureWindowControllerImpl>, - public WebContentsObserver { + public WebContentsUserData<PictureInPictureWindowControllerImpl> { public: // Gets a reference to the controller associated with |initiator| and creates // one if it does not exist. The returned pointer is guaranteed to be @@ -64,22 +62,6 @@ CONTENT_EXPORT void MediaSessionActionsChanged( const std::set<media_session::mojom::MediaSessionAction>& actions); - // WebContentsObserver: - void MediaStartedPlaying(const MediaPlayerInfo&, - const MediaPlayerId&) override; - void MediaStoppedPlaying(const MediaPlayerInfo&, - const MediaPlayerId&, - WebContentsObserver::MediaStoppedReason) override; - - // TODO(mlamouri): temporary method used because of the media player id is - // stored in a different location from the one that is used to update the - // state of this object. - void UpdateMediaPlayerId(); - - void set_service(PictureInPictureServiceImpl* service) { - service_ = service; - }; - private: friend class WebContentsUserData<PictureInPictureWindowControllerImpl>; @@ -107,7 +89,6 @@ std::unique_ptr<OverlayWindow> window_; std::unique_ptr<OverlaySurfaceEmbedder> embedder_; - // TODO(929156): remove this as it should be accessible via `web_contents()`. WebContentsImpl* const initiator_; // Used to determine the state of the media player and route messages to @@ -128,11 +109,6 @@ // Session API in UpdatePlayPauseButtonVisibility(). bool always_hide_play_pause_button_ = false; - // Service currently associated with the Picture-in-Picture window. The - // service makes the bridge with the renderer process by sending enter/exit - // requests. It is also holding the Picture-in-Picture MediaPlayerId. - PictureInPictureServiceImpl* service_ = nullptr; - WEB_CONTENTS_USER_DATA_KEY_DECL(); DISALLOW_COPY_AND_ASSIGN(PictureInPictureWindowControllerImpl);
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc index 74e086c0..58b809a1a 100644 --- a/content/browser/web_contents/web_contents_impl_unittest.cc +++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -26,6 +26,7 @@ #include "content/browser/webui/web_ui_controller_factory_registry.h" #include "content/common/frame_messages.h" #include "content/common/input/synthetic_web_input_event_builders.h" +#include "content/common/media/media_player_delegate_messages.h" #include "content/common/view_messages.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/global_request_id.h" @@ -34,6 +35,7 @@ #include "content/public/browser/navigation_details.h" #include "content/public/browser/notification_details.h" #include "content/public/browser/notification_source.h" +#include "content/public/browser/overlay_window.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/ssl_host_state_delegate.h" #include "content/public/browser/storage_partition.h" @@ -3240,6 +3242,113 @@ EXPECT_EQ(SK_ColorGREEN, observer.last_theme_color()); } +class PictureInPictureDelegate : public WebContentsDelegate { + public: + PictureInPictureDelegate() = default; + + MOCK_METHOD3(EnterPictureInPicture, + gfx::Size(content::WebContents* web_contents, + const viz::SurfaceId&, + const gfx::Size&)); + + private: + DISALLOW_COPY_AND_ASSIGN(PictureInPictureDelegate); +}; + +class TestOverlayWindow : public OverlayWindow { + public: + TestOverlayWindow() = default; + ~TestOverlayWindow() override{}; + + static std::unique_ptr<OverlayWindow> Create( + PictureInPictureWindowController* controller) { + return std::unique_ptr<OverlayWindow>(new TestOverlayWindow()); + } + + bool IsActive() const override { return false; } + void Close() override {} + void Show() override {} + void Hide() override {} + void SetPictureInPictureCustomControls( + const std::vector<blink::PictureInPictureControlInfo>& controls) + override {} + bool IsVisible() const override { return false; } + bool IsAlwaysOnTop() const override { return false; } + ui::Layer* GetLayer() override { return nullptr; } + gfx::Rect GetBounds() const override { return gfx::Rect(); } + void UpdateVideoSize(const gfx::Size& natural_size) override {} + void SetPlaybackState(PlaybackState playback_state) override {} + void SetAlwaysHidePlayPauseButton(bool is_visible) override {} + void SetSkipAdButtonVisibility(bool is_visible) override {} + ui::Layer* GetWindowBackgroundLayer() override { return nullptr; } + ui::Layer* GetVideoLayer() override { return nullptr; } + gfx::Rect GetVideoBounds() override { return gfx::Rect(); } + + private: + DISALLOW_COPY_AND_ASSIGN(TestOverlayWindow); +}; + +class PictureInPictureTestBrowserClient : public TestContentBrowserClient { + public: + PictureInPictureTestBrowserClient() + : original_browser_client_(SetBrowserClientForTesting(this)) {} + + ~PictureInPictureTestBrowserClient() override { + SetBrowserClientForTesting(original_browser_client_); + } + + std::unique_ptr<OverlayWindow> CreateWindowForPictureInPicture( + PictureInPictureWindowController* controller) override { + return TestOverlayWindow::Create(controller); + } + + private: + ContentBrowserClient* original_browser_client_; +}; + +TEST_F(WebContentsImplTest, EnterPictureInPicture) { + PictureInPictureTestBrowserClient browser_client; + SetBrowserClientForTesting(&browser_client); + + const int kPlayerVideoOnlyId = 30; /* arbitrary and used for tests */ + + PictureInPictureDelegate delegate; + contents()->SetDelegate(&delegate); + + MediaWebContentsObserver* observer = + contents()->media_web_contents_observer(); + TestRenderFrameHost* rfh = main_test_rfh(); + rfh->InitializeRenderFrameIfNeeded(); + + // If Picture-in-Picture was never triggered, the media player id would not be + // set. + EXPECT_FALSE(observer->GetPictureInPictureVideoMediaPlayerId().has_value()); + + viz::SurfaceId surface_id = + viz::SurfaceId(viz::FrameSinkId(1, 1), + viz::LocalSurfaceId( + 11, base::UnguessableToken::Deserialize(0x111111, 0))); + + EXPECT_CALL(delegate, + EnterPictureInPicture(contents(), surface_id, gfx::Size(42, 42))); + + rfh->OnMessageReceived( + MediaPlayerDelegateHostMsg_OnPictureInPictureModeStarted( + rfh->GetRoutingID(), kPlayerVideoOnlyId, surface_id /* surface_id */, + gfx::Size(42, 42) /* natural_size */, 1 /* request_id */, + true /* show_play_pause_button */)); + EXPECT_TRUE(observer->GetPictureInPictureVideoMediaPlayerId().has_value()); + EXPECT_EQ(kPlayerVideoOnlyId, + observer->GetPictureInPictureVideoMediaPlayerId()->delegate_id); + + // Picture-in-Picture media player id should not be reset when the media is + // destroyed (e.g. video stops playing). This allows the Picture-in-Picture + // window to continue to control the media. + rfh->OnMessageReceived(MediaPlayerDelegateHostMsg_OnMediaDestroyed( + rfh->GetRoutingID(), kPlayerVideoOnlyId)); + EXPECT_TRUE(observer->GetPictureInPictureVideoMediaPlayerId().has_value()); +} + TEST_F(WebContentsImplTest, ParseDownloadHeaders) { download::DownloadUrlParameters::RequestHeadersType request_headers = WebContentsImpl::ParseDownloadHeaders("A: 1\r\nB: 2\r\nC: 3\r\n\r\n");
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc index 54cfcb2..2d2dcc1 100644 --- a/content/browser/webauth/authenticator_impl_unittest.cc +++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -14,6 +14,7 @@ #include "base/json/json_parser.h" #include "base/json/json_writer.h" #include "base/run_loop.h" +#include "base/system/sys_info.h" #include "base/test/gtest_util.h" #include "base/test/scoped_feature_list.h" #include "base/test/test_mock_time_task_runner.h" @@ -979,15 +980,25 @@ } } +#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_CHROMEOS) TEST_F(AuthenticatorImplTest, TestCableDiscoveryByDefault) { auto authenticator = ConnectToAuthenticator(); // caBLE should be enabled by default if BLE is supported. + bool should_be_enabled = + device::BluetoothAdapterFactory::Get().IsLowEnergySupported(); + +#if defined(OS_CHROMEOS) + // Test only valid if truly running on instance of ChromeOS. + should_be_enabled = should_be_enabled && base::SysInfo::IsRunningOnChromeOS(); +#endif // defined(OS_CHROMEOS) + EXPECT_EQ( - device::BluetoothAdapterFactory::Get().IsLowEnergySupported(), + should_be_enabled, SupportsTransportProtocol( device::FidoTransportProtocol::kCloudAssistedBluetoothLowEnergy)); } +#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_CHROMEOS) TEST_F(AuthenticatorImplTest, TestCableDiscoveryDisabledWithFlag) { DisableFeature(features::kWebAuthCable);
diff --git a/content/browser/worker_host/dedicated_worker_host.cc b/content/browser/worker_host/dedicated_worker_host.cc index b9c3c567..d0eae9e 100644 --- a/content/browser/worker_host/dedicated_worker_host.cc +++ b/content/browser/worker_host/dedicated_worker_host.cc
@@ -68,7 +68,7 @@ const GURL& script_url, const url::Origin& request_initiator_origin, blink::mojom::BlobURLTokenPtr blob_url_token, - blink::mojom::DedicatedWorkerFactoryClientPtr client) { + blink::mojom::DedicatedWorkerHostFactoryClientPtr client) { DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK(blink::features::IsPlzDedicatedWorkerEnabled()); @@ -116,7 +116,7 @@ } void DidLoadDedicatedWorker( - blink::mojom::DedicatedWorkerFactoryClientPtr client, + blink::mojom::DedicatedWorkerHostFactoryClientPtr client, blink::mojom::ServiceWorkerProviderInfoForWorkerPtr service_worker_provider_info, network::mojom::URLLoaderFactoryAssociatedPtrInfo @@ -238,7 +238,7 @@ } void CreateDedicatedWorker( - blink::mojom::DedicatedWorkerFactoryRequest request) { + blink::mojom::DedicatedWorkerHostFactoryRequest request) { DCHECK_CURRENTLY_ON(BrowserThread::UI); CreateDedicatedWorkerHostFactory(process_id_, ancestor_render_frame_id_, origin_, std::move(request)); @@ -262,18 +262,19 @@ // A factory for creating DedicatedWorkerHosts. Its lifetime is managed by // the renderer over mojo via a StrongBinding. This lives on the UI thread. -class DedicatedWorkerFactoryImpl : public blink::mojom::DedicatedWorkerFactory { +class DedicatedWorkerHostFactoryImpl + : public blink::mojom::DedicatedWorkerHostFactory { public: - DedicatedWorkerFactoryImpl(int process_id, - int ancestor_render_frame_id, - const url::Origin& parent_context_origin) + DedicatedWorkerHostFactoryImpl(int process_id, + int ancestor_render_frame_id, + const url::Origin& parent_context_origin) : process_id_(process_id), ancestor_render_frame_id_(ancestor_render_frame_id), parent_context_origin_(parent_context_origin) { DCHECK_CURRENTLY_ON(BrowserThread::UI); } - // blink::mojom::DedicatedWorkerFactory: + // blink::mojom::DedicatedWorkerHostFactory: void CreateDedicatedWorker( const url::Origin& origin, service_manager::mojom::InterfaceProviderRequest request) override { @@ -283,9 +284,10 @@ return; } - // TODO(crbug.com/729021): Once |parent_context_origin_| is no longer races - // with the request for |DedicatedWorkerFactory|, enforce that the worker's - // origin either matches the creating document's origin, or is unique. + // TODO(crbug.com/729021): Once |parent_context_origin_| no longer races + // with the request for |DedicatedWorkerHostFactory|, enforce that + // the worker's origin either matches the origin of the creating context + // (Document or DedicatedWorkerGlobalScope), or is unique. mojo::MakeStrongBinding(std::make_unique<DedicatedWorkerHost>( process_id_, ancestor_render_frame_id_, origin), FilterRendererExposedInterfaces( @@ -298,7 +300,7 @@ const GURL& script_url, const url::Origin& request_initiator_origin, blink::mojom::BlobURLTokenPtr blob_url_token, - blink::mojom::DedicatedWorkerFactoryClientPtr client) override { + blink::mojom::DedicatedWorkerHostFactoryClientPtr client) override { DCHECK_CURRENTLY_ON(BrowserThread::UI); if (!blink::features::IsPlzDedicatedWorkerEnabled()) { mojo::ReportBadMessage("DWH_BROWSER_SCRIPT_FETCH_DISABLED"); @@ -306,9 +308,9 @@ } // TODO(crbug.com/729021): Once |parent_context_origin_| no longer races - // with the request for |DedicatedWorkerFactory|, enforce that the worker's - // origin either matches the origin of the creating context (Document or - // DedicatedWorkerGlobalScope), or is unique. + // with the request for |DedicatedWorkerHostFactory|, enforce that + // the worker's origin either matches the origin of the creating context + // (Document or DedicatedWorkerGlobalScope), or is unique. auto host = std::make_unique<DedicatedWorkerHost>( process_id_, ancestor_render_frame_id_, request_initiator_origin); auto* host_raw = host.get(); @@ -328,7 +330,7 @@ const int ancestor_render_frame_id_; const url::Origin parent_context_origin_; - DISALLOW_COPY_AND_ASSIGN(DedicatedWorkerFactoryImpl); + DISALLOW_COPY_AND_ASSIGN(DedicatedWorkerHostFactoryImpl); }; } // namespace @@ -337,9 +339,9 @@ int process_id, int ancestor_render_frame_id, const url::Origin& origin, - blink::mojom::DedicatedWorkerFactoryRequest request) { + blink::mojom::DedicatedWorkerHostFactoryRequest request) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - mojo::MakeStrongBinding(std::make_unique<DedicatedWorkerFactoryImpl>( + mojo::MakeStrongBinding(std::make_unique<DedicatedWorkerHostFactoryImpl>( process_id, ancestor_render_frame_id, origin), std::move(request)); }
diff --git a/content/browser/worker_host/dedicated_worker_host.h b/content/browser/worker_host/dedicated_worker_host.h index e25d8bac..a6cb121 100644 --- a/content/browser/worker_host/dedicated_worker_host.h +++ b/content/browser/worker_host/dedicated_worker_host.h
@@ -5,7 +5,7 @@ #ifndef CONTENT_BROWSER_WORKER_HOST_DEDICATED_WORKER_HOST_H_ #define CONTENT_BROWSER_WORKER_HOST_DEDICATED_WORKER_HOST_H_ -#include "third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom.h" +#include "third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom.h" namespace url { class Origin; @@ -13,12 +13,13 @@ namespace content { -// Creates a host for a dedicated worker. This must be called on the UI thread. +// Creates a host factory for a dedicated worker. This must be called on the UI +// thread. void CreateDedicatedWorkerHostFactory( int process_id, int parent_render_frame_id, const url::Origin& origin, - blink::mojom::DedicatedWorkerFactoryRequest request); + blink::mojom::DedicatedWorkerHostFactoryRequest request); } // namespace content
diff --git a/content/common/media/media_player_delegate_messages.h b/content/common/media/media_player_delegate_messages.h index 4870d5b2..b482679ef 100644 --- a/content/common/media/media_player_delegate_messages.h +++ b/content/common/media/media_player_delegate_messages.h
@@ -76,6 +76,23 @@ int /* delegate_id, distinguishes instances */, std::string /* control_id */) +IPC_MESSAGE_ROUTED2(MediaPlayerDelegateMsg_OnPictureInPictureWindowResize, + int /* delegate_id, distinguishes instances */, + gfx::Size /* window_size */) + +// ---------------------------------------------------------------------------- +// Messages from the browser to the renderer acknowledging changes happened. +// ---------------------------------------------------------------------------- + +IPC_MESSAGE_ROUTED3(MediaPlayerDelegateMsg_OnPictureInPictureModeStarted_ACK, + int /* delegate id */, + int /* request_id */, + gfx::Size /* window_size */) + +IPC_MESSAGE_ROUTED2(MediaPlayerDelegateMsg_OnPictureInPictureModeEnded_ACK, + int /* delegate id */, + int /* request_id */) + // ---------------------------------------------------------------------------- // Messages from the renderer notifying the browser of playback state changes. // ---------------------------------------------------------------------------- @@ -107,6 +124,23 @@ int /* delegate_id, distinguishes instances */, gfx::Size /* new size of video */) +IPC_MESSAGE_ROUTED5(MediaPlayerDelegateHostMsg_OnPictureInPictureModeStarted, + int /* delegate id */, + viz::SurfaceId /* surface_id */, + gfx::Size /* natural_size */, + int /* request_id */, + bool /* show_play_pause_button */) + +IPC_MESSAGE_ROUTED2(MediaPlayerDelegateHostMsg_OnPictureInPictureModeEnded, + int /* delegate id */, + int /* request_id */) + +IPC_MESSAGE_ROUTED4(MediaPlayerDelegateHostMsg_OnPictureInPictureSurfaceChanged, + int /* delegate id */, + viz::SurfaceId /* surface_id */, + gfx::Size /* natural_size */, + bool /* show_play_pause_button */) + IPC_MESSAGE_ROUTED2( MediaPlayerDelegateHostMsg_OnSetPictureInPictureCustomControls, int /* delegate id */,
diff --git a/content/public/android/java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java index 2c9ed9df..fc024927e 100644 --- a/content/public/android/java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java
@@ -443,7 +443,7 @@ @Override public void initChromiumBrowserProcessForTests() { ResourceExtractor resourceExtractor = ResourceExtractor.get(); - resourceExtractor.startExtractingResources(); + resourceExtractor.startExtractingResources("en"); resourceExtractor.waitForCompletion(); nativeSetCommandLineFlags(false); }
diff --git a/content/public/app/content_browser_manifest.cc b/content/public/app/content_browser_manifest.cc index 880f44a..cf6cf19 100644 --- a/content/public/app/content_browser_manifest.cc +++ b/content/public/app/content_browser_manifest.cc
@@ -174,7 +174,7 @@ "navigation:dedicated_worker", "renderer", std::set<const char*>{ "blink.mojom.CacheStorage", - "blink.mojom.DedicatedWorkerFactory", + "blink.mojom.DedicatedWorkerHostFactory", "blink.mojom.FileSystemManager", "blink.mojom.IDBFactory", "blink.mojom.IdleManager", "blink.mojom.LockManager", "blink.mojom.NotificationService", @@ -213,7 +213,7 @@ "blink.mojom.ContactsManager", "blink.mojom.CredentialManager", "blink.mojom.DisplayCutoutHost", - "blink.mojom.DedicatedWorkerFactory", + "blink.mojom.DedicatedWorkerHostFactory", "blink.mojom.FileChooser", "blink.mojom.FileSystemManager", "blink.mojom.GeolocationService", @@ -227,7 +227,6 @@ "blink.mojom.MediaSessionService", "blink.mojom.NotificationService", "blink.mojom.PermissionService", - "blink.mojom.PictureInPictureService", "blink.mojom.Portal", "blink.mojom.PrefetchURLLoaderService", "blink.mojom.PresentationService",
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index bc88ea5c..336f080 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -547,8 +547,14 @@ // Controls whether CTAP2 devices can communicate via the WebAuthentication API // using pairingless BLE protocol. // https://w3c.github.io/webauthn -const base::Feature kWebAuthCable{"WebAuthenticationCable", - base::FEATURE_ENABLED_BY_DEFAULT}; +const base::Feature kWebAuthCable { + "WebAuthenticationCable", +#if defined(OS_LINUX) + base::FEATURE_DISABLED_BY_DEFAULT +#else + base::FEATURE_ENABLED_BY_DEFAULT +#endif +}; // Controls whether AuthenticatorAttestationResponse contains a getTransports // member to return the set of transports supported by an authenticator. @@ -587,6 +593,16 @@ #endif }; +// Enables HW VP9 encoding on Android. +const base::Feature kWebRtcHWVP9Encoding { + "WebRtcHWVP9Encoding", +#if defined(OS_ANDROID) + base::FEATURE_DISABLED_BY_DEFAULT +#else + base::FEATURE_DISABLED_BY_DEFAULT +#endif +}; + // Enables negotiation of experimental multiplex codec in SDP. const base::Feature kWebRtcMultiplexCodec{"WebRTC-MultiplexCodec", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index dc30463..5778c77a 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -132,6 +132,7 @@ CONTENT_EXPORT extern const base::Feature kWebRtcEcdsaDefault; CONTENT_EXPORT extern const base::Feature kWebRtcHWH264Encoding; CONTENT_EXPORT extern const base::Feature kWebRtcHWVP8Encoding; +CONTENT_EXPORT extern const base::Feature kWebRtcHWVP9Encoding; CONTENT_EXPORT extern const base::Feature kWebRtcMultiplexCodec; CONTENT_EXPORT extern const base::Feature kWebRtcScreenshareSwEncoding; CONTENT_EXPORT extern const base::Feature kWebRtcUseEchoCanceller3;
diff --git a/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/NativeLibraryTestRule.java b/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/NativeLibraryTestRule.java index 35a5e74f..65a9219 100644 --- a/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/NativeLibraryTestRule.java +++ b/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/NativeLibraryTestRule.java
@@ -61,7 +61,7 @@ try { // Extract compressed resource paks. ResourceExtractor resourceExtractor = ResourceExtractor.get(); - resourceExtractor.startExtractingResources(); + resourceExtractor.startExtractingResources("en"); resourceExtractor.waitForCompletion(); BrowserStartupController.get(LibraryProcessType.PROCESS_BROWSER)
diff --git a/content/renderer/gpu_benchmarking_extension.cc b/content/renderer/gpu_benchmarking_extension.cc index 5d2a760..7e43978 100644 --- a/content/renderer/gpu_benchmarking_extension.cc +++ b/content/renderer/gpu_benchmarking_extension.cc
@@ -554,9 +554,16 @@ .SetMethod("printPagesToSkPictures", &GpuBenchmarking::PrintPagesToSkPictures) .SetMethod("printPagesToXPS", &GpuBenchmarking::PrintPagesToXPS) - .SetValue("DEFAULT_INPUT", 0) - .SetValue("TOUCH_INPUT", 1) - .SetValue("MOUSE_INPUT", 2) + .SetValue("DEFAULT_INPUT", + static_cast<int>(SyntheticGestureParams::DEFAULT_INPUT)) + .SetValue("TOUCH_INPUT", + static_cast<int>(SyntheticGestureParams::TOUCH_INPUT)) + .SetValue("MOUSE_INPUT", + static_cast<int>(SyntheticGestureParams::MOUSE_INPUT)) + .SetValue("TOUCHPAD_INPUT", + static_cast<int>(SyntheticGestureParams::TOUCHPAD_INPUT)) + .SetValue("PEN_INPUT", + static_cast<int>(SyntheticGestureParams::PEN_INPUT)) .SetMethod("gestureSourceTypeSupported", &GpuBenchmarking::GestureSourceTypeSupported) .SetMethod("smoothScrollBy", &GpuBenchmarking::SmoothScrollBy)
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate.cc b/content/renderer/media/renderer_webmediaplayer_delegate.cc index d7d9255c..f6dbb40 100644 --- a/content/renderer/media/renderer_webmediaplayer_delegate.cc +++ b/content/renderer/media/renderer_webmediaplayer_delegate.cc
@@ -120,6 +120,30 @@ delegate_id, muted)); } +void RendererWebMediaPlayerDelegate::DidPictureInPictureModeStart( + int delegate_id, + const viz::SurfaceId& surface_id, + const gfx::Size& natural_size, + blink::WebMediaPlayer::PipWindowOpenedCallback callback, + bool show_play_pause_button) { + int request_id = next_picture_in_picture_callback_id_++; + enter_picture_in_picture_callback_map_.insert( + std::make_pair(request_id, std::move(callback))); + Send(new MediaPlayerDelegateHostMsg_OnPictureInPictureModeStarted( + routing_id(), delegate_id, surface_id, natural_size, request_id, + show_play_pause_button)); +} + +void RendererWebMediaPlayerDelegate::DidPictureInPictureModeEnd( + int delegate_id, + base::OnceClosure callback) { + int request_id = next_picture_in_picture_callback_id_++; + exit_picture_in_picture_callback_map_.insert( + std::make_pair(request_id, std::move(callback))); + Send(new MediaPlayerDelegateHostMsg_OnPictureInPictureModeEnded( + routing_id(), delegate_id, request_id)); +} + void RendererWebMediaPlayerDelegate::DidSetPictureInPictureCustomControls( int delegate_id, const std::vector<blink::PictureInPictureControlInfo>& controls) { @@ -127,6 +151,24 @@ routing_id(), delegate_id, controls)); } +void RendererWebMediaPlayerDelegate::DidPictureInPictureSurfaceChange( + int delegate_id, + const viz::SurfaceId& surface_id, + const gfx::Size& natural_size, + bool show_play_pause_button) { + Send(new MediaPlayerDelegateHostMsg_OnPictureInPictureSurfaceChanged( + routing_id(), delegate_id, surface_id, natural_size, + show_play_pause_button)); +} + +void RendererWebMediaPlayerDelegate:: + RegisterPictureInPictureWindowResizeCallback( + int player_id, + blink::WebMediaPlayer::PipWindowResizedCallback callback) { + picture_in_picture_window_resize_observer_ = + std::make_pair(player_id, std::move(callback)); +} + void RendererWebMediaPlayerDelegate::DidPause(int player_id) { DVLOG(2) << __func__ << "(" << player_id << ")"; DCHECK(id_map_.Lookup(player_id)); @@ -249,6 +291,13 @@ OnPictureInPictureModeEnded) IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_ClickPictureInPictureControl, OnPictureInPictureControlClicked) + IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_OnPictureInPictureModeEnded_ACK, + OnPictureInPictureModeEndedAck) + IPC_MESSAGE_HANDLER( + MediaPlayerDelegateMsg_OnPictureInPictureModeStarted_ACK, + OnPictureInPictureModeStartedAck) + IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_OnPictureInPictureWindowResize, + OnPictureInPictureWindowResize) IPC_MESSAGE_UNHANDLED(return false) IPC_END_MESSAGE_MAP() return true; @@ -368,6 +417,39 @@ observer->OnPictureInPictureControlClicked(control_id); } +void RendererWebMediaPlayerDelegate::OnPictureInPictureModeEndedAck( + int player_id, + int request_id) { + auto iter = exit_picture_in_picture_callback_map_.find(request_id); + DCHECK(iter != exit_picture_in_picture_callback_map_.end()); + + std::move(iter->second).Run(); + exit_picture_in_picture_callback_map_.erase(iter); +} + +void RendererWebMediaPlayerDelegate::OnPictureInPictureModeStartedAck( + int player_id, + int request_id, + const gfx::Size& window_size) { + auto iter = enter_picture_in_picture_callback_map_.find(request_id); + DCHECK(iter != enter_picture_in_picture_callback_map_.end()); + + std::move(iter->second).Run(blink::WebSize(window_size)); + enter_picture_in_picture_callback_map_.erase(iter); +} + +void RendererWebMediaPlayerDelegate::OnPictureInPictureWindowResize( + int player_id, + const gfx::Size& window_size) { + if (!picture_in_picture_window_resize_observer_ || + picture_in_picture_window_resize_observer_->first != player_id) { + return; + } + + picture_in_picture_window_resize_observer_->second.Run( + blink::WebSize(window_size)); +} + void RendererWebMediaPlayerDelegate::ScheduleUpdateTask() { if (!pending_update_task_) { base::ThreadTaskRunnerHandle::Get()->PostTask(
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate.h b/content/renderer/media/renderer_webmediaplayer_delegate.h index 1f7242c3..ad78d316 100644 --- a/content/renderer/media/renderer_webmediaplayer_delegate.h +++ b/content/renderer/media/renderer_webmediaplayer_delegate.h
@@ -65,9 +65,23 @@ blink::WebFullscreenVideoStatus fullscreen_video_status) override; void DidPlayerSizeChange(int delegate_id, const gfx::Size& size) override; void DidPlayerMutedStatusChange(int delegate_id, bool muted) override; + void DidPictureInPictureModeStart( + int delegate_id, + const viz::SurfaceId&, + const gfx::Size&, + blink::WebMediaPlayer::PipWindowOpenedCallback, + bool show_play_pause_button) override; + void DidPictureInPictureModeEnd(int delegate_id, base::OnceClosure) override; void DidSetPictureInPictureCustomControls( int delegate_id, const std::vector<blink::PictureInPictureControlInfo>& controls) override; + void DidPictureInPictureSurfaceChange(int delegate_id, + const viz::SurfaceId&, + const gfx::Size&, + bool show_play_pause_button) override; + void RegisterPictureInPictureWindowResizeCallback( + int player_id, + blink::WebMediaPlayer::PipWindowResizedCallback) override; // content::RenderFrameObserver overrides. void WasHidden() override; @@ -100,6 +114,11 @@ void OnPictureInPictureModeEnded(int player_id); void OnPictureInPictureControlClicked(int player_id, const std::string& control_id); + void OnPictureInPictureModeEndedAck(int player_id, int request_id); + void OnPictureInPictureModeStartedAck(int player_id, + int request_id, + const gfx::Size&); + void OnPictureInPictureWindowResize(int player_id, const gfx::Size&); // Schedules UpdateTask() to run soon. void ScheduleUpdateTask(); @@ -166,6 +185,35 @@ // when the idle cleanup timer should be fired more aggressively. bool is_jelly_bean_; + // Map associating a callback with a request sent to the browser process. The + // index is used as a unique request id that is passed to the browser process + // and will then ACK with the same id which will be used to run the right + // callback. + using ExitPictureInPictureCallbackMap = + base::flat_map<int, base::OnceClosure>; + ExitPictureInPictureCallbackMap exit_picture_in_picture_callback_map_; + + // Map associating a callback with a request sent to the browser process. The + // index is used as a unique request id that is passed to the browser process + // and will then ACK with the same id which will be used to run the right + // callback. + using EnterPictureInPictureCallbackMap = + base::flat_map<int, blink::WebMediaPlayer::PipWindowOpenedCallback>; + EnterPictureInPictureCallbackMap enter_picture_in_picture_callback_map_; + + // Counter that is used to use unique request id associated with + // picture-in-picture callbacks. It is incremented every time it is used. + int next_picture_in_picture_callback_id_ = 0; + + // Associating a player id and a Picture-in-Picture window resize callback. + // It holds the callback alive and guarantees that the notification sent from + // the browser proccess matches the player currently in Picture-in-Picture in + // the renderer. + using PictureInPictureWindowResizeObserver = + std::pair<int, blink::WebMediaPlayer::PipWindowResizedCallback>; + base::Optional<PictureInPictureWindowResizeObserver> + picture_in_picture_window_resize_observer_; + DISALLOW_COPY_AND_ASSIGN(RendererWebMediaPlayerDelegate); };
diff --git a/content/renderer/media/stream/webmediaplayer_ms.cc b/content/renderer/media/stream/webmediaplayer_ms.cc index 3b11c6d..5f58e9e 100644 --- a/content/renderer/media/stream/webmediaplayer_ms.cc +++ b/content/renderer/media/stream/webmediaplayer_ms.cc
@@ -425,8 +425,11 @@ // disabled. // The viz::SurfaceId may be updated when the video begins playback or when // the size of the video changes. - if (client_) - client_->OnPictureInPictureStateChange(); + if (client_ && IsInPictureInPicture() && !client_->IsInAutoPIP()) { + delegate_->DidPictureInPictureSurfaceChange( + delegate_id_, surface_id, NaturalSize(), + false /* show_play_pause_button */); + } } void WebMediaPlayerMS::TrackAdded(const blink::WebMediaStreamTrack& track) { @@ -457,16 +460,6 @@ audio_renderer_->Stop(); } -int WebMediaPlayerMS::GetDelegateId() { - return delegate_id_; -} - -base::Optional<viz::SurfaceId> WebMediaPlayerMS::GetSurfaceId() { - if (bridge_) - return bridge_->GetSurfaceId(); - return base::nullopt; -} - void WebMediaPlayerMS::Reload() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); if (web_stream_.IsNull()) @@ -647,17 +640,30 @@ delegate_->DidPlayerMutedStatusChange(delegate_id_, volume == 0.0); } -void WebMediaPlayerMS::EnterPictureInPicture() { +void WebMediaPlayerMS::EnterPictureInPicture( + blink::WebMediaPlayer::PipWindowOpenedCallback callback) { if (!bridge_) ActivateSurfaceLayerForVideo(); DCHECK(bridge_); - DCHECK(bridge_->GetSurfaceId().is_valid()); + + const viz::SurfaceId& surface_id = bridge_->GetSurfaceId(); + DCHECK(surface_id.is_valid()); + + // Notifies the browser process that the player should now be in + // Picture-in-Picture mode. + delegate_->DidPictureInPictureModeStart(delegate_id_, surface_id, + NaturalSize(), std::move(callback), + false /* show_play_pause_button */); } -void WebMediaPlayerMS::ExitPictureInPicture() { +void WebMediaPlayerMS::ExitPictureInPicture( + blink::WebMediaPlayer::PipWindowClosedCallback callback) { + // Notifies the browser process that Picture-in-Picture has ended. It will + // clear out the states and close the window. + delegate_->DidPictureInPictureModeEnd(delegate_id_, std::move(callback)); + // Internal cleanups. - // TODO(mlamouri): remove the need for this. OnPictureInPictureModeEnded(); } @@ -666,6 +672,14 @@ delegate_->DidSetPictureInPictureCustomControls(delegate_id_, controls); } +void WebMediaPlayerMS::RegisterPictureInPictureWindowResizeCallback( + blink::WebMediaPlayer::PipWindowResizedCallback callback) { + DCHECK(IsInPictureInPicture() && !client_->IsInAutoPIP()); + + delegate_->RegisterPictureInPictureWindowResizeCallback(delegate_id_, + std::move(callback)); +} + void WebMediaPlayerMS::SetSinkId( const blink::WebString& sink_id, std::unique_ptr<blink::WebSetSinkIdCallbacks> web_callback) {
diff --git a/content/renderer/media/stream/webmediaplayer_ms.h b/content/renderer/media/stream/webmediaplayer_ms.h index 3fcc581..1dde82ed 100644 --- a/content/renderer/media/stream/webmediaplayer_ms.h +++ b/content/renderer/media/stream/webmediaplayer_ms.h
@@ -116,10 +116,14 @@ void Seek(double seconds) override; void SetRate(double rate) override; void SetVolume(double volume) override; - void EnterPictureInPicture() override; - void ExitPictureInPicture() override; + void EnterPictureInPicture( + blink::WebMediaPlayer::PipWindowOpenedCallback callback) override; + void ExitPictureInPicture( + blink::WebMediaPlayer::PipWindowClosedCallback callback) override; void SetPictureInPictureCustomControls( const std::vector<blink::PictureInPictureControlInfo>&) override; + void RegisterPictureInPictureWindowResizeCallback( + blink::WebMediaPlayer::PipWindowResizedCallback) override; void SetSinkId( const blink::WebString& sink_id, std::unique_ptr<blink::WebSetSinkIdCallbacks> web_callback) override; @@ -236,8 +240,6 @@ void TrackAdded(const blink::WebMediaStreamTrack& track) override; void TrackRemoved(const blink::WebMediaStreamTrack& track) override; void ActiveStateChanged(bool is_active) override; - int GetDelegateId() override; - base::Optional<viz::SurfaceId> GetSurfaceId() override; void OnDisplayTypeChanged(WebMediaPlayer::DisplayType) override;
diff --git a/content/renderer/media/stream/webmediaplayer_ms_unittest.cc b/content/renderer/media/stream/webmediaplayer_ms_unittest.cc index c649211..ccf92dd 100644 --- a/content/renderer/media/stream/webmediaplayer_ms_unittest.cc +++ b/content/renderer/media/stream/webmediaplayer_ms_unittest.cc
@@ -113,9 +113,21 @@ EXPECT_EQ(delegate_id_, delegate_id); } + MOCK_METHOD5(DidPictureInPictureModeStart, + void(int, + const viz::SurfaceId&, + const gfx::Size&, + blink::WebMediaPlayer::PipWindowOpenedCallback, + bool)); + MOCK_METHOD2(DidPictureInPictureModeEnd, + void(int, blink::WebMediaPlayer::PipWindowClosedCallback)); MOCK_METHOD2(DidSetPictureInPictureCustomControls, void(int, const std::vector<blink::PictureInPictureControlInfo>&)); + MOCK_METHOD4(DidPictureInPictureSurfaceChange, + void(int, const viz::SurfaceId&, const gfx::Size&, bool)); + MOCK_METHOD2(RegisterPictureInPictureWindowResizeCallback, + void(int, blink::WebMediaPlayer::PipWindowResizedCallback)); void DidPause(int delegate_id) override { EXPECT_EQ(delegate_id_, delegate_id); @@ -606,7 +618,6 @@ void StopRendering() override; void DidReceiveFrame() override; bool IsDrivingFrameUpdates() const override { return true; } - void OnPictureInPictureStateChange() override {} // For test use void SetBackgroundRendering(bool background_rendering) { @@ -1396,9 +1407,68 @@ } #endif -INSTANTIATE_TEST_CASE_P(, - WebMediaPlayerMSTest, - ::testing::Combine(::testing::Bool(), - ::testing::Bool(), - ::testing::Bool())); +// Tests delegate methods are called when Picture-in-Picture is triggered. +TEST_P(WebMediaPlayerMSTest, PictureInPictureTriggerCallback) { + InitializeWebMediaPlayerMS(); + + // It works only a surface layer is used instead of a video layer. + if (!enable_surface_layer_for_video_) { + EXPECT_CALL(*this, DoSetCcLayer(false)); + return; + } + + MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(true); + + int tokens[] = {0, 33, 66, 100, 133, 166, 200, 233, 266, 300, + 333, 366, 400, 433, 466, 500, 533, 566, 600}; + std::vector<int> timestamps(tokens, tokens + sizeof(tokens) / sizeof(int)); + provider->QueueFrames(timestamps); + + EXPECT_CALL(*submitter_ptr_, StartRendering()); + EXPECT_CALL(*this, DisplayType()).Times(2); + EXPECT_CALL(*this, DoReadyStateChanged( + blink::WebMediaPlayer::kReadyStateHaveMetadata)); + EXPECT_CALL(*this, DoReadyStateChanged( + blink::WebMediaPlayer::kReadyStateHaveEnoughData)); + EXPECT_CALL(*this, + CheckSizeChanged(gfx::Size(kStandardWidth, kStandardHeight))); + message_loop_controller_.RunAndWaitForStatus( + media::PipelineStatus::PIPELINE_OK); + testing::Mock::VerifyAndClearExpectations(this); + + EXPECT_CALL(*this, DisplayType()) + .WillRepeatedly( + Return(blink::WebMediaPlayer::DisplayType::kPictureInPicture)); + + const gfx::Size natural_size = player_->NaturalSize(); + EXPECT_CALL(delegate_, DidPictureInPictureSurfaceChange( + delegate_.delegate_id(), + surface_layer_bridge_ptr_->GetSurfaceId(), + natural_size, false)) + .Times(2); + + player_->OnSurfaceIdUpdated(surface_layer_bridge_ptr_->GetSurfaceId()); + + EXPECT_CALL(delegate_, DidPictureInPictureModeStart( + delegate_.delegate_id(), + surface_layer_bridge_ptr_->GetSurfaceId(), + natural_size, _, false)); + + player_->EnterPictureInPicture(base::DoNothing()); + player_->OnSurfaceIdUpdated(surface_layer_bridge_ptr_->GetSurfaceId()); + + // Updating SurfaceId should NOT exit Picture-in-Picture. + EXPECT_CALL(delegate_, DidPictureInPictureModeEnd(delegate_.delegate_id(), _)) + .Times(0); + + testing::Mock::VerifyAndClearExpectations(this); + EXPECT_CALL(*this, DoSetCcLayer(false)); + EXPECT_CALL(*submitter_ptr_, StopUsingProvider()); +} + +INSTANTIATE_TEST_SUITE_P(, + WebMediaPlayerMSTest, + ::testing::Combine(::testing::Bool(), + ::testing::Bool(), + ::testing::Bool())); } // namespace content
diff --git a/content/renderer/media/webrtc/rtc_video_encoder.cc b/content/renderer/media/webrtc/rtc_video_encoder.cc index ca77a74..7249dcf 100644 --- a/content/renderer/media/webrtc/rtc_video_encoder.cc +++ b/content/renderer/media/webrtc/rtc_video_encoder.cc
@@ -59,6 +59,8 @@ media::VideoCodecProfile profile) { if (profile >= media::VP8PROFILE_MIN && profile <= media::VP8PROFILE_MAX) { return webrtc::kVideoCodecVP8; + } else if (profile == media::VP9PROFILE_MIN) { + return webrtc::kVideoCodecVP9; } else if (profile >= media::H264PROFILE_MIN && profile <= media::H264PROFILE_MAX) { return webrtc::kVideoCodecH264; @@ -773,6 +775,7 @@ memset(&header, 0, sizeof(header)); switch (video_codec_type_) { case webrtc::kVideoCodecVP8: + case webrtc::kVideoCodecVP9: // Generate a header describing a single fragment. header.VerifyAndAllocateFragmentationHeader(1); header.fragmentationOffset[0] = 0; @@ -798,6 +801,29 @@ info.codecType = video_codec_type_; if (video_codec_type_ == webrtc::kVideoCodecVP8) { info.codecSpecific.VP8.keyIdx = -1; + } else if (video_codec_type_ == webrtc::kVideoCodecVP9) { + bool key_frame = image._frameType == webrtc::kVideoFrameKey; + info.codecSpecific.VP9.inter_pic_predicted = key_frame ? false : true; + info.codecSpecific.VP9.flexible_mode = false; + info.codecSpecific.VP9.ss_data_available = key_frame ? true : false; + info.codecSpecific.VP9.temporal_idx = webrtc::kNoTemporalIdx; + info.codecSpecific.VP9.temporal_up_switch = true; + info.codecSpecific.VP9.inter_layer_predicted = false; + info.codecSpecific.VP9.gof_idx = 0; + info.codecSpecific.VP9.num_spatial_layers = 1; + info.codecSpecific.VP9.first_frame_in_picture = true; + info.codecSpecific.VP9.end_of_picture = true; + info.codecSpecific.VP9.spatial_layer_resolution_present = false; + if (info.codecSpecific.VP9.ss_data_available) { + info.codecSpecific.VP9.spatial_layer_resolution_present = true; + info.codecSpecific.VP9.width[0] = image._encodedWidth; + info.codecSpecific.VP9.height[0] = image._encodedHeight; + info.codecSpecific.VP9.gof.num_frames_in_gof = 1; + info.codecSpecific.VP9.gof.temporal_idx[0] = 0; + info.codecSpecific.VP9.gof.temporal_up_switch[0] = false; + info.codecSpecific.VP9.gof.num_ref_pics[0] = 1; + info.codecSpecific.VP9.gof.pid_diff[0][0] = 1; + } } const auto result = @@ -850,6 +876,12 @@ return WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE; } } + if (codec_settings->codecType == webrtc::kVideoCodecVP9 && + codec_settings->VP9().numberOfSpatialLayers > 1) { + DVLOG(1) + << "VP9 SVC not yet supported by HW codecs, falling back to sofware."; + return WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE; + } impl_ = new Impl(gpu_factories_, ProfileToWebRtcVideoCodecType(profile_),
diff --git a/content/renderer/media/webrtc/rtc_video_encoder_factory.cc b/content/renderer/media/webrtc/rtc_video_encoder_factory.cc index fa2f38423..e39a1f0 100644 --- a/content/renderer/media/webrtc/rtc_video_encoder_factory.cc +++ b/content/renderer/media/webrtc/rtc_video_encoder_factory.cc
@@ -88,6 +88,11 @@ {cricket::kH264FmtpPacketizationMode, "1"}}; return format; } + } else if (profile.profile >= media::VP9PROFILE_MIN && + profile.profile <= media::VP9PROFILE_MAX) { + if (base::FeatureList::IsEnabled(features::kWebRtcHWVP9Encoding)) { + return webrtc::SdpVideoFormat("VP9"); + } } return base::nullopt; }
diff --git a/content/renderer/media_capture_from_element/html_video_element_capturer_source_unittest.cc b/content/renderer/media_capture_from_element/html_video_element_capturer_source_unittest.cc index 510dff25..18325df 100644 --- a/content/renderer/media_capture_from_element/html_video_element_capturer_source_unittest.cc +++ b/content/renderer/media_capture_from_element/html_video_element_capturer_source_unittest.cc
@@ -50,10 +50,12 @@ void Seek(double seconds) override {} void SetRate(double) override {} void SetVolume(double) override {} - void EnterPictureInPicture() override {} - void ExitPictureInPicture() override {} + void EnterPictureInPicture(PipWindowOpenedCallback) override {} + void ExitPictureInPicture(PipWindowClosedCallback) override {} void SetPictureInPictureCustomControls( const std::vector<blink::PictureInPictureControlInfo>&) override {} + void RegisterPictureInPictureWindowResizeCallback( + PipWindowResizedCallback) override {} blink::WebTimeRanges Buffered() const override { return blink::WebTimeRanges(); }
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 391d776b..3e8c0abe 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -1543,7 +1543,6 @@ "../browser/payments/payment_app_content_unittest_base.h", "../browser/payments/payment_app_provider_impl_unittest.cc", "../browser/payments/payment_manager_unittest.cc", - "../browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc", "../browser/plugin_list_unittest.cc", "../browser/presentation/presentation_service_impl_unittest.cc", "../browser/renderer_host/clipboard_host_impl_unittest.cc",
diff --git a/device/fido/authenticator_supported_options.cc b/device/fido/authenticator_supported_options.cc index 3e035ba..bf98a6b9 100644 --- a/device/fido/authenticator_supported_options.cc +++ b/device/fido/authenticator_supported_options.cc
@@ -20,7 +20,7 @@ cbor::Value ConvertToCBOR(const AuthenticatorSupportedOptions& options) { cbor::Value::MapValue option_map; option_map.emplace(kResidentKeyMapKey, options.supports_resident_key); - option_map.emplace(kUserPresenceMapKey, options.user_presence_required); + option_map.emplace(kUserPresenceMapKey, options.supports_user_presence); option_map.emplace(kPlatformDeviceMapKey, options.is_platform_device); using UvAvailability =
diff --git a/device/fido/authenticator_supported_options.h b/device/fido/authenticator_supported_options.h index 830be6d2..eb4e08c30 100644 --- a/device/fido/authenticator_supported_options.h +++ b/device/fido/authenticator_supported_options.h
@@ -48,7 +48,10 @@ // Indicates whether the device is capable of verifying the user on its own. UserVerificationAvailability user_verification_availability = UserVerificationAvailability::kNotSupported; - bool user_presence_required = true; + // supports_user_presence indicates whether the device can assert user + // presence. E.g. a touch for a USB device, or being placed in the reader + // field for an NFC device. + bool supports_user_presence = true; // Represents whether client pin in set and stored in device. Set as null // optional if client pin capability is not supported by the authenticator. ClientPinAvailability client_pin_availability =
diff --git a/device/fido/ctap_response_unittest.cc b/device/fido/ctap_response_unittest.cc index 128cdec..c8a9898 100644 --- a/device/fido/ctap_response_unittest.cc +++ b/device/fido/ctap_response_unittest.cc
@@ -574,7 +574,7 @@ base::ContainsKey(get_info_response->versions(), ProtocolVersion::kU2f)); EXPECT_TRUE(get_info_response->options().is_platform_device); EXPECT_TRUE(get_info_response->options().supports_resident_key); - EXPECT_TRUE(get_info_response->options().user_presence_required); + EXPECT_TRUE(get_info_response->options().supports_user_presence); EXPECT_EQ(AuthenticatorSupportedOptions::UserVerificationAvailability:: kSupportedAndConfigured, get_info_response->options().user_verification_availability);
diff --git a/device/fido/device_response_converter.cc b/device/fido/device_response_converter.cc index 11e3e1d3..a5f4538 100644 --- a/device/fido/device_response_converter.cc +++ b/device/fido/device_response_converter.cc
@@ -233,7 +233,7 @@ if (!option_map_it->second.is_bool()) return base::nullopt; - options.user_presence_required = option_map_it->second.GetBool(); + options.supports_user_presence = option_map_it->second.GetBool(); } option_map_it = option_map.find(CBOR(kUserVerificationMapKey));
diff --git a/device/fido/mac/authenticator.mm b/device/fido/mac/authenticator.mm index 8d9f532..6d871cd 100644 --- a/device/fido/mac/authenticator.mm +++ b/device/fido/mac/authenticator.mm
@@ -147,7 +147,7 @@ options.supports_resident_key = true; options.user_verification_availability = AuthenticatorSupportedOptions:: UserVerificationAvailability::kSupportedAndConfigured; - options.user_presence_required = true; + options.supports_user_presence = true; return options; }
diff --git a/device/fido/virtual_ctap2_device.cc b/device/fido/virtual_ctap2_device.cc index 6b5354dd..ba91245 100644 --- a/device/fido/virtual_ctap2_device.cc +++ b/device/fido/virtual_ctap2_device.cc
@@ -50,16 +50,87 @@ data.value_or(std::vector<uint8_t>{})))); } -bool AreGetAssertionOptionsValid(const AuthenticatorSupportedOptions& options, - const CtapGetAssertionRequest& request) { - if (request.user_presence_required() && !options.user_presence_required) - return false; +// CheckUserVerification implements the first, common steps of +// makeCredential and getAssertion from the CTAP2 spec. +CtapDeviceResponseCode CheckUserVerification( + bool is_make_credential, + const AuthenticatorSupportedOptions& options, + const base::Optional<std::vector<uint8_t>>& pin_auth, + const base::Optional<uint8_t>& pin_protocol, + UserVerificationRequirement user_verification, + base::RepeatingCallback<void(void)> simulate_press_callback, + bool* out_user_verified) { + // The following quotes are from the CTAP2 spec: - return request.user_verification() != - UserVerificationRequirement::kRequired || - options.user_verification_availability == - AuthenticatorSupportedOptions::UserVerificationAvailability:: - kSupportedAndConfigured; + // 1. "If authenticator supports clientPin and platform sends a zero length + // pinAuth, wait for user touch and then return either CTAP2_ERR_PIN_NOT_SET + // if pin is not set or CTAP2_ERR_PIN_INVALID if pin has been set." + const bool supports_pin = + options.client_pin_availability != + AuthenticatorSupportedOptions::ClientPinAvailability::kNotSupported; + if (supports_pin && pin_auth && pin_auth->empty()) { + if (simulate_press_callback) { + simulate_press_callback.Run(); + } + switch (options.client_pin_availability) { + case AuthenticatorSupportedOptions::ClientPinAvailability:: + kSupportedAndPinSet: + return CtapDeviceResponseCode::kCtap2ErrPinInvalid; + case AuthenticatorSupportedOptions::ClientPinAvailability:: + kSupportedButPinNotSet: + return CtapDeviceResponseCode::kCtap2ErrPinNotSet; + case AuthenticatorSupportedOptions::ClientPinAvailability::kNotSupported: + NOTREACHED(); + } + } + + // 2. "If authenticator supports clientPin and pinAuth parameter is present + // and the pinProtocol is not supported, return CTAP2_ERR_PIN_AUTH_INVALID + // error." + if (supports_pin && pin_auth && (!pin_protocol || *pin_protocol != 1)) { + return CtapDeviceResponseCode::kCtap2ErrPinInvalid; + } + + // 3. "If authenticator is not protected by some form of user verification and + // platform has set "uv" or pinAuth to get the user verification, return + // CTAP2_ERR_INVALID_OPTION." + const bool can_do_uv = + options.user_verification_availability == + AuthenticatorSupportedOptions::UserVerificationAvailability:: + kSupportedAndConfigured || + options.client_pin_availability == + AuthenticatorSupportedOptions::ClientPinAvailability:: + kSupportedAndPinSet; + if (!can_do_uv && + (user_verification == UserVerificationRequirement::kRequired || + pin_auth)) { + return CtapDeviceResponseCode::kCtap2ErrInvalidOption; + } + + // Step 4. + bool uv = false; + if (can_do_uv) { + if (user_verification == UserVerificationRequirement::kRequired) { + // Internal UV is assumed to always succeed. + if (simulate_press_callback) { + simulate_press_callback.Run(); + } + uv = true; + } + + if (pin_auth) { + DCHECK(pin_protocol && *pin_protocol == 1); + // The pin_auth argument is assumed to be correct. + uv = true; + } + + if (is_make_credential && !uv) { + return CtapDeviceResponseCode::kCtap2ErrPinRequired; + } + } + + *out_user_verified = uv; + return CtapDeviceResponseCode::kSuccess; } // Checks that whether the received MakeCredential request includes EA256 @@ -262,77 +333,15 @@ CtapMakeCredentialRequest request = std::get<0>(*request_and_hash); CtapMakeCredentialRequest::ClientDataHash client_data_hash = std::get<1>(*request_and_hash); - const AuthenticatorSupportedOptions& options = device_info_.options(); - // The following quotes are from the CTAP2 spec: - - // 1. "If authenticator supports clientPin and platform sends a zero length - // pinAuth, wait for user touch and then return either CTAP2_ERR_PIN_NOT_SET - // if pin is not set or CTAP2_ERR_PIN_INVALID if pin has been set." - const bool supports_pin = - options.client_pin_availability != - AuthenticatorSupportedOptions::ClientPinAvailability::kNotSupported; - if (supports_pin && request.pin_auth() && request.pin_auth()->empty()) { - if (mutable_state()->simulate_press_callback) { - mutable_state()->simulate_press_callback.Run(); - } - switch (device_info_.options().client_pin_availability) { - case AuthenticatorSupportedOptions::ClientPinAvailability:: - kSupportedAndPinSet: - return CtapDeviceResponseCode::kCtap2ErrPinInvalid; - case AuthenticatorSupportedOptions::ClientPinAvailability:: - kSupportedButPinNotSet: - return CtapDeviceResponseCode::kCtap2ErrPinNotSet; - case AuthenticatorSupportedOptions::ClientPinAvailability::kNotSupported: - NOTREACHED(); - } - } - - // 2. "If authenticator supports clientPin and pinAuth parameter is present - // and the pinProtocol is not supported, return CTAP2_ERR_PIN_AUTH_INVALID - // error." - if (supports_pin && request.pin_auth() && - (!request.pin_protocol() || *request.pin_protocol() != 1)) { - return CtapDeviceResponseCode::kCtap2ErrPinInvalid; - } - - // 3. "If authenticator is not protected by some form of user verification and - // platform has set "uv" or pinAuth to get the user verification, return - // CTAP2_ERR_INVALID_OPTION." - const bool can_do_uv = - options.user_verification_availability == - AuthenticatorSupportedOptions::UserVerificationAvailability:: - kSupportedAndConfigured || - options.client_pin_availability == - AuthenticatorSupportedOptions::ClientPinAvailability:: - kSupportedAndPinSet; - if (!can_do_uv && - (request.user_verification() == UserVerificationRequirement::kRequired || - request.pin_auth())) { - return CtapDeviceResponseCode::kCtap2ErrInvalidOption; - } - - // Step 4. - bool uv = false; - if (can_do_uv) { - if (request.user_verification() == UserVerificationRequirement::kRequired) { - // Internal UV is assumed to always succeed. - if (mutable_state()->simulate_press_callback) { - mutable_state()->simulate_press_callback.Run(); - } - uv = true; - } - - if (request.pin_auth()) { - DCHECK(request.pin_protocol() && *request.pin_protocol() == 1); - // The pin_auth argument is assumed to be correct. - uv = true; - } - - if (!uv) { - return CtapDeviceResponseCode::kCtap2ErrPinAuthInvalid; - } + bool user_verified; + const CtapDeviceResponseCode uv_error = CheckUserVerification( + true /* is makeCredential */, options, request.pin_auth(), + request.pin_protocol(), request.user_verification(), + mutable_state()->simulate_press_callback, &user_verified); + if (uv_error != CtapDeviceResponseCode::kSuccess) { + return uv_error; } // 6. Check for already registered credentials. @@ -357,10 +366,16 @@ } // Step 8. - if (request.resident_key_required() && !options.supports_resident_key) { + if ((request.resident_key_required() && !options.supports_resident_key) || + !options.supports_user_presence) { return CtapDeviceResponseCode::kCtap2ErrUnsupportedOption; } + // Step 10. + if (!user_verified && mutable_state()->simulate_press_callback) { + mutable_state()->simulate_press_callback.Run(); + } + // Create key to register. // Note: Non-deterministic, you need to mock this out if you rely on // deterministic behavior. @@ -394,7 +409,7 @@ } auto authenticator_data = ConstructAuthenticatorData( - rp_id_hash, uv, 01ul, std::move(attested_credential_data), + rp_id_hash, user_verified, 01ul, std::move(attested_credential_data), std::move(extensions)); auto sign_buffer = ConstructSignatureBuffer(authenticator_data, client_data_hash); @@ -436,6 +451,16 @@ CtapGetAssertionRequest request = std::get<0>(*request_and_hash); CtapGetAssertionRequest::ClientDataHash client_data_hash = std::get<1>(*request_and_hash); + const AuthenticatorSupportedOptions& options = device_info_.options(); + + bool user_verified; + const CtapDeviceResponseCode uv_error = CheckUserVerification( + false /* not makeCredential */, options, request.pin_auth(), + request.pin_protocol(), request.user_verification(), + mutable_state()->simulate_press_callback, &user_verified); + if (uv_error != CtapDeviceResponseCode::kSuccess) { + return uv_error; + } // Resident keys are not supported. if (!request.allow_list() || request.allow_list()->empty()) { @@ -444,17 +469,6 @@ return CtapDeviceResponseCode::kCtap2ErrNoCredentials; } - // Client pin option is not supported. - if (request.pin_auth()) { - DLOG(ERROR) << "Virtual CTAP2 device does not support client pin."; - return CtapDeviceResponseCode::kCtap2ErrOther; - } - - if (!AreGetAssertionOptionsValid(device_info_.options(), request)) { - DLOG(ERROR) << "Unsupported options required from the request."; - return CtapDeviceResponseCode::kCtap2ErrOther; - } - const auto rp_id_hash = fido_parsing_utils::CreateSHA256Hash(request.rp_id()); RegistrationData* found_data = nullptr; @@ -470,10 +484,21 @@ if (!found_data) return CtapDeviceResponseCode::kCtap2ErrNoCredentials; + // Step 6. + if (!options.supports_user_presence && request.user_presence_required()) { + return CtapDeviceResponseCode::kCtap2ErrUnsupportedOption; + } + + // Step 8. + if (request.user_presence_required() && !user_verified && + mutable_state()->simulate_press_callback) { + mutable_state()->simulate_press_callback.Run(); + } + found_data->counter++; - auto authenticator_data = ConstructAuthenticatorData( - rp_id_hash, false /* user verified */, found_data->counter, base::nullopt, - base::nullopt); + auto authenticator_data = + ConstructAuthenticatorData(rp_id_hash, user_verified, found_data->counter, + base::nullopt, base::nullopt); auto signature_buffer = ConstructSignatureBuffer(authenticator_data, client_data_hash);
diff --git a/extensions/browser/device_local_account_util.cc b/extensions/browser/device_local_account_util.cc index 2c29aeab..fa791e81 100644 --- a/extensions/browser/device_local_account_util.cc +++ b/extensions/browser/device_local_account_util.cc
@@ -111,6 +111,7 @@ "ilnpadgckeacioehlommkaafedibdeob", // Enterprise DeviceAttributes "oflckobdemeldmjddmlbaiaookhhcngo", // Citrix Receiver QA version "ljacajndfccfgnfohlgkdphmbnpkjflk", // Chrome Remote Desktop (Dev Build) + "behllobkkfkfnphdnhnkndlbkcpglgmj", // Autotest // Google Apps: "mclkkofklkfljcocdinagocijmpgbhab", // Google input tools
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc index d7a1e7b8..e15c8fd 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc +++ b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
@@ -82,12 +82,10 @@ MemoryTypeTracker* tracker) override; private: - bool GenGLTexture(); + gles2::Texture* GenGLTexture(); base::android::ScopedHardwareBufferHandle hardware_buffer_handle_; - // This texture will be lazily initialised/created when ProduceGLTexture is - // called. - gles2::Texture* texture_ = nullptr; + gles2::Texture* legacy_texture_ = nullptr; // TODO(vikassoni): In future when we add begin/end write support, we will // need to properly use this flag to pass the is_cleared_ information to @@ -100,7 +98,6 @@ base::ScopedFD gl_write_sync_fd_; base::ScopedFD vk_read_sync_fd_; - sk_sp<SkPromiseImageTexture> cached_promise_texture_; DISALLOW_COPY_AND_ASSIGN(SharedImageBackingAHB); }; @@ -115,6 +112,11 @@ : SharedImageRepresentationGLTexture(manager, backing, tracker), texture_(texture) {} + ~SharedImageRepresentationGLTextureAHB() override { + if (texture_) + texture_->RemoveLightweightRef(has_context()); + } + gles2::Texture* GetTexture() override { return texture_; } bool BeginAccess(GLenum mode) override { @@ -148,6 +150,11 @@ // Pass this fd to its backing. ahb_backing()->SetGLWriteSyncFd(std::move(sync_fd)); + + if (texture_) { + if (texture_->IsLevelCleared(texture_->target(), 0)) + backing()->SetCleared(); + } } } @@ -171,16 +178,20 @@ SharedImageBacking* backing, sk_sp<SkPromiseImageTexture> cached_promise_image_texture, MemoryTypeTracker* tracker, - GLenum target, - GLuint service_id) + gles2::Texture* texture) : SharedImageRepresentationSkia(manager, backing, tracker), - promise_texture_(cached_promise_image_texture) { + promise_texture_(cached_promise_image_texture), + texture_(std::move(texture)) { #if DCHECK_IS_ON() context_ = gl::GLContext::GetCurrent(); #endif } - ~SharedImageRepresentationSkiaGLAHB() override { DCHECK(!write_surface_); } + ~SharedImageRepresentationSkiaGLAHB() override { + DCHECK(!write_surface_); + if (texture_) + texture_->RemoveLightweightRef(has_context()); + } sk_sp<SkSurface> BeginWriteAccess( GrContext* gr_context, @@ -229,6 +240,11 @@ // Pass this fd to its backing. ahb_backing()->SetGLWriteSyncFd(std::move(sync_fd)); + + if (texture_) { + if (texture_->IsLevelCleared(texture_->target(), 0)) + backing()->SetCleared(); + } } sk_sp<SkPromiseImageTexture> BeginReadAccess(SkSurface* sk_surface) override { @@ -259,6 +275,7 @@ } sk_sp<SkPromiseImageTexture> promise_texture_; + gles2::Texture* texture_; SkSurface* write_surface_ = nullptr; #if DCHECK_IS_ON() gl::GLContext* context_; @@ -482,18 +499,15 @@ // Check to make sure buffer is explicitly destroyed using Destroy() api // before this destructor is called. DCHECK(!hardware_buffer_handle_.is_valid()); - DCHECK(!texture_); } bool SharedImageBackingAHB::IsCleared() const { - if (texture_) - return texture_->IsLevelCleared(texture_->target(), 0); return is_cleared_; } void SharedImageBackingAHB::SetCleared() { - if (texture_) - texture_->SetLevelCleared(texture_->target(), 0, true); + if (legacy_texture_) + legacy_texture_->SetLevelCleared(legacy_texture_->target(), 0, true); is_cleared_ = true; } @@ -502,18 +516,18 @@ bool SharedImageBackingAHB::ProduceLegacyMailbox( MailboxManager* mailbox_manager) { DCHECK(hardware_buffer_handle_.is_valid()); - if (!GenGLTexture()) + legacy_texture_ = GenGLTexture(); + if (!legacy_texture_) return false; - DCHECK(texture_); - mailbox_manager->ProduceTexture(mailbox(), texture_); + mailbox_manager->ProduceTexture(mailbox(), legacy_texture_); return true; } void SharedImageBackingAHB::Destroy() { DCHECK(hardware_buffer_handle_.is_valid()); - if (texture_) { - texture_->RemoveLightweightRef(have_context()); - texture_ = nullptr; + if (legacy_texture_) { + legacy_texture_->RemoveLightweightRef(have_context()); + legacy_texture_ = nullptr; } hardware_buffer_handle_.reset(); } @@ -548,12 +562,12 @@ MemoryTypeTracker* tracker) { // Use same texture for all the texture representations generated from same // backing. - if (!GenGLTexture()) + auto* texture = GenGLTexture(); + if (!texture) return nullptr; - DCHECK(texture_); return std::make_unique<SharedImageRepresentationGLTextureAHB>( - manager, this, tracker, texture_); + manager, this, tracker, std::move(texture)); } std::unique_ptr<SharedImageRepresentationSkia> @@ -567,26 +581,21 @@ return std::make_unique<SharedImageRepresentationSkiaVkAHB>(manager, this); } - if (!GenGLTexture()) + auto* texture = GenGLTexture(); + if (!texture) return nullptr; - if (!cached_promise_texture_) { - GrBackendTexture backend_texture; - GetGrBackendTexture(gl::GLContext::GetCurrent()->GetVersionInfo(), - texture_->target(), size(), texture_->service_id(), - format(), &backend_texture); - cached_promise_texture_ = SkPromiseImageTexture::Make(backend_texture); - } - DCHECK(texture_); + GrBackendTexture backend_texture; + GetGrBackendTexture(gl::GLContext::GetCurrent()->GetVersionInfo(), + texture->target(), size(), texture->service_id(), + format(), &backend_texture); + sk_sp<SkPromiseImageTexture> promise_texture = + SkPromiseImageTexture::Make(backend_texture); return std::make_unique<SharedImageRepresentationSkiaGLAHB>( - manager, this, cached_promise_texture_, tracker, texture_->target(), - texture_->service_id()); + manager, this, promise_texture, tracker, std::move(texture)); } -bool SharedImageBackingAHB::GenGLTexture() { - if (texture_) - return true; - +gles2::Texture* SharedImageBackingAHB::GenGLTexture() { DCHECK(hardware_buffer_handle_.is_valid()); // Target for AHB backed egl images. @@ -615,23 +624,23 @@ LOG(ERROR) << "Failed to create EGL image "; api->glBindTextureFn(target, old_texture_binding); api->glDeleteTexturesFn(1, &service_id); - return false; + return nullptr; } if (!egl_image->BindTexImage(target)) { LOG(ERROR) << "Failed to bind egl image"; api->glBindTextureFn(target, old_texture_binding); api->glDeleteTexturesFn(1, &service_id); - return false; + return nullptr; } // Create a gles2 Texture. - texture_ = new gles2::Texture(service_id); - texture_->SetLightweightRef(); - texture_->SetTarget(target, 1); - texture_->sampler_state_.min_filter = GL_LINEAR; - texture_->sampler_state_.mag_filter = GL_LINEAR; - texture_->sampler_state_.wrap_t = GL_CLAMP_TO_EDGE; - texture_->sampler_state_.wrap_s = GL_CLAMP_TO_EDGE; + auto* texture = new gles2::Texture(service_id); + texture->SetLightweightRef(); + texture->SetTarget(target, 1); + texture->sampler_state_.min_filter = GL_LINEAR; + texture->sampler_state_.mag_filter = GL_LINEAR; + texture->sampler_state_.wrap_t = GL_CLAMP_TO_EDGE; + texture->sampler_state_.wrap_s = GL_CLAMP_TO_EDGE; // If the backing is already cleared, no need to clear it again. gfx::Rect cleared_rect; @@ -640,14 +649,14 @@ GLenum gl_format = viz::GLDataFormat(format()); GLenum gl_type = viz::GLDataType(format()); - texture_->SetLevelInfo(target, 0, egl_image->GetInternalFormat(), - size().width(), size().height(), 1, 0, gl_format, - gl_type, cleared_rect); - texture_->SetLevelImage(target, 0, egl_image.get(), gles2::Texture::BOUND); - texture_->SetImmutable(true); + texture->SetLevelInfo(target, 0, egl_image->GetInternalFormat(), + size().width(), size().height(), 1, 0, gl_format, + gl_type, cleared_rect); + texture->SetLevelImage(target, 0, egl_image.get(), gles2::Texture::BOUND); + texture->SetImmutable(true); api->glBindTextureFn(target, old_texture_binding); DCHECK_EQ(egl_image->GetInternalFormat(), gl_format); - return true; + return texture; } SharedImageBackingFactoryAHB::SharedImageBackingFactoryAHB(
diff --git a/gpu/command_buffer/service/shared_image_manager.cc b/gpu/command_buffer/service/shared_image_manager.cc index d9abf9b..2739109 100644 --- a/gpu/command_buffer/service/shared_image_manager.cc +++ b/gpu/command_buffer/service/shared_image_manager.cc
@@ -43,7 +43,7 @@ MemoryTypeTracker* tracker) { DCHECK(backing->mailbox().IsSharedImage()); if (images_.find(backing->mailbox()) != images_.end()) { - LOG(ERROR) << "ShraedImageManager::Register: Trying to register an " + LOG(ERROR) << "SharedImageManager::Register: Trying to register an " "already registered mailbox."; backing->Destroy(); return nullptr;
diff --git a/gpu/command_buffer/service/shared_image_representation.h b/gpu/command_buffer/service/shared_image_representation.h index 9f58a8f..a1c5e550 100644 --- a/gpu/command_buffer/service/shared_image_representation.h +++ b/gpu/command_buffer/service/shared_image_representation.h
@@ -43,15 +43,20 @@ // Indicates that the underlying graphics context has been lost, and the // backing should be treated as destroyed. - void OnContextLost() { backing_->OnContextLost(); } + void OnContextLost() { + has_context_ = false; + backing_->OnContextLost(); + } protected: SharedImageBacking* backing() const { return backing_; } + bool has_context() const { return has_context_; } private: SharedImageManager* manager_; SharedImageBacking* backing_; MemoryTypeTracker* tracker_; + bool has_context_ = true; }; class SharedImageRepresentationFactoryRef : public SharedImageRepresentation {
diff --git a/gpu/command_buffer/service/texture_manager.h b/gpu/command_buffer/service/texture_manager.h index fe981ad..cc6d2185 100644 --- a/gpu/command_buffer/service/texture_manager.h +++ b/gpu/command_buffer/service/texture_manager.h
@@ -39,6 +39,8 @@ class SharedImageBackingFactoryGLTexture; class SharedImageBackingAHB; class SharedImageRepresentationGLTexture; +class SharedImageRepresentationGLTextureAHB; +class SharedImageRepresentationSkiaGLAHB; namespace gles2 { class GLStreamTextureImage; @@ -367,6 +369,8 @@ friend class gpu::SharedImageBackingGLTexture; friend class gpu::SharedImageBackingFactoryGLTexture; friend class gpu::SharedImageBackingAHB; + friend class gpu::SharedImageRepresentationGLTextureAHB; + friend class gpu::SharedImageRepresentationSkiaGLAHB; friend class TextureDefinition; friend class TextureManager; friend class TextureRef;
diff --git a/headless/lib/headless_browser_context_browsertest.cc b/headless/lib/headless_browser_context_browsertest.cc index 176a83f..6509a64 100644 --- a/headless/lib/headless_browser_context_browsertest.cc +++ b/headless/lib/headless_browser_context_browsertest.cc
@@ -147,7 +147,8 @@ std::unique_ptr<LoadObserver> load_observer_; }; -HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessBrowserContextIsolationTest); +// TODO(https://crbug.com/930356): Re-enable test. +DISABLED_HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessBrowserContextIsolationTest); IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, UserDataDir) { // We do not want to bother with posting tasks to create a temp dir.
diff --git a/ios/build/bots/chromium.mac/ios-slimnav.json b/ios/build/bots/chromium.mac/ios-slimnav.json index a3913f8..94827d46 100644 --- a/ios/build/bots/chromium.mac/ios-slimnav.json +++ b/ios/build/bots/chromium.mac/ios-slimnav.json
@@ -17,7 +17,7 @@ { "include": "screen_size_dependent_tests.json", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone 6s Plus", "os": "12.1", @@ -28,7 +28,7 @@ { "include": "screen_size_dependent_tests.json", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone 6s", "os": "12.1", @@ -39,7 +39,7 @@ { "include": "common_tests.json", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone 6s", "os": "12.1", @@ -50,7 +50,7 @@ { "include": "screen_size_dependent_tests.json", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPad Air 2", "os": "12.1", @@ -61,7 +61,7 @@ { "include": "screen_size_dependent_tests.json", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone 6s Plus", "os": "11.4", @@ -72,7 +72,7 @@ { "include": "screen_size_dependent_tests.json", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone 6s", "os": "11.4", @@ -83,7 +83,7 @@ { "include": "common_tests.json", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone 6s", "os": "11.4", @@ -94,7 +94,7 @@ { "include": "screen_size_dependent_tests.json", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPad Air 2", "os": "11.4", @@ -105,7 +105,7 @@ { "include": "eg_cq_tests.json", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone 6s", "os": "11.4", @@ -116,7 +116,7 @@ { "app": "ios_chrome_bookmarks_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPad Air 2", "os": "11.4", @@ -129,8 +129,7 @@ { "app": "ios_chrome_manual_fill_egtests", "test args": [ - "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging", - "--disable-features=SlimNavigationManager" + "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging,SlimNavigationManager" ], "device type": "iPad Air 2", "os": "11.4", @@ -142,7 +141,7 @@ { "app": "ios_chrome_web_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPad Air 2", "os": "11.4", @@ -154,7 +153,7 @@ { "app": "ios_chrome_settings_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPad Air 2", "os": "11.4", @@ -166,7 +165,7 @@ { "app": "ios_chrome_reading_list_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPad Air 2", "os": "11.4", @@ -178,7 +177,7 @@ { "app": "ios_showcase_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPad Air 2", "os": "11.4", @@ -190,7 +189,7 @@ { "app": "ios_chrome_bookmarks_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "shard size": 2, "device type": "iPad Air 2", @@ -203,8 +202,7 @@ { "app": "ios_chrome_manual_fill_egtests", "test args": [ - "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging", - "--disable-features=SlimNavigationManager" + "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging,SlimNavigationManager" ], "xctest": true, "device type": "iPad Air 2", @@ -216,7 +214,7 @@ { "app": "ios_chrome_web_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPad Air 2", "os": "12.1", @@ -228,7 +226,7 @@ { "app": "ios_chrome_settings_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPad Air 2", "os": "12.1", @@ -240,7 +238,7 @@ { "app": "ios_chrome_reading_list_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPad Air 2", "os": "12.1", @@ -252,7 +250,7 @@ { "app": "ios_showcase_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPad Air 2", "os": "12.1", @@ -264,7 +262,7 @@ { "app": "ios_chrome_bookmarks_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone X", "os": "11.4", @@ -277,8 +275,7 @@ { "app": "ios_chrome_manual_fill_egtests", "test args": [ - "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging", - "--disable-features=SlimNavigationManager" + "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging,SlimNavigationManager" ], "xctest": true, "device type": "iPhone X", @@ -290,7 +287,7 @@ { "app": "ios_chrome_web_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone X", "os": "11.4", @@ -302,7 +299,7 @@ { "app": "ios_chrome_settings_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone X", "os": "11.4", @@ -314,7 +311,7 @@ { "app": "ios_chrome_reading_list_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone X", "os": "11.4", @@ -326,7 +323,7 @@ { "app": "ios_showcase_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone X", "os": "11.4", @@ -338,7 +335,7 @@ { "app": "ios_chrome_bookmarks_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "shard size": 2, "device type": "iPhone X", @@ -351,8 +348,7 @@ { "app": "ios_chrome_manual_fill_egtests", "test args": [ - "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging", - "--disable-features=SlimNavigationManager" + "--enable-features=AutofillManualFallback,AutofillManualFallbackPhaseTwo,WebFrameMessaging,SlimNavigationManager" ], "device type": "iPhone X", "os": "12.1", @@ -364,7 +360,7 @@ { "app": "ios_chrome_web_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone X", "os": "12.1", @@ -376,7 +372,7 @@ { "app": "ios_chrome_settings_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone X", "os": "12.1", @@ -388,7 +384,7 @@ { "app": "ios_chrome_reading_list_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone X", "os": "12.1", @@ -400,7 +396,7 @@ { "app": "ios_showcase_egtests", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone X", "os": "12.1", @@ -412,7 +408,7 @@ { "include": "eg_cq_tests.json", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone X", "os": "11.4", @@ -423,7 +419,7 @@ { "include": "eg_cq_tests.json", "test args": [ - "--disable-features=SlimNavigationManager" + "--enable-features=SlimNavigationManager" ], "device type": "iPhone X", "os": "12.1",
diff --git a/ios/chrome/browser/autofill/form_input_accessory_consumer.h b/ios/chrome/browser/autofill/form_input_accessory_consumer.h index 4264e64..c3b3d37 100644 --- a/ios/chrome/browser/autofill/form_input_accessory_consumer.h +++ b/ios/chrome/browser/autofill/form_input_accessory_consumer.h
@@ -35,10 +35,13 @@ // Removes the animations on the custom keyboard view. - (void)removeAnimationsOnKeyboardView; -// Removes the presented keyboard view and the input accessory view. Also clears -// the references to them, so nothing shows until a new custom view is passed. +// Removes the presented keyboard view and the input accessory view. - (void)restoreOriginalKeyboardView; +// Same as |restoreOriginalKeyboardView| and also clears the references to them, +// so nothing shows until a new custom view is passed. +- (void)restoreOriginalKeyboardViewAndClearReferences; + // Removes the presented keyboard view and the input accessory view until // |continueCustomKeyboardView| is called. - (void)pauseCustomKeyboardView;
diff --git a/ios/chrome/browser/autofill/form_input_accessory_view_controller.mm b/ios/chrome/browser/autofill/form_input_accessory_view_controller.mm index 46f54ef..40864d99 100644 --- a/ios/chrome/browser/autofill/form_input_accessory_view_controller.mm +++ b/ios/chrome/browser/autofill/form_input_accessory_view_controller.mm
@@ -219,6 +219,12 @@ self.keyboardReplacementView = nil; } +// TODO:(crbug.com/923857) Merge this method and restoreOriginalKeyboardView. +- (void)restoreOriginalKeyboardViewAndClearReferences { + [self restoreOriginalKeyboardView]; + self.inputAccessoryView = nil; +} + - (void)pauseCustomKeyboardView { [self removeCustomInputAccessoryView]; [self.keyboardReplacementView removeFromSuperview];
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.mm b/ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.mm index 1ecc4128..63142f4 100644 --- a/ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.mm +++ b/ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.mm
@@ -13,6 +13,7 @@ #include "components/keyed_service/core/service_access_type.h" #import "ios/chrome/browser/autofill/form_input_accessory_view_controller.h" #include "ios/chrome/browser/autofill/personal_data_manager_factory.h" +#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/passwords/ios_chrome_password_store_factory.h" #import "ios/chrome/browser/ui/autofill/form_input_accessory_mediator.h" #import "ios/chrome/browser/ui/autofill/manual_fill/address_coordinator.h" @@ -77,8 +78,12 @@ auto passwordStore = IOSChromePasswordStoreFactory::GetForBrowserState( browserState, ServiceAccessType::EXPLICIT_ACCESS); + + // There is no personal data manager in OTR (incognito). Get the original + // one for manual fallback. autofill::PersonalDataManager* personalDataManager = - autofill::PersonalDataManagerFactory::GetForBrowserState(browserState); + autofill::PersonalDataManagerFactory::GetForBrowserState( + browserState->GetOriginalChromeBrowserState()); _formInputAccessoryMediator = [[FormInputAccessoryMediator alloc] initWithConsumer:self.formInputAccessoryViewController @@ -125,6 +130,7 @@ CardCoordinator* cardCoordinator = [[CardCoordinator alloc] initWithBaseViewController:self.baseViewController browserState:self.browserState + ->GetOriginalChromeBrowserState() webStateList:self.webStateList injectionHandler:self.manualFillInjectionHandler]; cardCoordinator.delegate = self; @@ -142,6 +148,7 @@ AddressCoordinator* addressCoordinator = [[AddressCoordinator alloc] initWithBaseViewController:self.baseViewController browserState:self.browserState + ->GetOriginalChromeBrowserState() injectionHandler:self.manualFillInjectionHandler]; addressCoordinator.delegate = self; if (IsIPadIdiom()) {
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory_mediator.mm b/ios/chrome/browser/ui/autofill/form_input_accessory_mediator.mm index cbeca5e7..b55c41f 100644 --- a/ios/chrome/browser/ui/autofill/form_input_accessory_mediator.mm +++ b/ios/chrome/browser/ui/autofill/form_input_accessory_mediator.mm
@@ -180,8 +180,6 @@ [[PasswordFetcher alloc] initWithPasswordStore:passwordStore delegate:self]; } - // There is no personal data manager in OTR (incognito). - // TODO:(crbug.com/905720) Support Incognito. if (personalDataManager) { _personalDataManager = personalDataManager; _personalDataManagerObserver.reset( @@ -341,6 +339,7 @@ // element gets the focus. On iPad the keyboard stays dismissed. if (IsIPadIdiom()) { [self reset]; + [self.consumer restoreOriginalKeyboardViewAndClearReferences]; } else { [self pauseCustomKeyboardView]; }
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm index 50f50ab..cb599133 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm +++ b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm
@@ -24,6 +24,7 @@ #import "ios/chrome/test/app/chrome_test_util.h" #import "ios/chrome/test/earl_grey/chrome_actions.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" +#import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h" #import "ios/chrome/test/earl_grey/chrome_matchers.h" #import "ios/chrome/test/earl_grey/chrome_test_case.h" #include "ios/web/public/features.h" @@ -490,6 +491,12 @@ UndockKeyboard(); + // Verify the profiles icon is visible. EarlGrey synchronization isn't working + // properly with the keyboard, instead this waits with a condition for the + // icon to appear. + [self waitForMatcherToBeVisible:ProfilesIconMatcher() + timeout:base::test::ios::kWaitForUIElementTimeout]; + // Tap on the profiles icon. [[EarlGrey selectElementWithMatcher:ProfilesIconMatcher()] performAction:grey_tap()]; @@ -545,9 +552,11 @@ UndockKeyboard(); - // Verify the profiles icon. - [[EarlGrey selectElementWithMatcher:ProfilesIconMatcher()] - assertWithMatcher:grey_sufficientlyVisible()]; + // Verify the profiles icon is visible. EarlGrey synchronization isn't working + // properly with the keyboard, instead this waits with a condition for the + // icon to appear. + [self waitForMatcherToBeVisible:ProfilesIconMatcher() + timeout:base::test::ios::kWaitForUIElementTimeout]; DockKeyboard(); @@ -557,4 +566,91 @@ assertWithMatcher:grey_sufficientlyVisible()]; } +// Tests that the manual fallback view is present in incognito. +- (void)testIncognitoManualFallbackMenu { + // Add the profile to use for verification. + AddAutofillProfile(_personalDataManager); + + // Bring up the keyboard by tapping the city, which is the element before the + // picker. + [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()] + performAction:chrome_test_util::TapWebElement(kFormElementCity)]; + + // Verify the profiles icon is visible. + [[EarlGrey selectElementWithMatcher:ProfilesIconMatcher()] + assertWithMatcher:grey_sufficientlyVisible()]; + + // Open a tab in incognito. + [ChromeEarlGrey openNewIncognitoTab]; + [ChromeEarlGreyUI focusOmnibox]; // To simulate a user navigating. + const GURL URL = self.testServer->GetURL(kFormHTMLFile); + [ChromeEarlGrey loadURL:URL]; + [ChromeEarlGrey waitForWebViewContainingText:"Profile form"]; + + // Bring up the keyboard by tapping the city, which is the element before the + // picker. + [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()] + performAction:chrome_test_util::TapWebElement(kFormElementCity)]; + + // Verify the profiles icon is visible. + [[EarlGrey selectElementWithMatcher:ProfilesIconMatcher()] + assertWithMatcher:grey_sufficientlyVisible()]; +} + +// Tests that the manual fallback view is not duplicated after incognito. +- (void)testReturningFromIncognitoDoesNotDuplicatesManualFallbackMenu { + // Add the profile to use for verification. + AddAutofillProfile(_personalDataManager); + + // Bring up the keyboard by tapping the city, which is the element before the + // picker. + [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()] + performAction:chrome_test_util::TapWebElement(kFormElementCity)]; + + // Verify the profiles icon is visible. + [[EarlGrey selectElementWithMatcher:ProfilesIconMatcher()] + assertWithMatcher:grey_sufficientlyVisible()]; + + // Open a tab in incognito. + [ChromeEarlGrey openNewIncognitoTab]; + [ChromeEarlGreyUI focusOmnibox]; // To simulate a user navigating. + const GURL URL = self.testServer->GetURL(kFormHTMLFile); + [ChromeEarlGrey loadURL:URL]; + [ChromeEarlGrey waitForWebViewContainingText:"Profile form"]; + + // Bring up the keyboard by tapping the city, which is the element before the + // picker. + [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()] + performAction:chrome_test_util::TapWebElement(kFormElementCity)]; + + // Open a regular tab. + [ChromeEarlGrey openNewTab]; + [ChromeEarlGrey loadURL:URL]; + [ChromeEarlGrey waitForWebViewContainingText:"Profile form"]; + + // Bring up the keyboard by tapping the city, which is the element before the + // picker. + [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()] + performAction:chrome_test_util::TapWebElement(kFormElementCity)]; + + // This will fail if there is more than one profiles icon in the hierarchy. + [[EarlGrey selectElementWithMatcher:ProfilesIconMatcher()] + assertWithMatcher:grey_sufficientlyVisible()]; +} + +#pragma mark - Utilities + +// Waits for the passed matcher to be visible with a given timeout. +- (void)waitForMatcherToBeVisible:(id<GREYMatcher>)matcher + timeout:(CFTimeInterval)timeout { + [[GREYCondition conditionWithName:@"Wait for visible matcher condition" + block:^BOOL { + NSError* error; + [[EarlGrey selectElementWithMatcher:matcher] + assertWithMatcher:grey_sufficientlyVisible() + error:&error]; + return error == nil; + }] waitWithTimeout:timeout]; +} + @end
diff --git a/ios/chrome/browser/ui/main/browser_coordinator.mm b/ios/chrome/browser/ui/main/browser_coordinator.mm index 238ba0c5..5a05a60 100644 --- a/ios/chrome/browser/ui/main/browser_coordinator.mm +++ b/ios/chrome/browser/ui/main/browser_coordinator.mm
@@ -248,17 +248,12 @@ [self.ARQuickLookCoordinator start]; } - // TODO(crbug.com/923857): add manual fallback to incognito mode. Right now - // two formInputAccessoryViews are (lazy) created for normal and incognito, - // and the incognito remains on top when going back to normal. - if (!self.browserState->IsOffTheRecord()) { - self.formInputAccessoryCoordinator = [[FormInputAccessoryCoordinator alloc] - initWithBaseViewController:self.viewController - browserState:self.browserState - webStateList:self.tabModel.webStateList]; - self.formInputAccessoryCoordinator.delegate = self; - [self.formInputAccessoryCoordinator start]; - } + self.formInputAccessoryCoordinator = [[FormInputAccessoryCoordinator alloc] + initWithBaseViewController:self.viewController + browserState:self.browserState + webStateList:self.tabModel.webStateList]; + self.formInputAccessoryCoordinator.delegate = self; + [self.formInputAccessoryCoordinator start]; if (base::FeatureList::IsEnabled(translate::kCompactTranslateInfobarIOS)) { self.translateInfobarCoordinator = [[TranslateInfobarCoordinator alloc]
diff --git a/ios/web/features.mm b/ios/web/features.mm index 29fe7cac..8c9e0223 100644 --- a/ios/web/features.mm +++ b/ios/web/features.mm
@@ -14,7 +14,7 @@ base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kSlimNavigationManager{"SlimNavigationManager", - base::FEATURE_ENABLED_BY_DEFAULT}; + base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kWKHTTPSystemCookieStore{"WKHTTPSystemCookieStore", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ipc/ipc_logging.cc b/ipc/ipc_logging.cc index aad1b73..73bef08e 100644 --- a/ipc/ipc_logging.cc +++ b/ipc/ipc_logging.cc
@@ -178,7 +178,7 @@ if (it == log_function_map_->end()) { if (name) { *name = "[UNKNOWN MSG "; - *name += base::IntToString(type); + *name += base::NumberToString(type); *name += " ]"; } return;
diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc index 0f6f54f80..ec04c77 100644 --- a/ipc/ipc_message_utils.cc +++ b/ipc/ipc_message_utils.cc
@@ -301,7 +301,7 @@ } void ParamTraits<signed char>::Log(const param_type& p, std::string* l) { - l->append(base::IntToString(p)); + l->append(base::NumberToString(p)); } void ParamTraits<unsigned char>::Write(base::Pickle* m, const param_type& p) { @@ -319,7 +319,7 @@ } void ParamTraits<unsigned char>::Log(const param_type& p, std::string* l) { - l->append(base::UintToString(p)); + l->append(base::NumberToString(p)); } void ParamTraits<unsigned short>::Write(base::Pickle* m, const param_type& p) {
diff --git a/media/base/media_log.cc b/media/base/media_log.cc index fd4c41b8..21eac6c4 100644 --- a/media/base/media_log.cc +++ b/media/base/media_log.cc
@@ -264,10 +264,16 @@ MediaLogEvent::Type type, const std::string& property, base::TimeDelta value) { + return CreateTimeEvent(type, property, value.InSecondsF()); +} + +std::unique_ptr<MediaLogEvent> MediaLog::CreateTimeEvent( + MediaLogEvent::Type type, + const std::string& property, + double value) { std::unique_ptr<MediaLogEvent> event(CreateEvent(type)); - double value_in_seconds = value.InSecondsF(); - if (std::isfinite(value_in_seconds)) - event->params.SetDouble(property, value_in_seconds); + if (std::isfinite(value)) + event->params.SetDouble(property, value); else event->params.SetString(property, "unknown"); return event; @@ -280,12 +286,6 @@ return event; } -std::unique_ptr<MediaLogEvent> MediaLog::CreateSeekEvent(double seconds) { - std::unique_ptr<MediaLogEvent> event(CreateEvent(MediaLogEvent::SEEK)); - event->params.SetDouble("seek_target", seconds); - return event; -} - std::unique_ptr<MediaLogEvent> MediaLog::CreatePipelineStateChangedEvent( PipelineImpl::State state) { std::unique_ptr<MediaLogEvent> event(
diff --git a/media/base/media_log.h b/media/base/media_log.h index 164b6e94..937991a8 100644 --- a/media/base/media_log.h +++ b/media/base/media_log.h
@@ -109,8 +109,10 @@ std::unique_ptr<MediaLogEvent> CreateTimeEvent(MediaLogEvent::Type type, const std::string& property, base::TimeDelta value); + std::unique_ptr<MediaLogEvent> CreateTimeEvent(MediaLogEvent::Type type, + const std::string& property, + double value); std::unique_ptr<MediaLogEvent> CreateLoadEvent(const std::string& url); - std::unique_ptr<MediaLogEvent> CreateSeekEvent(double seconds); std::unique_ptr<MediaLogEvent> CreatePipelineStateChangedEvent( PipelineImpl::State state); std::unique_ptr<MediaLogEvent> CreatePipelineErrorEvent(PipelineStatus error);
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc index 71a93d0..489aeeb 100644 --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc
@@ -318,6 +318,10 @@ const base::Feature kVaapiVP8Encoder{"VaapiVP8Encoder", base::FEATURE_ENABLED_BY_DEFAULT}; +// Enable VA-API hardware encode acceleration for VP9. +const base::Feature kVaapiVP9Encoder{"VaapiVP9Encoder", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Inform video blitter of video color space. const base::Feature kVideoBlitColorAccuracy{"video-blit-color-accuracy", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/media/base/media_switches.h b/media/base/media_switches.h index f5cc12b0..493ba61 100644 --- a/media/base/media_switches.h +++ b/media/base/media_switches.h
@@ -139,6 +139,7 @@ MEDIA_EXPORT extern const base::Feature kUseSurfaceLayerForVideo; MEDIA_EXPORT extern const base::Feature kUseSurfaceLayerForVideoPIP; MEDIA_EXPORT extern const base::Feature kVaapiVP8Encoder; +MEDIA_EXPORT extern const base::Feature kVaapiVP9Encoder; MEDIA_EXPORT extern const base::Feature kVideoBlitColorAccuracy; #if defined(OS_ANDROID)
diff --git a/media/blink/webmediaplayer_delegate.h b/media/blink/webmediaplayer_delegate.h index c3f9c0d7..af33ac9 100644 --- a/media/blink/webmediaplayer_delegate.h +++ b/media/blink/webmediaplayer_delegate.h
@@ -16,6 +16,10 @@ class Size; } // namespace gfx +namespace viz { +class SurfaceId; +} // namespace viz + namespace media { enum class MediaContentType; @@ -114,12 +118,38 @@ // Notify that the muted status of the media player has changed. virtual void DidPlayerMutedStatusChange(int delegate_id, bool muted) = 0; + // Notify that the source media player has entered Picture-in-Picture mode. + virtual void DidPictureInPictureModeStart( + int delegate_id, + const viz::SurfaceId&, + const gfx::Size&, + blink::WebMediaPlayer::PipWindowOpenedCallback, + bool show_play_pause_button) = 0; + + // Notify that the source media player has exited Picture-in-Picture mode. + virtual void DidPictureInPictureModeEnd(int delegate_id, + base::OnceClosure) = 0; + // Notify that custom controls have been sent to be assigned to the // Picture-in-Picture window. virtual void DidSetPictureInPictureCustomControls( int delegate_id, const std::vector<blink::PictureInPictureControlInfo>&) = 0; + // Notify that the media player in Picture-in-Picture had a change of surface. + virtual void DidPictureInPictureSurfaceChange( + int delegate_id, + const viz::SurfaceId&, + const gfx::Size&, + bool show_play_pause_button) = 0; + + // Registers a callback associated with a player that will be called when + // receiving a notification from the browser process that the + // Picture-in-Picture associated to this player has been resized. + virtual void RegisterPictureInPictureWindowResizeCallback( + int player_id, + blink::WebMediaPlayer::PipWindowResizedCallback) = 0; + // Notify that playback is stopped. This will drop wake locks and remove any // external controls. //
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc index e903282..6e9d472 100644 --- a/media/blink/webmediaplayer_impl.cc +++ b/media/blink/webmediaplayer_impl.cc
@@ -517,8 +517,11 @@ // disabled. // The viz::SurfaceId may be updated when the video begins playback or when // the size of the video changes. - if (client_) - client_->OnPictureInPictureStateChange(); + if (client_ && IsInPictureInPicture() && !client_->IsInAutoPIP()) { + delegate_->DidPictureInPictureSurfaceChange( + delegate_id_, surface_id, pipeline_metadata_.natural_size, + ShouldShowPlayPauseButtonInPictureInPictureWindow()); + } } bool WebMediaPlayerImpl::SupportsOverlayFullscreenVideo() { @@ -808,7 +811,8 @@ void WebMediaPlayerImpl::Seek(double seconds) { DVLOG(1) << __func__ << "(" << seconds << "s)"; DCHECK(main_task_runner_->BelongsToCurrentThread()); - media_log_->AddEvent(media_log_->CreateSeekEvent(seconds)); + media_log_->AddEvent( + media_log_->CreateTimeEvent(MediaLogEvent::SEEK, "seek_target", seconds)); DoSeek(base::TimeDelta::FromSecondsD(seconds), true); } @@ -901,17 +905,30 @@ UpdatePlayState(); } -void WebMediaPlayerImpl::EnterPictureInPicture() { +void WebMediaPlayerImpl::EnterPictureInPicture( + blink::WebMediaPlayer::PipWindowOpenedCallback callback) { if (!surface_layer_for_video_enabled_) ActivateSurfaceLayerForVideo(); DCHECK(bridge_); - DCHECK(bridge_->GetSurfaceId().is_valid()); + + const viz::SurfaceId& surface_id = bridge_->GetSurfaceId(); + DCHECK(surface_id.is_valid()); + + // Notifies the browser process that the player should now be in + // Picture-in-Picture mode. + delegate_->DidPictureInPictureModeStart( + delegate_id_, surface_id, pipeline_metadata_.natural_size, + std::move(callback), ShouldShowPlayPauseButtonInPictureInPictureWindow()); } -void WebMediaPlayerImpl::ExitPictureInPicture() { +void WebMediaPlayerImpl::ExitPictureInPicture( + blink::WebMediaPlayer::PipWindowClosedCallback callback) { + // Notifies the browser process that Picture-in-Picture has ended. It will + // clear out the states and close the window. + delegate_->DidPictureInPictureModeEnd(delegate_id_, std::move(callback)); + // Internal cleanups. - // TODO(mlamouri): remove the need for this. OnPictureInPictureModeEnded(); } @@ -920,6 +937,14 @@ delegate_->DidSetPictureInPictureCustomControls(delegate_id_, controls); } +void WebMediaPlayerImpl::RegisterPictureInPictureWindowResizeCallback( + blink::WebMediaPlayer::PipWindowResizedCallback callback) { + DCHECK(IsInPictureInPicture() && !client_->IsInAutoPIP()); + + delegate_->RegisterPictureInPictureWindowResizeCallback(delegate_id_, + std::move(callback)); +} + void WebMediaPlayerImpl::SetSinkId( const blink::WebString& sink_id, std::unique_ptr<blink::WebSetSinkIdCallbacks> web_callback) { @@ -3120,16 +3145,6 @@ return opaque_; } -int WebMediaPlayerImpl::GetDelegateId() { - return delegate_id_; -} - -base::Optional<viz::SurfaceId> WebMediaPlayerImpl::GetSurfaceId() { - if (!surface_layer_for_video_enabled_) - return base::nullopt; - return bridge_->GetSurfaceId(); -} - bool WebMediaPlayerImpl::ShouldPauseVideoWhenHidden() const { if (!is_background_video_playback_enabled_) return true; @@ -3434,6 +3449,11 @@ WebMediaPlayer::DisplayType::kPictureInPicture; } +bool WebMediaPlayerImpl::ShouldShowPlayPauseButtonInPictureInPictureWindow() + const { + return Duration() != std::numeric_limits<double>::infinity(); +} + void WebMediaPlayerImpl::MaybeSetContainerName() { // MSE nor MediaPlayerRenderer provide container information. if (chunk_demuxer_ || using_media_player_renderer_)
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h index 7183daa..2030aee 100644 --- a/media/blink/webmediaplayer_impl.h +++ b/media/blink/webmediaplayer_impl.h
@@ -120,10 +120,14 @@ void Seek(double seconds) override; void SetRate(double rate) override; void SetVolume(double volume) override; - void EnterPictureInPicture() override; - void ExitPictureInPicture() override; + void EnterPictureInPicture( + blink::WebMediaPlayer::PipWindowOpenedCallback callback) override; + void ExitPictureInPicture( + blink::WebMediaPlayer::PipWindowClosedCallback callback) override; void SetPictureInPictureCustomControls( const std::vector<blink::PictureInPictureControlInfo>&) override; + void RegisterPictureInPictureWindowResizeCallback( + blink::WebMediaPlayer::PipWindowResizedCallback callback) override; void SetSinkId( const blink::WebString& sink_id, std::unique_ptr<blink::WebSetSinkIdCallbacks> web_callback) override; @@ -260,11 +264,10 @@ // paused; see UpdatePlayState_ComputePlayState() for the exact details. void ForceStaleStateForTesting(ReadyState target_state) override; bool IsSuspendedForTesting() override; + bool DidLazyLoad() const override; void OnBecameVisible() override; bool IsOpaque() const override; - int GetDelegateId() override; - base::Optional<viz::SurfaceId> GetSurfaceId() override; bool IsBackgroundMediaSuspendEnabled() const { return is_background_suspend_enabled_; @@ -575,6 +578,11 @@ void SendBytesReceivedUpdate(); + // Returns whether the Picture-in-Picture window should contain a play/pause + // button. It will return false if video is "live", in other words if duration + // is equals to Infinity. + bool ShouldShowPlayPauseButtonInPictureInPictureWindow() const; + blink::WebLocalFrame* const frame_; // The playback state last reported to |delegate_|, to avoid setting duplicate
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc index 33f932eb..ddc23ba 100644 --- a/media/blink/webmediaplayer_impl_unittest.cc +++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -148,9 +148,9 @@ MOCK_METHOD1(ActivateViewportIntersectionMonitoring, void(bool)); MOCK_METHOD1(MediaRemotingStarted, void(const blink::WebString&)); MOCK_METHOD1(MediaRemotingStopped, void(blink::WebLocalizedString::Name)); + MOCK_METHOD0(PictureInPictureStarted, void()); MOCK_METHOD0(PictureInPictureStopped, void()); MOCK_METHOD1(PictureInPictureControlClicked, void(const blink::WebString&)); - MOCK_METHOD0(OnPictureInPictureStateChange, void()); MOCK_CONST_METHOD0(CouldPlayIfEnoughData, bool()); MOCK_METHOD0(RequestPlay, void()); MOCK_METHOD0(RequestPause, void()); @@ -215,9 +215,21 @@ DCHECK_EQ(player_id_, delegate_id); } + MOCK_METHOD5(DidPictureInPictureModeStart, + void(int, + const viz::SurfaceId&, + const gfx::Size&, + blink::WebMediaPlayer::PipWindowOpenedCallback, + bool)); + MOCK_METHOD2(DidPictureInPictureModeEnd, + void(int, blink::WebMediaPlayer::PipWindowClosedCallback)); MOCK_METHOD2(DidSetPictureInPictureCustomControls, void(int, const std::vector<blink::PictureInPictureControlInfo>&)); + MOCK_METHOD4(DidPictureInPictureSurfaceChange, + void(int, const viz::SurfaceId&, const gfx::Size&, bool)); + MOCK_METHOD2(RegisterPictureInPictureWindowResizeCallback, + void(int, blink::WebMediaPlayer::PipWindowResizedCallback)); void ClearStaleFlag(int player_id) override { DCHECK_EQ(player_id_, player_id); @@ -1554,8 +1566,8 @@ } } -// Tests that updating the surface id calls OnPictureInPictureStateChange. -TEST_F(WebMediaPlayerImplTest, PictureInPictureStateChange) { +// Tests delegate methods are called when Picture-in-Picture is triggered. +TEST_F(WebMediaPlayerImplTest, PictureInPictureTriggerCallback) { base::test::ScopedFeatureList feature_list; feature_list.InitFromCommandLine(kUseSurfaceLayerForVideo.name, ""); @@ -1576,10 +1588,68 @@ EXPECT_CALL(client_, DisplayType()) .WillRepeatedly( Return(blink::WebMediaPlayer::DisplayType::kPictureInPicture)); - EXPECT_CALL(client_, OnPictureInPictureStateChange()).Times(1); + EXPECT_CALL(delegate_, + DidPictureInPictureSurfaceChange( + delegate_.player_id(), surface_id_, GetNaturalSize(), true)) + .Times(2); wmpi_->OnSurfaceIdUpdated(surface_id_); + EXPECT_CALL(delegate_, + DidPictureInPictureModeStart(delegate_.player_id(), surface_id_, + GetNaturalSize(), _, true)); + + wmpi_->EnterPictureInPicture(base::DoNothing()); + wmpi_->OnSurfaceIdUpdated(surface_id_); + + // Updating SurfaceId should NOT exit Picture-in-Picture. + EXPECT_CALL(delegate_, DidPictureInPictureModeEnd(delegate_.player_id(), _)) + .Times(0); + EXPECT_CALL(*surface_layer_bridge_ptr_, ClearObserver()); +} + +// Tests delegate methods are called with the appropriate play/pause button +// state when Picture-in-Picture is triggered and video duration is infinity. +TEST_F(WebMediaPlayerImplTest, + PictureInPictureTriggerWithInfiniteDurationCallback) { + base::test::ScopedFeatureList feature_list; + feature_list.InitFromCommandLine(kUseSurfaceLayerForVideo.name, ""); + + InitializeWebMediaPlayerImpl(); + SetDuration(kInfiniteDuration); + + EXPECT_CALL(*surface_layer_bridge_ptr_, CreateSurfaceLayer()); + EXPECT_CALL(*surface_layer_bridge_ptr_, GetSurfaceId()) + .WillRepeatedly(ReturnRef(surface_id_)); + EXPECT_CALL(*surface_layer_bridge_ptr_, GetLocalSurfaceIdAllocationTime()) + .WillRepeatedly(Return(base::TimeTicks())); + EXPECT_CALL(*compositor_, EnableSubmission(_, _, _, _)); + EXPECT_CALL(*surface_layer_bridge_ptr_, SetContentsOpaque(false)); + + PipelineMetadata metadata; + metadata.has_video = true; + OnMetadata(metadata); + + EXPECT_CALL(client_, DisplayType()) + .WillRepeatedly( + Return(blink::WebMediaPlayer::DisplayType::kPictureInPicture)); + EXPECT_CALL(delegate_, + DidPictureInPictureSurfaceChange( + delegate_.player_id(), surface_id_, GetNaturalSize(), false)) + .Times(2); + + wmpi_->OnSurfaceIdUpdated(surface_id_); + + EXPECT_CALL(delegate_, + DidPictureInPictureModeStart(delegate_.player_id(), surface_id_, + GetNaturalSize(), _, false)); + + wmpi_->EnterPictureInPicture(base::DoNothing()); + wmpi_->OnSurfaceIdUpdated(surface_id_); + + // Updating SurfaceId should NOT exit Picture-in-Picture. + EXPECT_CALL(delegate_, DidPictureInPictureModeEnd(delegate_.player_id(), _)) + .Times(0); EXPECT_CALL(*surface_layer_bridge_ptr_, ClearObserver()); }
diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn index c2643c8a..136b28c 100644 --- a/media/gpu/BUILD.gn +++ b/media/gpu/BUILD.gn
@@ -345,6 +345,8 @@ "vp8_picture.h", "vp8_reference_frame_vector.cc", "vp8_reference_frame_vector.h", + "vp9_reference_frame_vector.cc", + "vp9_reference_frame_vector.h", ] }
diff --git a/media/gpu/vaapi/BUILD.gn b/media/gpu/vaapi/BUILD.gn index 9d5f96bb..6f419a6 100644 --- a/media/gpu/vaapi/BUILD.gn +++ b/media/gpu/vaapi/BUILD.gn
@@ -65,6 +65,8 @@ "vaapi_wrapper.h", "vp8_encoder.cc", "vp8_encoder.h", + "vp9_encoder.cc", + "vp9_encoder.h", ] configs += [ "//third_party/libyuv:libyuv_config" ]
diff --git a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc index eea55c6..eb8c68de 100644 --- a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc +++ b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
@@ -37,7 +37,9 @@ #include "media/gpu/vaapi/vaapi_common.h" #include "media/gpu/vaapi/vaapi_picture_factory.h" #include "media/gpu/vaapi/vp8_encoder.h" +#include "media/gpu/vaapi/vp9_encoder.h" #include "media/gpu/vp8_reference_frame_vector.h" +#include "media/gpu/vp9_reference_frame_vector.h" #if defined(OS_POSIX) #include "media/gpu/vaapi/vaapi_picture_native_pixmap.h" @@ -194,6 +196,27 @@ VaapiVideoEncodeAccelerator* const vea_; }; +class VaapiVideoEncodeAccelerator::VP9Accelerator + : public VP9Encoder::Accelerator { + public: + explicit VP9Accelerator(VaapiVideoEncodeAccelerator* vea) : vea_(vea) {} + + ~VP9Accelerator() override = default; + + // VP9Encoder::Accelerator implementation. + scoped_refptr<VP9Picture> GetPicture( + AcceleratedVideoEncoder::EncodeJob* job) override; + + bool SubmitFrameParameters( + AcceleratedVideoEncoder::EncodeJob* job, + const VP9Encoder::EncodeParams& encode_params, + scoped_refptr<VP9Picture> pic, + const Vp9ReferenceFrameVector& ref_frames) override; + + private: + VaapiVideoEncodeAccelerator* const vea_; +}; + VaapiVideoEncodeAccelerator::VaapiVideoEncodeAccelerator() : codec_(kUnknownVideoCodec), output_buffer_byte_size_(0), @@ -222,7 +245,7 @@ client_ = client_ptr_factory_->GetWeakPtr(); codec_ = VideoCodecProfileToVideoCodec(config.output_profile); - if (codec_ != kCodecH264 && codec_ != kCodecVP8) { + if (codec_ != kCodecH264 && codec_ != kCodecVP8 && codec_ != kCodecVP9) { VLOGF(1) << "Unsupported profile: " << GetProfileName(config.output_profile); return false; @@ -319,6 +342,11 @@ std::make_unique<VP8Encoder>(std::make_unique<VP8Accelerator>(this)); break; + case kCodecVP9: + encoder_ = + std::make_unique<VP9Encoder>(std::make_unique<VP9Accelerator>(this)); + break; + default: NOTREACHED() << "Unsupported codec type " << GetCodecName(codec_); return; @@ -1177,4 +1205,136 @@ return true; } +scoped_refptr<VP9Picture> +VaapiVideoEncodeAccelerator::VP9Accelerator::GetPicture( + AcceleratedVideoEncoder::EncodeJob* job) { + return base::MakeRefCounted<VaapiVP9Picture>( + job->AsVaapiEncodeJob()->reconstructed_surface()); +} + +bool VaapiVideoEncodeAccelerator::VP9Accelerator::SubmitFrameParameters( + AcceleratedVideoEncoder::EncodeJob* job, + const VP9Encoder::EncodeParams& encode_params, + scoped_refptr<VP9Picture> pic, + const Vp9ReferenceFrameVector& ref_frames) { + VAEncSequenceParameterBufferVP9 seq_param = {}; + + const auto& frame_header = pic->frame_hdr; + // TODO(crbug.com/811912): Double check whether the + // max_frame_width or max_frame_height affects any of the memory + // allocation and tighten these values based on that. + constexpr gfx::Size kMaxFrameSize(4096, 4096); + seq_param.max_frame_width = kMaxFrameSize.height(); + seq_param.max_frame_height = kMaxFrameSize.width(); + seq_param.bits_per_second = encode_params.bitrate_allocation.GetSumBps(); + seq_param.intra_period = encode_params.kf_period_frames; + + VAEncPictureParameterBufferVP9 pic_param = {}; + + pic_param.frame_width_src = frame_header->frame_width; + pic_param.frame_height_src = frame_header->frame_height; + pic_param.frame_width_dst = frame_header->render_width; + pic_param.frame_height_dst = frame_header->render_height; + + pic_param.reconstructed_frame = pic->AsVaapiVP9Picture()->GetVASurfaceID(); + DCHECK_NE(pic_param.reconstructed_frame, VA_INVALID_ID); + + for (size_t i = 0; i < kVp9NumRefFrames; i++) { + auto ref_pic = ref_frames.GetFrame(i); + pic_param.reference_frames[i] = + ref_pic ? ref_pic->AsVaapiVP9Picture()->GetVASurfaceID() + : VA_INVALID_ID; + } + + pic_param.coded_buf = job->AsVaapiEncodeJob()->coded_buffer_id(); + DCHECK_NE(pic_param.coded_buf, VA_INVALID_ID); + + if (frame_header->IsKeyframe()) { + pic_param.ref_flags.bits.force_kf = true; + } else { + // use golden, altref and last for prediction + pic_param.ref_flags.bits.ref_frame_ctrl_l0 = 0x07; + pic_param.ref_flags.bits.ref_last_idx = frame_header->ref_frame_idx[0]; + pic_param.ref_flags.bits.ref_gf_idx = frame_header->ref_frame_idx[1]; + pic_param.ref_flags.bits.ref_arf_idx = frame_header->ref_frame_idx[2]; + } + + pic_param.pic_flags.bits.frame_type = frame_header->frame_type; + pic_param.pic_flags.bits.show_frame = frame_header->show_frame; + pic_param.pic_flags.bits.error_resilient_mode = + frame_header->error_resilient_mode; + pic_param.pic_flags.bits.intra_only = frame_header->intra_only; + pic_param.pic_flags.bits.allow_high_precision_mv = + frame_header->allow_high_precision_mv; + pic_param.pic_flags.bits.mcomp_filter_type = + frame_header->interpolation_filter; + pic_param.pic_flags.bits.frame_parallel_decoding_mode = + frame_header->frame_parallel_decoding_mode; + pic_param.pic_flags.bits.reset_frame_context = + frame_header->reset_frame_context; + pic_param.pic_flags.bits.refresh_frame_context = + frame_header->refresh_frame_context; + pic_param.pic_flags.bits.frame_context_idx = frame_header->frame_context_idx; + + pic_param.refresh_frame_flags = frame_header->refresh_frame_flags; + + pic_param.luma_ac_qindex = frame_header->quant_params.base_q_idx; + pic_param.luma_dc_qindex_delta = frame_header->quant_params.delta_q_y_dc; + pic_param.chroma_ac_qindex_delta = frame_header->quant_params.delta_q_uv_ac; + pic_param.chroma_dc_qindex_delta = frame_header->quant_params.delta_q_uv_dc; + + // TODO(crbug.com/924786): Unlike the current vp8 implementation, + // SegmentationParams and LoopFilterParams are the part of Parser structure + // rather than included them in FrameHeader. So, for now, we are not taking + // segmentation and loopfilter related parameter from frame_hdr. But since the + // filter level may affect on quality at lower bitrates, we set a constant + // value (== 10) which is what other VA-API implementations like libyami and + // gstreamer-vaapi are using. + pic_param.filter_level = 10; + pic_param.log2_tile_rows = frame_header->tile_rows_log2; + pic_param.log2_tile_columns = frame_header->tile_cols_log2; + + VAEncMiscParameterRateControl rate_control_param = {}; + rate_control_param.bits_per_second = + encode_params.bitrate_allocation.GetSumBps(); + rate_control_param.target_percentage = kTargetBitratePercentage; + rate_control_param.window_size = encode_params.cpb_window_size_ms; + rate_control_param.initial_qp = encode_params.initial_qp; + rate_control_param.rc_flags.bits.disable_frame_skip = true; + + VAEncMiscParameterFrameRate framerate_param = {}; + framerate_param.framerate = encode_params.framerate; + + VAEncMiscParameterHRD hrd_param = {}; + hrd_param.buffer_size = encode_params.cpb_size_bits; + hrd_param.initial_buffer_fullness = hrd_param.buffer_size / 2; + + job->AddSetupCallback( + base::BindOnce(&VaapiVideoEncodeAccelerator::SubmitBuffer, + base::Unretained(vea_), VAEncSequenceParameterBufferType, + MakeRefCountedBytes(&seq_param, sizeof(seq_param)))); + + job->AddSetupCallback( + base::BindOnce(&VaapiVideoEncodeAccelerator::SubmitBuffer, + base::Unretained(vea_), VAEncPictureParameterBufferType, + MakeRefCountedBytes(&pic_param, sizeof(pic_param)))); + + job->AddSetupCallback(base::BindOnce( + &VaapiVideoEncodeAccelerator::SubmitVAEncMiscParamBuffer, + base::Unretained(vea_), VAEncMiscParameterTypeRateControl, + MakeRefCountedBytes(&rate_control_param, sizeof(rate_control_param)))); + + job->AddSetupCallback(base::BindOnce( + &VaapiVideoEncodeAccelerator::SubmitVAEncMiscParamBuffer, + base::Unretained(vea_), VAEncMiscParameterTypeFrameRate, + MakeRefCountedBytes(&framerate_param, sizeof(framerate_param)))); + + job->AddSetupCallback( + base::BindOnce(&VaapiVideoEncodeAccelerator::SubmitVAEncMiscParamBuffer, + base::Unretained(vea_), VAEncMiscParameterTypeHRD, + MakeRefCountedBytes(&hrd_param, sizeof(hrd_param)))); + + return true; +} + } // namespace media
diff --git a/media/gpu/vaapi/vaapi_video_encode_accelerator.h b/media/gpu/vaapi/vaapi_video_encode_accelerator.h index c321a06f..16e5891 100644 --- a/media/gpu/vaapi/vaapi_video_encode_accelerator.h +++ b/media/gpu/vaapi/vaapi_video_encode_accelerator.h
@@ -52,6 +52,7 @@ private: class H264Accelerator; class VP8Accelerator; + class VP9Accelerator; // Encoder state. enum State {
diff --git a/media/gpu/vaapi/vaapi_wrapper.cc b/media/gpu/vaapi/vaapi_wrapper.cc index 67d24a1..4a12557 100644 --- a/media/gpu/vaapi/vaapi_wrapper.cc +++ b/media/gpu/vaapi/vaapi_wrapper.cc
@@ -185,6 +185,14 @@ return true; } + // TODO(crbug.com/811912): Remove once VP9 encoding is to be enabled by + // default. + if (mode == VaapiWrapper::CodecMode::kEncode && + va_profile == VAProfileVP9Profile0 && + !base::FeatureList::IsEnabled(kVaapiVP9Encoder)) { + return true; + } + return false; }
diff --git a/media/gpu/vaapi/vp9_encoder.cc b/media/gpu/vaapi/vp9_encoder.cc new file mode 100644 index 0000000..a120657a --- /dev/null +++ b/media/gpu/vaapi/vp9_encoder.cc
@@ -0,0 +1,180 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/gpu/vaapi/vp9_encoder.h" + +#include "base/bits.h" + +#define DVLOGF(level) DVLOG(level) << __func__ << "(): " + +namespace media { + +namespace { +// Keyframe period. +constexpr size_t kKFPeriod = 3000; + +// Arbitrarily chosen bitrate window size for rate control, in ms. +constexpr int kCPBWindowSizeMs = 500; + +// Based on WebRTC's defaults. +constexpr int kMinQP = 4; +constexpr int kMaxQP = 112; +constexpr int kDefaultQP = (3 * kMinQP + kMaxQP) / 4; +} // namespace + +VP9Encoder::EncodeParams::EncodeParams() + : kf_period_frames(kKFPeriod), + framerate(0), + cpb_window_size_ms(kCPBWindowSizeMs), + cpb_size_bits(0), + initial_qp(kDefaultQP), + min_qp(kMinQP), + max_qp(kMaxQP), + error_resilient_mode(false) {} + +void VP9Encoder::Reset() { + current_params_ = EncodeParams(); + reference_frames_.Clear(); + frame_num_ = 0; + InitializeFrameHeader(); +} + +VP9Encoder::VP9Encoder(std::unique_ptr<Accelerator> accelerator) + : accelerator_(std::move(accelerator)) {} + +VP9Encoder::~VP9Encoder() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +} + +bool VP9Encoder::Initialize(const VideoEncodeAccelerator::Config& config) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (VideoCodecProfileToVideoCodec(config.output_profile) != kCodecVP9) { + DVLOGF(1) << "Invalid profile: " << GetProfileName(config.output_profile); + return false; + } + + if (config.input_visible_size.IsEmpty()) { + DVLOGF(1) << "Input visible size could not be empty"; + return false; + } + // 4:2:0 format has to be 2-aligned. + if ((config.input_visible_size.width() % 2 != 0) || + (config.input_visible_size.height() % 2 != 0)) { + DVLOGF(1) << "The pixel sizes are not even: " + << config.input_visible_size.ToString(); + return false; + } + + visible_size_ = config.input_visible_size; + coded_size_ = gfx::Size(base::bits::Align(visible_size_.width(), 16), + base::bits::Align(visible_size_.height(), 16)); + + Reset(); + + VideoBitrateAllocation initial_bitrate_allocation; + initial_bitrate_allocation.SetBitrate(0, 0, config.initial_bitrate); + return UpdateRates(initial_bitrate_allocation, + config.initial_framerate.value_or( + VideoEncodeAccelerator::kDefaultFramerate)); +} + +gfx::Size VP9Encoder::GetCodedSize() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(!coded_size_.IsEmpty()); + + return coded_size_; +} + +size_t VP9Encoder::GetMaxNumOfRefFrames() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + return kVp9NumRefFrames; +} + +bool VP9Encoder::PrepareEncodeJob(EncodeJob* encode_job) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + if (encode_job->IsKeyframeRequested()) + frame_num_ = 0; + + if (frame_num_ == 0) + encode_job->ProduceKeyframe(); + + frame_num_++; + frame_num_ %= current_params_.kf_period_frames; + + scoped_refptr<VP9Picture> picture = accelerator_->GetPicture(encode_job); + DCHECK(picture); + + UpdateFrameHeader(encode_job->IsKeyframeRequested()); + + *picture->frame_hdr = current_frame_hdr_; + + if (!accelerator_->SubmitFrameParameters(encode_job, current_params_, picture, + reference_frames_)) { + LOG(ERROR) << "Failed submitting frame parameters"; + return false; + } + + UpdateReferenceFrames(picture); + return true; +} + +bool VP9Encoder::UpdateRates(const VideoBitrateAllocation& bitrate_allocation, + uint32_t framerate) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + if (bitrate_allocation.GetSumBps() == 0 || framerate == 0) + return false; + + if (current_params_.bitrate_allocation == bitrate_allocation && + current_params_.framerate == framerate) { + return true; + } + + current_params_.bitrate_allocation = bitrate_allocation; + current_params_.framerate = framerate; + + current_params_.cpb_size_bits = + current_params_.bitrate_allocation.GetSumBps() * + current_params_.cpb_window_size_ms / 1000; + + return true; +} + +void VP9Encoder::InitializeFrameHeader() { + current_frame_hdr_ = {}; + DCHECK(!visible_size_.IsEmpty()); + current_frame_hdr_.frame_width = visible_size_.width(); + current_frame_hdr_.frame_height = visible_size_.height(); + current_frame_hdr_.render_width = visible_size_.width(); + current_frame_hdr_.render_height = visible_size_.height(); + current_frame_hdr_.quant_params.base_q_idx = current_params_.initial_qp; + current_frame_hdr_.show_frame = true; +} + +void VP9Encoder::UpdateFrameHeader(bool keyframe) { + if (keyframe) { + current_frame_hdr_.frame_type = Vp9FrameHeader::KEYFRAME; + current_frame_hdr_.refresh_frame_flags = 0xff; + ref_frame_index_ = 0; + } else { + // TODO(crbug.com/811912): Add temporal layer support when there is a driver + // support. Use the last three frames for reference. + current_frame_hdr_.frame_type = Vp9FrameHeader::INTERFRAME; + current_frame_hdr_.ref_frame_idx[0] = ref_frame_index_; + current_frame_hdr_.ref_frame_idx[1] = + (ref_frame_index_ - 1) & (kVp9NumRefFrames - 1); + current_frame_hdr_.ref_frame_idx[2] = + (ref_frame_index_ - 2) & (kVp9NumRefFrames - 1); + ref_frame_index_ = (ref_frame_index_ + 1) % kVp9NumRefFrames; + current_frame_hdr_.refresh_frame_flags = 1 << ref_frame_index_; + } +} + +void VP9Encoder::UpdateReferenceFrames(scoped_refptr<VP9Picture> picture) { + reference_frames_.Refresh(picture); +} + +} // namespace media
diff --git a/media/gpu/vaapi/vp9_encoder.h b/media/gpu/vaapi/vp9_encoder.h new file mode 100644 index 0000000..1436525b --- /dev/null +++ b/media/gpu/vaapi/vp9_encoder.h
@@ -0,0 +1,109 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_GPU_VAAPI_VP9_ENCODER_H_ +#define MEDIA_GPU_VAAPI_VP9_ENCODER_H_ + +#include <list> +#include <memory> +#include <utility> +#include <vector> + +#include "base/macros.h" +#include "base/sequence_checker.h" +#include "media/base/video_bitrate_allocation.h" +#include "media/filters/vp9_parser.h" +#include "media/gpu/vaapi/accelerated_video_encoder.h" +#include "media/gpu/vp9_picture.h" +#include "media/gpu/vp9_reference_frame_vector.h" + +namespace media { + +class VP9Encoder : public AcceleratedVideoEncoder { + public: + struct EncodeParams { + EncodeParams(); + + // Produce a keyframe at least once per this many frames. + size_t kf_period_frames; + + // Bitrate allocation in bps. + VideoBitrateAllocation bitrate_allocation; + + // Framerate in FPS. + uint32_t framerate; + + // Bitrate window size in ms. + unsigned int cpb_window_size_ms; + + // Coded picture buffer size in bits. + unsigned int cpb_size_bits; + + int initial_qp; + int min_qp; + int max_qp; + + bool error_resilient_mode; + }; + + // An accelerator interface. The client must provide an appropriate + // implementation on creation. + class Accelerator { + public: + Accelerator() = default; + virtual ~Accelerator() = default; + + // Returns the VP9Picture to be used as output for |job|. + virtual scoped_refptr<VP9Picture> GetPicture(EncodeJob* job) = 0; + + // Initializes |job| to use the provided |encode_params| as its parameters, + // and |pic| as the target, as well as |ref_frames| as reference frames for + // it. Returns true on success. + virtual bool SubmitFrameParameters( + EncodeJob* job, + const VP9Encoder::EncodeParams& encode_params, + scoped_refptr<VP9Picture> pic, + const Vp9ReferenceFrameVector& ref_frames) = 0; + + DISALLOW_COPY_AND_ASSIGN(Accelerator); + }; + + explicit VP9Encoder(std::unique_ptr<Accelerator> accelerator); + ~VP9Encoder() override; + + // AcceleratedVideoEncoder implementation. + bool Initialize(const VideoEncodeAccelerator::Config& config) override; + bool UpdateRates(const VideoBitrateAllocation& bitrate_allocation, + uint32_t framerate) override; + gfx::Size GetCodedSize() const override; + size_t GetMaxNumOfRefFrames() const override; + bool PrepareEncodeJob(EncodeJob* encode_job) override; + + private: + void InitializeFrameHeader(); + void UpdateFrameHeader(bool keyframe); + void UpdateReferenceFrames(scoped_refptr<VP9Picture> picture); + void Reset(); + + gfx::Size visible_size_; + gfx::Size coded_size_; // Macroblock-aligned. + + // Frame count since last keyframe, reset to 0 every keyframe period. + size_t frame_num_ = 0; + size_t ref_frame_index_ = 0; + + EncodeParams current_params_; + + Vp9FrameHeader current_frame_hdr_; + Vp9ReferenceFrameVector reference_frames_; + + const std::unique_ptr<Accelerator> accelerator_; + + SEQUENCE_CHECKER(sequence_checker_); + DISALLOW_COPY_AND_ASSIGN(VP9Encoder); +}; + +} // namespace media + +#endif // MEDIA_GPU_VAAPI_VP9_ENCODER_H_
diff --git a/media/gpu/video_encode_accelerator_unittest.cc b/media/gpu/video_encode_accelerator_unittest.cc index 9cdf9252..65c0a4c 100644 --- a/media/gpu/video_encode_accelerator_unittest.cc +++ b/media/gpu/video_encode_accelerator_unittest.cc
@@ -31,6 +31,7 @@ #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/test/launcher/unit_test_launcher.h" +#include "base/test/scoped_feature_list.h" #include "base/test/scoped_task_environment.h" #include "base/test/test_suite.h" #include "base/threading/thread.h" @@ -42,6 +43,7 @@ #include "media/base/bitstream_buffer.h" #include "media/base/cdm_context.h" #include "media/base/decoder_buffer.h" +#include "media/base/media_switches.h" #include "media/base/media_util.h" #include "media/base/test_data_util.h" #include "media/base/video_decoder.h" @@ -49,6 +51,7 @@ #include "media/filters/ffmpeg_video_decoder.h" #include "media/filters/ivf_parser.h" #include "media/filters/vp8_parser.h" +#include "media/filters/vp9_parser.h" #include "media/gpu/buildflags.h" #include "media/gpu/gpu_video_encode_accelerator_factory.h" #include "media/gpu/h264_decoder.h" @@ -128,9 +131,9 @@ // - |width| and |height| are in pixels. // - |profile| to encode into (values of VideoCodecProfile). // - |out_filename| filename to save the encoded stream to (optional). The -// format for H264 is Annex-B byte stream. The format for VP8 is IVF. Output -// stream is saved for the simple encode test only. H264 raw stream and IVF -// can be used as input of VDA unittest. H264 raw stream can be played by +// format for H264 is Annex-B byte stream. The format for VP8 and VP9 is IVF. +// Output stream is saved for the simple encode test only. H264 raw stream and +// IVF can be used as input of VDA unittest. H264 raw stream can be played by // "mplayer -fps 25 out.h264" and IVF can be played by mplayer directly. // Helpful description: http://wiki.multimedia.cx/index.php?title=IVF // Further parameters are optional (need to provide preceding positional @@ -298,6 +301,10 @@ return profile >= VP8PROFILE_MIN && profile <= VP8PROFILE_MAX; } +static bool IsVP9(VideoCodecProfile profile) { + return profile >= VP9PROFILE_MIN && profile <= VP9PROFILE_MAX; +} + // Helper functions to do string conversions. static base::FilePath::StringType StringToFilePathStringType( const std::string& str) { @@ -797,6 +804,36 @@ frame_cb_.Run(header.IsKeyframe(), visible_size_); } +class VP9Validator : public StreamValidator { + public: + explicit VP9Validator(const FrameFoundCallback& frame_cb) + : StreamValidator(frame_cb), parser_(false), seen_keyframe_(false) {} + + void ProcessStreamBuffer(const uint8_t* stream, size_t size) override; + + private: + Vp9Parser parser_; + // Have we already got a keyframe in the stream? + bool seen_keyframe_; +}; + +void VP9Validator::ProcessStreamBuffer(const uint8_t* stream, size_t size) { + // TODO(posciak): We could be getting more frames in the buffer, but there is + // no simple way to detect this. We'd need to parse the frames and go through + // partition numbers/sizes. For now assume one frame per buffer. + Vp9FrameHeader header; + parser_.SetStream(stream, size, nullptr); + EXPECT_TRUE(Vp9Parser::kInvalidStream != + parser_.ParseNextFrame(&header, nullptr)); + if (header.IsKeyframe()) { + seen_keyframe_ = true; + visible_size_.SetSize(header.render_width, header.render_height); + } + + EXPECT_TRUE(seen_keyframe_); + ASSERT_FALSE(visible_size_.IsEmpty()); + frame_cb_.Run(header.IsKeyframe(), visible_size_); +} // static std::unique_ptr<StreamValidator> StreamValidator::Create( VideoCodecProfile profile, @@ -807,6 +844,8 @@ validator.reset(new H264Validator(frame_cb)); } else if (IsVP8(profile)) { validator.reset(new VP8Validator(frame_cb)); + } else if (IsVP9(profile)) { + validator.reset(new VP9Validator(frame_cb)); } else { LOG(FATAL) << "Unsupported profile: " << GetProfileName(profile); } @@ -895,18 +934,24 @@ gfx::Size natural_size(visible_size.size()); // The default output format of ffmpeg video decoder is YV12. VideoDecoderConfig config; - if (IsVP8(profile_)) + if (IsVP8(profile_)) { config.Initialize(kCodecVP8, VP8PROFILE_ANY, pixel_format_, VideoColorSpace(), VIDEO_ROTATION_0, coded_size, visible_size, natural_size, EmptyExtraData(), Unencrypted()); - else if (IsH264(profile_)) + } else if (IsVP9(profile_)) { + config.Initialize(kCodecVP9, VP9PROFILE_PROFILE0, pixel_format_, + VideoColorSpace(), VIDEO_ROTATION_0, coded_size, + visible_size, natural_size, EmptyExtraData(), + Unencrypted()); + } else if (IsH264(profile_)) { config.Initialize(kCodecH264, H264PROFILE_MAIN, pixel_format_, VideoColorSpace(), VIDEO_ROTATION_0, coded_size, visible_size, natural_size, EmptyExtraData(), Unencrypted()); - else + } else { LOG_ASSERT(0) << "Invalid profile " << GetProfileName(profile_); + } decoder_->Initialize( config, false, nullptr, @@ -1319,7 +1364,7 @@ void LogPerf(); // Write IVF file header to test_stream_->out_filename. - void WriteIvfFileHeader(); + void WriteIvfFileHeader(uint32_t fourcc); // Write an IVF frame header to test_stream_->out_filename. void WriteIvfFrameHeader(int frame_index, size_t frame_size); @@ -1653,6 +1698,8 @@ DCHECK(thread_checker_.CalledOnValidThread()); ASSERT_EQ(CS_INITIALIZED, state_); SetState(CS_ENCODING); + constexpr uint32_t kVp8Fourcc = 0x30385056; + constexpr uint32_t kVp9Fourcc = 0x30395056; if (quality_validator_) quality_validator_->Initialize(input_coded_size, @@ -1672,8 +1719,13 @@ << kMinFramesForBitrateTests << " frames"; num_frames_to_encode_ = kMinFramesForBitrateTests; } - if (save_to_file_ && IsVP8(test_stream_->requested_profile)) - WriteIvfFileHeader(); + if (save_to_file_) { + if (IsVP8(test_stream_->requested_profile)) { + WriteIvfFileHeader(kVp8Fourcc); + } else if (IsVP9(test_stream_->requested_profile)) { + WriteIvfFileHeader(kVp9Fourcc); + } + } input_coded_size_ = input_coded_size; num_required_input_buffers_ = input_count; @@ -1761,7 +1813,8 @@ } if (save_to_file_) { - if (IsVP8(test_stream_->requested_profile)) + if (IsVP8(test_stream_->requested_profile) || + IsVP9(test_stream_->requested_profile)) WriteIvfFrameHeader(num_encoded_frames_ - 1, metadata.payload_size_bytes); @@ -2117,13 +2170,13 @@ } } -void VEAClient::WriteIvfFileHeader() { +void VEAClient::WriteIvfFileHeader(uint32_t fourcc) { DCHECK(thread_checker_.CalledOnValidThread()); IvfFileHeader header = {}; memcpy(header.signature, kIvfHeaderSignature, sizeof(header.signature)); header.version = 0; header.header_size = sizeof(header); - header.fourcc = 0x30385056; // VP80 + header.fourcc = fourcc; // VP80 or VP90 header.width = base::checked_cast<uint16_t>(test_stream_->visible_size.width()); header.height = @@ -2682,6 +2735,12 @@ mojo::core::Init(); media::VEATestSuite test_suite(argc, argv); +#if BUILDFLAG(USE_VAAPI) + base::test::ScopedFeatureList scoped_feature_list; + // TODO(crbug.com/811912): remove once enabled by default. + scoped_feature_list.InitAndEnableFeature(media::kVaapiVP9Encoder); +#endif + base::ShadowingAtExitManager at_exit_manager; // Needed to enable DVLOG through --vmodule.
diff --git a/media/gpu/vp9_picture.cc b/media/gpu/vp9_picture.cc index e724886..7790e03 100644 --- a/media/gpu/vp9_picture.cc +++ b/media/gpu/vp9_picture.cc
@@ -6,7 +6,7 @@ namespace media { -VP9Picture::VP9Picture() = default; +VP9Picture::VP9Picture() : frame_hdr(new Vp9FrameHeader()) {} VP9Picture::~VP9Picture() = default;
diff --git a/media/gpu/vp9_reference_frame_vector.cc b/media/gpu/vp9_reference_frame_vector.cc new file mode 100644 index 0000000..94627f2 --- /dev/null +++ b/media/gpu/vp9_reference_frame_vector.cc
@@ -0,0 +1,48 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/gpu/vp9_reference_frame_vector.h" + +#include "media/gpu/vp9_picture.h" + +namespace media { + +Vp9ReferenceFrameVector::Vp9ReferenceFrameVector() { + DETACH_FROM_SEQUENCE(sequence_checker_); +} + +Vp9ReferenceFrameVector::~Vp9ReferenceFrameVector() {} + +// Refresh the reference frame buffer slots with current frame +// based on refresh_frame_flags set in the frame_hdr. +void Vp9ReferenceFrameVector::Refresh(scoped_refptr<VP9Picture> pic) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(pic); + const auto& frame_hdr = pic->frame_hdr; + + for (size_t i = 0, mask = frame_hdr->refresh_frame_flags; mask; + mask >>= 1, ++i) { + if (mask & 1) + reference_frames_[i] = pic; + } +} + +void Vp9ReferenceFrameVector::Clear() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + for (auto& f : reference_frames_) + f = nullptr; +} + +// VP9 can maintains up to eight active reference frames and each +// frame can use up to three reference frames from this list. +// GetFrame will return the reference frame placed in reference_frames_[index] +scoped_refptr<VP9Picture> Vp9ReferenceFrameVector::GetFrame( + size_t index) const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + return reference_frames_[index]; +} + +} // namespace media
diff --git a/media/gpu/vp9_reference_frame_vector.h b/media/gpu/vp9_reference_frame_vector.h new file mode 100644 index 0000000..ea9b2b8 --- /dev/null +++ b/media/gpu/vp9_reference_frame_vector.h
@@ -0,0 +1,40 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_GPU_VP9_REFERENCE_FRAME_VECTOR_H_ +#define MEDIA_GPU_VP9_REFERENCE_FRAME_VECTOR_H_ + +#include <array> + +#include "base/memory/scoped_refptr.h" +#include "base/sequence_checker.h" +#include "media/filters/vp9_parser.h" + +namespace media { + +class VP9Picture; + +// class to share reference frame management code +// between encoder and decoder classes. +// TODO(crbug.com/924804): Add the support in Decoder class. +class Vp9ReferenceFrameVector { + public: + Vp9ReferenceFrameVector(); + ~Vp9ReferenceFrameVector(); + + void Refresh(scoped_refptr<VP9Picture> pic); + void Clear(); + + scoped_refptr<VP9Picture> GetFrame(size_t index) const; + + private: + std::array<scoped_refptr<VP9Picture>, kVp9NumRefFrames> reference_frames_; + + SEQUENCE_CHECKER(sequence_checker_); + DISALLOW_COPY_AND_ASSIGN(Vp9ReferenceFrameVector); +}; + +} // namespace media + +#endif // MEDIA_GPU_VP9_REFERENCE_FRAME_VECTOR_H_
diff --git a/net/BUILD.gn b/net/BUILD.gn index 672f603..44f07ab1 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -806,6 +806,8 @@ "http/http_proxy_client_socket_pool.h", "http/http_proxy_client_socket_wrapper.cc", "http/http_proxy_client_socket_wrapper.h", + "http/http_proxy_connect_job.cc", + "http/http_proxy_connect_job.h", "http/http_request_info.cc", "http/http_request_info.h", "http/http_response_body_drainer.cc", @@ -4940,6 +4942,7 @@ "http/http_proxy_client_socket_pool_unittest.cc", "http/http_proxy_client_socket_unittest.cc", "http/http_proxy_client_socket_wrapper_unittest.cc", + "http/http_proxy_connect_job_unittest.cc", "http/http_request_headers_unittest.cc", "http/http_response_body_drainer_unittest.cc", "http/http_response_headers_unittest.cc",
diff --git a/net/base/net_error_list.h b/net/base/net_error_list.h index 61fbd8e7..d5969692 100644 --- a/net/base/net_error_list.h +++ b/net/base/net_error_list.h
@@ -826,6 +826,9 @@ // current configuration (e.g. load flags, mode, etc.) NET_ERROR(CACHE_ENTRY_NOT_SUITABLE, -411) +// The disk cache is unable to doom this entry. +NET_ERROR(CACHE_DOOM_FAILURE, -412) + // The server's response was insecure (e.g. there was a cert error). NET_ERROR(INSECURE_RESPONSE, -501)
diff --git a/net/http/http_cache.h b/net/http/http_cache.h index 7dda9c0..ea9f22d 100644 --- a/net/http/http_cache.h +++ b/net/http/http_cache.h
@@ -58,7 +58,6 @@ class HttpResponseInfo; class IOBuffer; class NetLog; -class ViewCacheHelper; struct HttpRequestInfo; class NET_EXPORT HttpCache : public HttpTransactionFactory { @@ -299,11 +298,11 @@ friend class TestHttpCacheTransaction; friend class TestHttpCache; friend class Transaction; - friend class ViewCacheHelper; struct PendingOp; // Info for an entry under construction. // To help with testing. friend class MockHttpCache; + friend class HttpCacheTest; using TransactionList = std::list<Transaction*>; using TransactionSet = std::unordered_set<Transaction*>;
diff --git a/net/http/http_cache_transaction.h b/net/http/http_cache_transaction.h index d489b921..0a7bdbd 100644 --- a/net/http/http_cache_transaction.h +++ b/net/http/http_cache_transaction.h
@@ -115,6 +115,10 @@ const CompletionRepeatingCallback& io_callback() { return io_callback_; } + void SetIOCallBackForTest(CompletionRepeatingCallback cb) { + io_callback_ = cb; + } + const NetLogWithSource& net_log() const; // Bypasses the cache lock whenever there is lock contention.
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc index f838cf1..883f80f 100644 --- a/net/http/http_cache_unittest.cc +++ b/net/http/http_cache_unittest.cc
@@ -695,7 +695,36 @@ } // namespace -using HttpCacheTest = TestWithScopedTaskEnvironment; +class HttpCacheTest : public TestWithScopedTaskEnvironment { + public: + HttpCacheTest() {} + ~HttpCacheTest() override = default; + + // HttpCache::ActiveEntry is private, doing this allows tests to use it + using ActiveEntry = HttpCache::ActiveEntry; + using Transaction = HttpCache::Transaction; + + // The below functions are forwarding calls to the HttpCache class. + int OpenEntry(HttpCache* cache, + const std::string& key, + HttpCache::ActiveEntry** entry, + HttpCache::Transaction* trans) { + return cache->OpenEntry(key, entry, trans); + } + + int CreateEntry(HttpCache* cache, + const std::string& key, + HttpCache::ActiveEntry** entry, + HttpCache::Transaction* trans) { + return cache->CreateEntry(key, entry, trans); + } + + int DoomEntry(HttpCache* cache, + const std::string& key, + HttpCache::Transaction* trans) { + return cache->DoomEntry(key, trans); + } +}; //----------------------------------------------------------------------------- // Tests. @@ -736,7 +765,7 @@ TEST_F(HttpCacheTest, SimpleGETNoDiskCache) { MockHttpCache cache; - cache.disk_cache()->set_fail_requests(); + cache.disk_cache()->set_fail_requests(true); BoundTestNetLog log; LoadTimingInfo load_timing_info; @@ -11187,6 +11216,338 @@ response_info.cache_entry_status); } +class TestCompletionCallbackForHttpCache : public TestCompletionCallback { + public: + TestCompletionCallbackForHttpCache() {} + ~TestCompletionCallbackForHttpCache() override = default; + + const std::vector<int>& results() { return results_; } + + private: + std::vector<int> results_; + + protected: + void SetResult(int result) override { + results_.push_back(result); + DidSetResult(); + } +}; + +TEST_F(HttpCacheTest, FailedDoomFollowedByOpen) { + MockHttpCache cache; + TestCompletionCallbackForHttpCache cb; + std::unique_ptr<Transaction> transaction = + std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache()); + + transaction->SetIOCallBackForTest(cb.callback()); + + // Create the backend here as our direct calls to DoomEntry and OpenEntry + // below require that it exists. + cache.backend(); + + // Need a mock transaction in order to use some of MockHttpCache's + // functions. + ScopedMockTransaction m_transaction(kSimpleGET_Transaction); + + ActiveEntry* entry1 = nullptr; + + cache.disk_cache()->set_force_fail_callback_later(true); + + // Queue up our operations. + int rv = DoomEntry(cache.http_cache(), m_transaction.url, transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + cache.disk_cache()->set_force_fail_callback_later(false); + rv = OpenEntry(cache.http_cache(), m_transaction.url, &entry1, + transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + + // Wait for all the results to arrive. + cb.GetResult(rv); + ASSERT_EQ(cb.results().size(), static_cast<size_t>(2)); + + // Verify that DoomEntry failed correctly. + ASSERT_EQ(cb.results()[0], ERR_CACHE_DOOM_FAILURE); + // Verify that OpenEntry fails with the same code. + ASSERT_EQ(cb.results()[1], ERR_CACHE_DOOM_FAILURE); + ASSERT_EQ(entry1, nullptr); +} + +TEST_F(HttpCacheTest, FailedDoomFollowedByCreate) { + MockHttpCache cache; + TestCompletionCallbackForHttpCache cb; + std::unique_ptr<Transaction> transaction = + std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache()); + + transaction->SetIOCallBackForTest(cb.callback()); + + // Create the backend here as our direct calls to DoomEntry and CreateEntry + // below require that it exists. + cache.backend(); + + // Need a mock transaction in order to use some of MockHttpCache's + // functions. + ScopedMockTransaction m_transaction(kSimpleGET_Transaction); + + ActiveEntry* entry1 = nullptr; + + cache.disk_cache()->set_force_fail_callback_later(true); + + // Queue up our operations. + int rv = DoomEntry(cache.http_cache(), m_transaction.url, transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + cache.disk_cache()->set_force_fail_callback_later(false); + rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry1, + transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + + // Wait for all the results to arrive. + cb.GetResult(rv); + ASSERT_EQ(cb.results().size(), static_cast<size_t>(2)); + + // Verify that DoomEntry failed correctly. + ASSERT_EQ(cb.results()[0], ERR_CACHE_DOOM_FAILURE); + // Verify that CreateEntry requests a restart (CACHE_RACE). + ASSERT_EQ(cb.results()[1], ERR_CACHE_RACE); + ASSERT_EQ(entry1, nullptr); +} + +TEST_F(HttpCacheTest, FailedDoomFollowedByDoom) { + MockHttpCache cache; + TestCompletionCallbackForHttpCache cb; + std::unique_ptr<Transaction> transaction = + std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache()); + + transaction->SetIOCallBackForTest(cb.callback()); + + // Create the backend here as our direct calls to DoomEntry below require that + // it exists. + cache.backend(); + + // Need a mock transaction in order to use some of MockHttpCache's + // functions. + ScopedMockTransaction m_transaction(kSimpleGET_Transaction); + + cache.disk_cache()->set_force_fail_callback_later(true); + + // Queue up our operations. + int rv = DoomEntry(cache.http_cache(), m_transaction.url, transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + cache.disk_cache()->set_force_fail_callback_later(false); + rv = DoomEntry(cache.http_cache(), m_transaction.url, transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + + // Wait for all the results to arrive. + cb.GetResult(rv); + ASSERT_EQ(cb.results().size(), static_cast<size_t>(2)); + + // Verify that DoomEntry failed correctly. + ASSERT_EQ(cb.results()[0], ERR_CACHE_DOOM_FAILURE); + // Verify that the second DoomEntry requests a restart (CACHE_RACE). + ASSERT_EQ(cb.results()[1], ERR_CACHE_RACE); +} + +TEST_F(HttpCacheTest, FailedOpenFollowedByCreate) { + MockHttpCache cache; + TestCompletionCallbackForHttpCache cb; + std::unique_ptr<Transaction> transaction = + std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache()); + + transaction->SetIOCallBackForTest(cb.callback()); + + // Create the backend here as our direct calls to OpenEntry and CreateEntry + // below require that it exists. + cache.backend(); + + // Need a mock transaction in order to use some of MockHttpCache's + // functions. + ScopedMockTransaction m_transaction(kSimpleGET_Transaction); + + ActiveEntry* entry1 = nullptr; + ActiveEntry* entry2 = nullptr; + + cache.disk_cache()->set_force_fail_callback_later(true); + + // Queue up our operations. + int rv = OpenEntry(cache.http_cache(), m_transaction.url, &entry1, + transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + cache.disk_cache()->set_force_fail_callback_later(false); + rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry2, + transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + + // Wait for all the results to arrive. + cb.GetResult(rv); + ASSERT_EQ(cb.results().size(), static_cast<size_t>(2)); + + // Verify that OpenEntry failed correctly. + ASSERT_EQ(cb.results()[0], ERR_CACHE_OPEN_FAILURE); + ASSERT_EQ(entry1, nullptr); + // Verify that the CreateEntry requests a restart (CACHE_RACE). + ASSERT_EQ(cb.results()[1], ERR_CACHE_RACE); + ASSERT_EQ(entry2, nullptr); +} + +TEST_F(HttpCacheTest, FailedCreateFollowedByOpen) { + MockHttpCache cache; + TestCompletionCallbackForHttpCache cb; + std::unique_ptr<Transaction> transaction = + std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache()); + + transaction->SetIOCallBackForTest(cb.callback()); + + // Create the backend here as our direct calls to CreateEntry and OpenEntry + // below require that it exists. + cache.backend(); + + // Need a mock transaction in order to use some of MockHttpCache's + // functions. + ScopedMockTransaction m_transaction(kSimpleGET_Transaction); + + ActiveEntry* entry1 = nullptr; + ActiveEntry* entry2 = nullptr; + + cache.disk_cache()->set_force_fail_callback_later(true); + + // Queue up our operations. + int rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry1, + transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + cache.disk_cache()->set_force_fail_callback_later(false); + rv = OpenEntry(cache.http_cache(), m_transaction.url, &entry2, + transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + + // Wait for all the results to arrive. + cb.GetResult(rv); + ASSERT_EQ(cb.results().size(), static_cast<size_t>(2)); + + // Verify that CreateEntry failed correctly. + ASSERT_EQ(cb.results()[0], ERR_CACHE_CREATE_FAILURE); + ASSERT_EQ(entry1, nullptr); + // Verify that the OpenEntry requests a restart (CACHE_RACE). + ASSERT_EQ(cb.results()[1], ERR_CACHE_RACE); + ASSERT_EQ(entry2, nullptr); +} + +TEST_F(HttpCacheTest, FailedCreateFollowedByCreate) { + MockHttpCache cache; + TestCompletionCallbackForHttpCache cb; + std::unique_ptr<Transaction> transaction = + std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache()); + + transaction->SetIOCallBackForTest(cb.callback()); + + // Create the backend here as our direct calls to CreateEntry below require + // that it exists. + cache.backend(); + + // Need a mock transaction in order to use some of MockHttpCache's + // functions. + ScopedMockTransaction m_transaction(kSimpleGET_Transaction); + + ActiveEntry* entry1 = nullptr; + ActiveEntry* entry2 = nullptr; + + cache.disk_cache()->set_force_fail_callback_later(true); + + // Queue up our operations. + int rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry1, + transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + cache.disk_cache()->set_force_fail_callback_later(false); + rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry2, + transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + + // Wait for all the results to arrive. + cb.GetResult(rv); + ASSERT_EQ(cb.results().size(), static_cast<size_t>(2)); + + // Verify the CreateEntry(s) failed. + ASSERT_EQ(cb.results()[0], ERR_CACHE_CREATE_FAILURE); + ASSERT_EQ(entry1, nullptr); + ASSERT_EQ(cb.results()[1], ERR_CACHE_CREATE_FAILURE); + ASSERT_EQ(entry2, nullptr); +} + +TEST_F(HttpCacheTest, CreateFollowedByCreate) { + MockHttpCache cache; + TestCompletionCallbackForHttpCache cb; + std::unique_ptr<Transaction> transaction = + std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache()); + + transaction->SetIOCallBackForTest(cb.callback()); + + // Create the backend here as our direct calls to CreateEntry below require + // that it exists. + cache.backend(); + + // Need a mock transaction in order to use some of MockHttpCache's + // functions. + ScopedMockTransaction m_transaction(kSimpleGET_Transaction); + + ActiveEntry* entry1 = nullptr; + ActiveEntry* entry2 = nullptr; + + // Queue up our operations. + int rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry1, + transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry2, + transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + + // Wait for all the results to arrive. + cb.GetResult(rv); + ASSERT_EQ(cb.results().size(), static_cast<size_t>(2)); + ASSERT_EQ(cb.results().size(), static_cast<size_t>(2)); + + // Verify that the first CreateEntry succeeded. + ASSERT_EQ(cb.results()[0], OK); + ASSERT_NE(entry1, nullptr); + // Verify that the second CreateEntry failed. + ASSERT_EQ(cb.results()[1], ERR_CACHE_CREATE_FAILURE); + ASSERT_EQ(entry2, nullptr); +} + +TEST_F(HttpCacheTest, OperationFollowedByDoom) { + MockHttpCache cache; + TestCompletionCallbackForHttpCache cb; + std::unique_ptr<Transaction> transaction = + std::make_unique<Transaction>(DEFAULT_PRIORITY, cache.http_cache()); + + transaction->SetIOCallBackForTest(cb.callback()); + + // Create the backend here as our direct calls to CreateEntry and DoomEntry + // below require that it exists. + cache.backend(); + + // Need a mock transaction in order to use some of MockHttpCache's + // functions. + ScopedMockTransaction m_transaction(kSimpleGET_Transaction); + + ActiveEntry* entry1 = nullptr; + + // Queue up our operations. + // For this test all we need is some operation followed by a doom, a create + // fulfills that requirement. + int rv = CreateEntry(cache.http_cache(), m_transaction.url, &entry1, + transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + rv = DoomEntry(cache.http_cache(), m_transaction.url, transaction.get()); + ASSERT_EQ(rv, ERR_IO_PENDING); + + // Wait for all the results to arrive. + cb.GetResult(rv); + ASSERT_EQ(cb.results().size(), static_cast<size_t>(2)); + + // Verify that the CreateEntry succeeded. + ASSERT_EQ(cb.results()[0], OK); + // Verify that the DoomEntry requests a restart (CACHE_RACE). + ASSERT_EQ(cb.results()[1], ERR_CACHE_RACE); +} + class HttpCacheMemoryDumpTest : public testing::TestWithParam<base::trace_event::MemoryDumpLevelOfDetail>, public WithScopedTaskEnvironment {};
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index 38f7344b..adcab5f 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc
@@ -11252,25 +11252,17 @@ ASSERT_TRUE(proxy_server.is_valid()); CaptureGroupNameTransportSocketPool* socks_conn_pool = new CaptureGroupNameTransportSocketPool(NULL, NULL); - CaptureGroupNameTransportSocketPool* ssl_conn_pool = - new CaptureGroupNameTransportSocketPool(NULL, NULL); auto mock_pool_manager = std::make_unique<MockClientSocketPoolManager>(); mock_pool_manager->SetSocketPoolForProxy(proxy_server, base::WrapUnique(socks_conn_pool)); - mock_pool_manager->SetSocketPoolForSSLWithProxy( - proxy_server, base::WrapUnique(ssl_conn_pool)); peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); EXPECT_EQ(ERR_IO_PENDING, GroupNameTransactionHelper(tests[i].url, session.get())); - if (tests[i].ssl) - EXPECT_EQ(tests[i].expected_group_name, - ssl_conn_pool->last_group_name_received()); - else - EXPECT_EQ(tests[i].expected_group_name, - socks_conn_pool->last_group_name_received()); + EXPECT_EQ(tests[i].expected_group_name, + socks_conn_pool->last_group_name_received()); } }
diff --git a/net/http/http_proxy_client_socket_pool.cc b/net/http/http_proxy_client_socket_pool.cc index 3a5e170..e5db4878 100644 --- a/net/http/http_proxy_client_socket_pool.cc +++ b/net/http/http_proxy_client_socket_pool.cc
@@ -4,307 +4,13 @@ #include "net/http/http_proxy_client_socket_pool.h" -#include <algorithm> -#include <map> -#include <string> -#include <utility> - -#include "base/bind.h" -#include "base/compiler_specific.h" -#include "base/metrics/field_trial.h" -#include "base/metrics/field_trial_params.h" -#include "base/no_destructor.h" -#include "base/numerics/ranges.h" -#include "base/optional.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/string_util.h" -#include "base/values.h" -#include "build/build_config.h" -#include "net/base/load_flags.h" -#include "net/base/net_errors.h" -#include "net/http/http_network_session.h" -#include "net/http/http_proxy_client_socket_wrapper.h" -#include "net/log/net_log_source_type.h" -#include "net/log/net_log_with_source.h" -#include "net/nqe/network_quality_estimator.h" -#include "net/socket/client_socket_factory.h" -#include "net/socket/client_socket_handle.h" #include "net/socket/client_socket_pool_base.h" #include "net/socket/ssl_client_socket.h" #include "net/socket/ssl_connect_job.h" #include "net/socket/transport_client_socket_pool.h" -#include "net/socket/transport_connect_job.h" -#include "net/spdy/spdy_proxy_client_socket.h" -#include "net/spdy/spdy_session.h" -#include "net/spdy/spdy_session_pool.h" -#include "net/spdy/spdy_stream.h" -#include "net/ssl/ssl_cert_request_info.h" -#include "url/gurl.h" namespace net { -namespace { - -// HttpProxyConnectJobs will time out after this many seconds. Note this is in -// addition to the timeout for the transport socket. -#if defined(OS_ANDROID) || defined(OS_IOS) -static const int kHttpProxyConnectJobTimeoutInSeconds = 10; -#else -static const int kHttpProxyConnectJobTimeoutInSeconds = 30; -#endif - -class HttpProxyTimeoutExperiments { - public: - HttpProxyTimeoutExperiments() { Init(); } - - ~HttpProxyTimeoutExperiments() = default; - - void Init() { -#if defined(OS_ANDROID) || defined(OS_IOS) - min_proxy_connection_timeout_ = base::TimeDelta::FromSeconds( - GetInt32Param("min_proxy_connection_timeout_seconds", 8)); - max_proxy_connection_timeout_ = base::TimeDelta::FromSeconds( - GetInt32Param("max_proxy_connection_timeout_seconds", 30)); -#else - min_proxy_connection_timeout_ = base::TimeDelta::FromSeconds( - GetInt32Param("min_proxy_connection_timeout_seconds", 30)); - max_proxy_connection_timeout_ = base::TimeDelta::FromSeconds( - GetInt32Param("max_proxy_connection_timeout_seconds", 60)); -#endif - ssl_http_rtt_multiplier_ = GetInt32Param("ssl_http_rtt_multiplier", 10); - non_ssl_http_rtt_multiplier_ = - GetInt32Param("non_ssl_http_rtt_multiplier", 5); - - DCHECK_LT(0, ssl_http_rtt_multiplier_); - DCHECK_LT(0, non_ssl_http_rtt_multiplier_); - DCHECK_LE(base::TimeDelta(), min_proxy_connection_timeout_); - DCHECK_LE(base::TimeDelta(), max_proxy_connection_timeout_); - DCHECK_LE(min_proxy_connection_timeout_, max_proxy_connection_timeout_); - } - - base::TimeDelta min_proxy_connection_timeout() const { - return min_proxy_connection_timeout_; - } - base::TimeDelta max_proxy_connection_timeout() const { - return max_proxy_connection_timeout_; - } - int32_t ssl_http_rtt_multiplier() const { return ssl_http_rtt_multiplier_; } - int32_t non_ssl_http_rtt_multiplier() const { - return non_ssl_http_rtt_multiplier_; - } - - private: - // Return the value of the parameter |param_name| for the field trial - // "NetAdaptiveProxyConnectionTimeout". If the value of the parameter is - // unavailable, then |default_value| is available. - static int32_t GetInt32Param(const std::string& param_name, - int32_t default_value) { - int32_t param; - if (!base::StringToInt(base::GetFieldTrialParamValue( - "NetAdaptiveProxyConnectionTimeout", param_name), - ¶m)) { - return default_value; - } - return param; - } - - // For secure proxies, the connection timeout is set to - // |ssl_http_rtt_multiplier_| times the HTTP RTT estimate. For insecure - // proxies, the connection timeout is set to |non_ssl_http_rtt_multiplier_| - // times the HTTP RTT estimate. In either case, the connection timeout - // is clamped to be between |min_proxy_connection_timeout_| and - // |max_proxy_connection_timeout_|. - base::TimeDelta min_proxy_connection_timeout_; - base::TimeDelta max_proxy_connection_timeout_; - int32_t ssl_http_rtt_multiplier_; - int32_t non_ssl_http_rtt_multiplier_; -}; - -HttpProxyTimeoutExperiments* GetProxyTimeoutExperiments() { - static base::NoDestructor<HttpProxyTimeoutExperiments> - proxy_timeout_experiments; - return proxy_timeout_experiments.get(); -} - -} // namespace - -HttpProxySocketParams::HttpProxySocketParams( - const scoped_refptr<TransportSocketParams>& transport_params, - const scoped_refptr<SSLSocketParams>& ssl_params, - quic::QuicTransportVersion quic_version, - const std::string& user_agent, - const HostPortPair& endpoint, - HttpAuthCache* http_auth_cache, - HttpAuthHandlerFactory* http_auth_handler_factory, - SpdySessionPool* spdy_session_pool, - QuicStreamFactory* quic_stream_factory, - bool is_trusted_proxy, - bool tunnel, - const NetworkTrafficAnnotationTag traffic_annotation) - : transport_params_(transport_params), - ssl_params_(ssl_params), - quic_version_(quic_version), - spdy_session_pool_(spdy_session_pool), - quic_stream_factory_(quic_stream_factory), - user_agent_(user_agent), - endpoint_(endpoint), - http_auth_cache_(tunnel ? http_auth_cache : NULL), - http_auth_handler_factory_(tunnel ? http_auth_handler_factory : NULL), - is_trusted_proxy_(is_trusted_proxy), - tunnel_(tunnel), - traffic_annotation_(traffic_annotation) { - // If doing a QUIC proxy, |quic_version| must not be - // quic::QUIC_VERSION_UNSUPPORTED, and |ssl_params| must be valid while - // |transport_params| is null. Otherwise, |quic_version| must be - // quic::QUIC_VERSION_UNSUPPORTED, and exactly one of |transport_params| or - // |ssl_params| must be set. - DCHECK(quic_version_ == quic::QUIC_VERSION_UNSUPPORTED - ? (bool)transport_params != (bool)ssl_params - : !transport_params && ssl_params); - // Exactly one of |transport_params_| and |ssl_params_| must be non-null. - DCHECK(transport_params_ || ssl_params_); - DCHECK(!transport_params_ || !ssl_params_); -} - -HttpProxySocketParams::~HttpProxySocketParams() = default; - -HttpProxyConnectJob::HttpProxyConnectJob( - const std::string& group_name, - RequestPriority priority, - const SocketTag& socket_tag, - ClientSocketPool::RespectLimits respect_limits, - const scoped_refptr<HttpProxySocketParams>& params, - ProxyDelegate* proxy_delegate, - TransportClientSocketPool* transport_pool, - TransportClientSocketPool* ssl_pool, - NetworkQualityEstimator* network_quality_estimator, - Delegate* delegate, - NetLog* net_log) - : ConnectJob( - group_name, - base::TimeDelta() /* The socket takes care of timeouts */, - priority, - socket_tag, - respect_limits == ClientSocketPool::RespectLimits::ENABLED, - delegate, - NetLogWithSource::Make(net_log, - NetLogSourceType::HTTP_PROXY_CONNECT_JOB)), - client_socket_(new HttpProxyClientSocketWrapper( - group_name, - priority, - socket_tag, - respect_limits, - ConnectionTimeout(*params, network_quality_estimator), - base::TimeDelta::FromSeconds(kHttpProxyConnectJobTimeoutInSeconds), - transport_pool, - ssl_pool, - params->transport_params(), - params->ssl_params(), - params->quic_version(), - params->user_agent(), - params->endpoint(), - params->http_auth_cache(), - params->http_auth_handler_factory(), - params->spdy_session_pool(), - params->quic_stream_factory(), - params->is_trusted_proxy(), - params->tunnel(), - proxy_delegate, - params->traffic_annotation(), - this->net_log())) {} - -HttpProxyConnectJob::~HttpProxyConnectJob() = default; - -LoadState HttpProxyConnectJob::GetLoadState() const { - return client_socket_->GetConnectLoadState(); -} - -bool HttpProxyConnectJob::HasEstablishedConnection() const { - // TODO(mmenke): Implement this, as nested pools are removed. - return false; -} - -void HttpProxyConnectJob::GetAdditionalErrorState(ClientSocketHandle * handle) { - if (error_response_info_) { - handle->set_ssl_error_response_info(*error_response_info_); - handle->set_is_ssl_error(true); - } -} - -base::TimeDelta HttpProxyConnectJob::ConnectionTimeout( - const HttpProxySocketParams& params, - const NetworkQualityEstimator* network_quality_estimator) { - bool is_https = params.ssl_params() != nullptr; - // HTTP proxy connections can't be on top of proxy connections. - DCHECK(!is_https || - params.ssl_params()->GetConnectionType() == SSLSocketParams::DIRECT); - - if (network_quality_estimator) { - base::Optional<base::TimeDelta> http_rtt_estimate = - network_quality_estimator->GetHttpRTT(); - if (http_rtt_estimate) { - int32_t multiplier = - is_https - ? GetProxyTimeoutExperiments()->ssl_http_rtt_multiplier() - : GetProxyTimeoutExperiments()->non_ssl_http_rtt_multiplier(); - base::TimeDelta timeout = base::TimeDelta::FromMicroseconds( - multiplier * http_rtt_estimate.value().InMicroseconds()); - // Ensure that connection timeout is between - // |min_proxy_connection_timeout_| and |max_proxy_connection_timeout_|. - return base::ClampToRange( - timeout, GetProxyTimeoutExperiments()->min_proxy_connection_timeout(), - GetProxyTimeoutExperiments()->max_proxy_connection_timeout()); - } - } - - // Return the default proxy connection timeout. - base::TimeDelta nested_job_timeout; -#if !defined(OS_ANDROID) && !defined(OS_IOS) - if (is_https) { - nested_job_timeout = SSLConnectJob::ConnectionTimeout( - *params.ssl_params(), network_quality_estimator); - } else { - nested_job_timeout = TransportConnectJob::ConnectionTimeout(); - } -#endif // !defined(OS_ANDROID) && !defined(OS_IOS) - - return nested_job_timeout + - base::TimeDelta::FromSeconds(kHttpProxyConnectJobTimeoutInSeconds); -} - -void HttpProxyConnectJob::UpdateFieldTrialParametersForTesting() { - GetProxyTimeoutExperiments()->Init(); -} - -int HttpProxyConnectJob::ConnectInternal() { - int result = client_socket_->Connect(base::Bind( - &HttpProxyConnectJob::OnConnectComplete, base::Unretained(this))); - return HandleConnectResult(result); -} - -void HttpProxyConnectJob::ChangePriorityInternal(RequestPriority priority) { - if (client_socket_) - client_socket_->SetPriority(priority); -} - -void HttpProxyConnectJob::OnConnectComplete(int result) { - DCHECK_NE(ERR_IO_PENDING, result); - result = HandleConnectResult(result); - NotifyDelegateOfCompletion(result); - // |this| will have been deleted at this point. -} - -int HttpProxyConnectJob::HandleConnectResult(int result) { - if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) - error_response_info_ = client_socket_->GetAdditionalErrorState(); - - if (result == OK || result == ERR_PROXY_AUTH_REQUESTED || - result == ERR_HTTPS_PROXY_TUNNEL_RESPONSE) { - SetSocket(std::move(client_socket_)); - } - return result; -} - HttpProxyClientSocketPool::HttpProxyConnectJobFactory:: HttpProxyConnectJobFactory( TransportClientSocketPool* transport_pool, @@ -325,9 +31,9 @@ ConnectJob::Delegate* delegate) const { return std::make_unique<HttpProxyConnectJob>( group_name, request.priority(), request.socket_tag(), - request.respect_limits(), request.params(), proxy_delegate_, - transport_pool_, ssl_pool_, network_quality_estimator_, delegate, - net_log_); + request.respect_limits() == ClientSocketPool::RespectLimits::ENABLED, + request.params(), proxy_delegate_, transport_pool_, ssl_pool_, + network_quality_estimator_, delegate, net_log_); } HttpProxyClientSocketPool::HttpProxyClientSocketPool(
diff --git a/net/http/http_proxy_client_socket_pool.h b/net/http/http_proxy_client_socket_pool.h index 1e43b8e0..2539e76 100644 --- a/net/http/http_proxy_client_socket_pool.h +++ b/net/http/http_proxy_client_socket_pool.h
@@ -5,162 +5,23 @@ #ifndef NET_HTTP_HTTP_PROXY_CLIENT_SOCKET_POOL_H_ #define NET_HTTP_HTTP_PROXY_CLIENT_SOCKET_POOL_H_ -#include <stdint.h> - #include <memory> #include <string> #include "base/macros.h" #include "base/memory/ref_counted.h" -#include "base/memory/weak_ptr.h" -#include "base/time/time.h" #include "net/base/completion_once_callback.h" -#include "net/base/host_port_pair.h" #include "net/base/net_export.h" -#include "net/http/http_auth.h" -#include "net/http/http_response_info.h" -#include "net/http/proxy_client_socket.h" +#include "net/http/http_proxy_connect_job.h" #include "net/socket/client_socket_pool.h" #include "net/socket/client_socket_pool_base.h" -#include "net/socket/ssl_client_socket.h" -#include "net/spdy/spdy_session.h" -#include "net/traffic_annotation/network_traffic_annotation.h" namespace net { -class HttpAuthCache; -class HttpAuthHandlerFactory; -class HttpProxyClientSocketWrapper; class NetLog; class NetworkQualityEstimator; class ProxyDelegate; -class QuicStreamFactory; -class SSLSocketParams; -class SpdySessionPool; class TransportClientSocketPool; -class TransportSocketParams; - -// HttpProxySocketParams only needs the socket params for one of the proxy -// types. The other param must be NULL. When using an HTTP proxy, -// |transport_params| must be set. When using an HTTPS proxy or QUIC proxy, -// |ssl_params| must be set. Also, if using a QUIC proxy, |quic_version| must -// not be quic::QUIC_VERSION_UNSUPPORTED. -class NET_EXPORT_PRIVATE HttpProxySocketParams - : public base::RefCounted<HttpProxySocketParams> { - public: - HttpProxySocketParams( - const scoped_refptr<TransportSocketParams>& transport_params, - const scoped_refptr<SSLSocketParams>& ssl_params, - quic::QuicTransportVersion quic_version, - const std::string& user_agent, - const HostPortPair& endpoint, - HttpAuthCache* http_auth_cache, - HttpAuthHandlerFactory* http_auth_handler_factory, - SpdySessionPool* spdy_session_pool, - QuicStreamFactory* quic_stream_factory, - bool is_trusted_proxy, - bool tunnel, - const NetworkTrafficAnnotationTag traffic_annotation); - - const scoped_refptr<TransportSocketParams>& transport_params() const { - return transport_params_; - } - const scoped_refptr<SSLSocketParams>& ssl_params() const { - return ssl_params_; - } - quic::QuicTransportVersion quic_version() const { return quic_version_; } - const std::string& user_agent() const { return user_agent_; } - const HostPortPair& endpoint() const { return endpoint_; } - HttpAuthCache* http_auth_cache() const { return http_auth_cache_; } - HttpAuthHandlerFactory* http_auth_handler_factory() const { - return http_auth_handler_factory_; - } - SpdySessionPool* spdy_session_pool() { - return spdy_session_pool_; - } - QuicStreamFactory* quic_stream_factory() const { - return quic_stream_factory_; - } - bool is_trusted_proxy() const { return is_trusted_proxy_; } - bool tunnel() const { return tunnel_; } - const NetworkTrafficAnnotationTag traffic_annotation() const { - return traffic_annotation_; - } - - private: - friend class base::RefCounted<HttpProxySocketParams>; - ~HttpProxySocketParams(); - - const scoped_refptr<TransportSocketParams> transport_params_; - const scoped_refptr<SSLSocketParams> ssl_params_; - quic::QuicTransportVersion quic_version_; - SpdySessionPool* spdy_session_pool_; - QuicStreamFactory* quic_stream_factory_; - const std::string user_agent_; - const HostPortPair endpoint_; - HttpAuthCache* const http_auth_cache_; - HttpAuthHandlerFactory* const http_auth_handler_factory_; - const bool is_trusted_proxy_; - const bool tunnel_; - const NetworkTrafficAnnotationTag traffic_annotation_; - - DISALLOW_COPY_AND_ASSIGN(HttpProxySocketParams); -}; - -// HttpProxyConnectJob optionally establishes a tunnel through the proxy -// server after connecting the underlying transport socket. -class HttpProxyConnectJob : public ConnectJob { - public: - HttpProxyConnectJob(const std::string& group_name, - RequestPriority priority, - const SocketTag& socket_tag, - ClientSocketPool::RespectLimits respect_limits, - const scoped_refptr<HttpProxySocketParams>& params, - ProxyDelegate* proxy_delegate, - TransportClientSocketPool* transport_pool, - TransportClientSocketPool* ssl_pool, - NetworkQualityEstimator* network_quality_estimator, - Delegate* delegate, - NetLog* net_log); - ~HttpProxyConnectJob() override; - - // ConnectJob methods. - LoadState GetLoadState() const override; - bool HasEstablishedConnection() const override; - - void GetAdditionalErrorState(ClientSocketHandle* handle) override; - - // Returns the connection timeout that will be used by a HttpProxyConnectJob - // created with the specified parameters, given current network conditions. - NET_EXPORT_PRIVATE static base::TimeDelta ConnectionTimeout( - const HttpProxySocketParams& params, - const NetworkQualityEstimator* network_quality_estimator); - - // Updates the field trial parameters used in calculating timeouts. - NET_EXPORT_PRIVATE static void UpdateFieldTrialParametersForTesting(); - - private: - // Begins the tcp connection and the optional Http proxy tunnel. If the - // request is not immediately servicable (likely), the request will return - // ERR_IO_PENDING. An OK return from this function or the callback means - // that the connection is established; ERR_PROXY_AUTH_REQUESTED means - // that the tunnel needs authentication credentials, the socket will be - // returned in this case, and must be release back to the pool; or - // a standard net error code will be returned. - int ConnectInternal() override; - - void ChangePriorityInternal(RequestPriority priority) override; - - void OnConnectComplete(int result); - - int HandleConnectResult(int result); - - std::unique_ptr<HttpProxyClientSocketWrapper> client_socket_; - - std::unique_ptr<HttpResponseInfo> error_response_info_; - - DISALLOW_COPY_AND_ASSIGN(HttpProxyConnectJob); -}; class NET_EXPORT_PRIVATE HttpProxyClientSocketPool : public ClientSocketPool,
diff --git a/net/http/http_proxy_client_socket_pool_unittest.cc b/net/http/http_proxy_client_socket_pool_unittest.cc index 6ea9bb0..f9cc540 100644 --- a/net/http/http_proxy_client_socket_pool_unittest.cc +++ b/net/http/http_proxy_client_socket_pool_unittest.cc
@@ -10,9 +10,6 @@ #include "base/callback.h" #include "base/compiler_specific.h" -#include "base/metrics/field_trial.h" -#include "base/metrics/field_trial_param_associator.h" -#include "base/metrics/field_trial_params.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" @@ -103,7 +100,6 @@ nullptr /* socket_performance_watcher_factory */, nullptr /* network_quality_estimator */, nullptr /* net_log */), - field_trial_list_(nullptr), pool_( std::make_unique<HttpProxyClientSocketPool>(kMaxSockets, kMaxSocketsPerGroup, @@ -116,42 +112,7 @@ session_ = CreateNetworkSession(); } - virtual ~HttpProxyClientSocketPoolTest() { - // Reset global field trial parameters to defaults values. - base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting(); - HttpProxyConnectJob::UpdateFieldTrialParametersForTesting(); - } - - // Initializes the field trial paramters for the field trial that determines - // connection timeout based on the network quality. - void InitAdaptiveTimeoutFieldTrialWithParams( - bool use_default_params, - int ssl_http_rtt_multiplier, - int non_ssl_http_rtt_multiplier, - base::TimeDelta min_proxy_connection_timeout, - base::TimeDelta max_proxy_connection_timeout) { - std::string trial_name = "NetAdaptiveProxyConnectionTimeout"; - std::string group_name = "GroupName"; - - std::map<std::string, std::string> params; - if (!use_default_params) { - params["ssl_http_rtt_multiplier"] = - base::NumberToString(ssl_http_rtt_multiplier); - params["non_ssl_http_rtt_multiplier"] = - base::NumberToString(non_ssl_http_rtt_multiplier); - params["min_proxy_connection_timeout_seconds"] = - base::NumberToString(min_proxy_connection_timeout.InSeconds()); - params["max_proxy_connection_timeout_seconds"] = - base::NumberToString(max_proxy_connection_timeout.InSeconds()); - } - base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting(); - EXPECT_TRUE( - base::AssociateFieldTrialParams(trial_name, group_name, params)); - EXPECT_TRUE(base::FieldTrialList::CreateFieldTrial(trial_name, group_name)); - - // Force static global that reads the field trials to update. - HttpProxyConnectJob::UpdateFieldTrialParametersForTesting(); - } + ~HttpProxyClientSocketPoolTest() override = default; void InitPoolWithProxyDelegate(ProxyDelegate* proxy_delegate) { pool_ = std::make_unique<HttpProxyClientSocketPool>( @@ -243,21 +204,6 @@ const base::HistogramTester& histogram_tester() { return histogram_tester_; } - TestNetworkQualityEstimator* estimator() { return &estimator_; } - - TransportClientSocketPool* transport_socket_pool() { - return &transport_socket_pool_; - } - TransportClientSocketPool* ssl_socket_pool() { return &ssl_socket_pool_; } - - base::TimeDelta GetProxyConnectionTimeout() { - // Doesn't actually matter whether or not this is for a tunnel - the - // connection timeout is the same, though it probably shouldn't be the same, - // since tunnels need an extra round trip. - return HttpProxyConnectJob::ConnectionTimeout( - *CreateParams(true /* tunnel */), &estimator_); - } - protected: MockTaggingClientSocketFactory socket_factory_; SpdySessionDependencies session_deps_; @@ -271,8 +217,6 @@ base::HistogramTester histogram_tester_; - base::FieldTrialList field_trial_list_; - SpdyTestUtil spdy_util_; std::unique_ptr<SSLSocketDataProvider> ssl_data_; std::unique_ptr<SequencedSocketData> data_; @@ -287,117 +231,6 @@ HttpProxyClientSocketPoolTest, ::testing::Values(HTTP, HTTPS, SPDY)); -TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { - TestProxyDelegate proxy_delegate; - InitPoolWithProxyDelegate(&proxy_delegate); - - Initialize(base::span<MockRead>(), base::span<MockWrite>(), - base::span<MockRead>(), base::span<MockWrite>()); - - int rv = - handle_.Init("a", CreateNoTunnelParams(), LOW, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, - CompletionOnceCallback(), pool_.get(), NetLogWithSource()); - EXPECT_THAT(rv, IsOk()); - EXPECT_TRUE(handle_.is_initialized()); - ASSERT_TRUE(handle_.socket()); - EXPECT_TRUE(handle_.socket()->IsConnected()); - EXPECT_FALSE(proxy_delegate.on_before_tunnel_request_called()); - - bool is_secure_proxy = GetParam() == HTTPS || GetParam() == SPDY; - histogram_tester().ExpectTotalCount( - "Net.HttpProxy.ConnectLatency.Insecure.Success", is_secure_proxy ? 0 : 1); - histogram_tester().ExpectTotalCount( - "Net.HttpProxy.ConnectLatency.Secure.Success", is_secure_proxy ? 1 : 0); -} - -TEST_P(HttpProxyClientSocketPoolTest, ProxyDelegateExtraHeaders) { - // It's pretty much impossible to make the SPDY case behave synchronously - // so we skip this test for SPDY. - if (GetParam() == SPDY) - return; - - TestProxyDelegate proxy_delegate; - InitPoolWithProxyDelegate(&proxy_delegate); - - const ProxyServer proxy_server( - GetParam() == HTTP ? ProxyServer::SCHEME_HTTP : ProxyServer::SCHEME_HTTPS, - HostPortPair(GetParam() == HTTP ? kHttpProxyHost : kHttpsProxyHost, - GetParam() == HTTP ? 80 : 443)); - const std::string request = - "CONNECT www.google.com:443 HTTP/1.1\r\n" - "Host: www.google.com:443\r\n" - "Proxy-Connection: keep-alive\r\n" - "Foo: " + - proxy_server.ToURI() + "\r\n\r\n"; - MockWrite writes[] = { - MockWrite(SYNCHRONOUS, 0, request.c_str()), - }; - - const std::string response_header_name = "Foo"; - const std::string response_header_value = "Response"; - const std::string response = "HTTP/1.1 200 Connection Established\r\n" + - response_header_name + ": " + - response_header_value + "\r\n\r\n"; - MockRead reads[] = { - MockRead(SYNCHRONOUS, 1, response.c_str()), - }; - - Initialize(reads, writes, base::span<MockRead>(), base::span<MockWrite>()); - - int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, - callback_.callback(), pool_.get(), NetLogWithSource()); - EXPECT_THAT(rv, IsOk()); - - proxy_delegate.VerifyOnHttp1TunnelHeadersReceived( - proxy_server, response_header_name, response_header_value); -} - -// Make sure that HttpProxyConnectJob passes on its priority to its -// (non-SSL) socket request on Init. -TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { - // Make request hang during host resolution, so can observe priority there. - session_deps_.host_resolver->set_synchronous_mode(false); - session_deps_.host_resolver->set_ondemand_mode(true); - - EXPECT_THAT( - handle_.Init("a", CreateNoTunnelParams(), HIGHEST, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, - CompletionOnceCallback(), pool_.get(), NetLogWithSource()), - IsError(ERR_IO_PENDING)); - EXPECT_EQ(HIGHEST, session_deps_.host_resolver->last_request_priority()); -} - -TEST_P(HttpProxyClientSocketPoolTest, SetPriority) { - // Make request hang during host resolution, so can observe priority changes - // there. - session_deps_.host_resolver->set_synchronous_mode(false); - session_deps_.host_resolver->set_ondemand_mode(true); - - int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, - callback_.callback(), pool_.get(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - EXPECT_FALSE(handle_.is_initialized()); - EXPECT_FALSE(handle_.socket()); - - // For HTTPS requests, the H2 code will attempt to resolve the host name from - // the cache before the ConnectJob gets stuck trying to resolve the host name. - // Simplest to just add up total number of resolves to figure the resolution - // request being waited on. - int host_resolve_request_id = - session_deps_.host_resolver->num_resolve() + - session_deps_.host_resolver->num_resolve_from_cache(); - - EXPECT_EQ(LOW, session_deps_.host_resolver->request_priority( - host_resolve_request_id)); - - handle_.SetPriority(HIGHEST); - EXPECT_EQ(HIGHEST, session_deps_.host_resolver->request_priority( - host_resolve_request_id)); -} - TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { MockWrite writes[] = { MockWrite(ASYNC, 0, @@ -519,94 +352,6 @@ EXPECT_TRUE(handle_.socket()->IsConnected()); } -// Make sure that HttpProxyConnectJob passes on its priority to its -// SPDY session's socket request on Init, and on SetPriority. -TEST_P(HttpProxyClientSocketPoolTest, SetSpdySessionSocketRequestPriority) { - if (GetParam() != SPDY) - return; - - spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyConnect( - kAuthHeaders, kAuthHeadersSize, 1, HIGHEST, - HostPortPair("www.google.com", 443))); - MockWrite spdy_writes[] = {CreateMockWrite(req, 0, ASYNC)}; - spdy::SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(NULL, 0, 1)); - MockRead spdy_reads[] = {CreateMockRead(resp, 1, ASYNC), - MockRead(ASYNC, 0, 2)}; - - Initialize(base::span<MockRead>(), base::span<MockWrite>(), spdy_reads, - spdy_writes); - AddAuthToCache(); - - EXPECT_EQ( - ERR_IO_PENDING, - handle_.Init("a", CreateTunnelParams(), MEDIUM, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, - callback_.callback(), pool_.get(), NetLogWithSource())); - - handle_.SetPriority(HIGHEST); - // Expect frame with HIGHEST priority, not MEDIUM. - EXPECT_THAT(callback_.WaitForResult(), IsOk()); -} - -TEST_P(HttpProxyClientSocketPoolTest, TCPError) { - if (GetParam() == SPDY) - return; - data_.reset(new SequencedSocketData()); - data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); - - socket_factory()->AddSocketDataProvider(data_.get()); - - int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, - callback_.callback(), pool_.get(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - EXPECT_FALSE(handle_.is_initialized()); - EXPECT_FALSE(handle_.socket()); - - EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_PROXY_CONNECTION_FAILED)); - - EXPECT_FALSE(handle_.is_initialized()); - EXPECT_FALSE(handle_.socket()); - - bool is_secure_proxy = GetParam() == HTTPS; - histogram_tester().ExpectTotalCount( - "Net.HttpProxy.ConnectLatency.Insecure.Error", is_secure_proxy ? 0 : 1); - histogram_tester().ExpectTotalCount( - "Net.HttpProxy.ConnectLatency.Secure.Error", is_secure_proxy ? 1 : 0); -} - -TEST_P(HttpProxyClientSocketPoolTest, SSLError) { - if (GetParam() == HTTP) - return; - data_.reset(new SequencedSocketData()); - data_->set_connect_data(MockConnect(ASYNC, OK)); - socket_factory()->AddSocketDataProvider(data_.get()); - - ssl_data_.reset(new SSLSocketDataProvider(ASYNC, - ERR_CERT_AUTHORITY_INVALID)); - if (GetParam() == SPDY) { - InitializeSpdySsl(); - } - socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); - - int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, - callback_.callback(), pool_.get(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - EXPECT_FALSE(handle_.is_initialized()); - EXPECT_FALSE(handle_.socket()); - - EXPECT_THAT(callback_.WaitForResult(), - IsError(ERR_PROXY_CERTIFICATE_INVALID)); - - EXPECT_FALSE(handle_.is_initialized()); - EXPECT_FALSE(handle_.socket()); - histogram_tester().ExpectTotalCount( - "Net.HttpProxy.ConnectLatency.Secure.Error", 1); - histogram_tester().ExpectTotalCount( - "Net.HttpProxy.ConnectLatency.Insecure.Error", 0); -} - TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { if (GetParam() == HTTP) return; @@ -639,119 +384,6 @@ "Net.HttpProxy.ConnectLatency.Insecure.Error", 0); } -TEST_P(HttpProxyClientSocketPoolTest, TunnelUnexpectedClose) { - MockWrite writes[] = { - MockWrite(ASYNC, 0, - "CONNECT www.google.com:443 HTTP/1.1\r\n" - "Host: www.google.com:443\r\n" - "Proxy-Connection: keep-alive\r\n" - "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), - }; - MockRead reads[] = { - MockRead(ASYNC, 1, "HTTP/1.1 200 Conn"), - MockRead(ASYNC, ERR_CONNECTION_CLOSED, 2), - }; - spdy::SpdySerializedFrame req( - spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, - HostPortPair("www.google.com", 443))); - MockWrite spdy_writes[] = {CreateMockWrite(req, 0, ASYNC)}; - MockRead spdy_reads[] = { - MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), - }; - - Initialize(reads, writes, spdy_reads, spdy_writes); - AddAuthToCache(); - - int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, - callback_.callback(), pool_.get(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - EXPECT_FALSE(handle_.is_initialized()); - EXPECT_FALSE(handle_.socket()); - - if (GetParam() == SPDY) { - // SPDY cannot process a headers block unless it's complete and so it - // returns ERR_CONNECTION_CLOSED in this case. - EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); - } else { - EXPECT_THAT(callback_.WaitForResult(), - IsError(ERR_RESPONSE_HEADERS_TRUNCATED)); - } - EXPECT_FALSE(handle_.is_initialized()); - EXPECT_FALSE(handle_.socket()); -} - -TEST_P(HttpProxyClientSocketPoolTest, Tunnel1xxResponse) { - // Tests that 1xx responses are rejected for a CONNECT request. - if (GetParam() == SPDY) { - // SPDY doesn't have 1xx responses. - return; - } - - MockWrite writes[] = { - MockWrite(ASYNC, 0, - "CONNECT www.google.com:443 HTTP/1.1\r\n" - "Host: www.google.com:443\r\n" - "Proxy-Connection: keep-alive\r\n\r\n"), - }; - MockRead reads[] = { - MockRead(ASYNC, 1, "HTTP/1.1 100 Continue\r\n\r\n"), - MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"), - }; - - Initialize(reads, writes, base::span<MockRead>(), base::span<MockWrite>()); - - int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, - callback_.callback(), pool_.get(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - EXPECT_FALSE(handle_.is_initialized()); - EXPECT_FALSE(handle_.socket()); - - EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_TUNNEL_CONNECTION_FAILED)); -} - -TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { - MockWrite writes[] = { - MockWrite(ASYNC, 0, - "CONNECT www.google.com:443 HTTP/1.1\r\n" - "Host: www.google.com:443\r\n" - "Proxy-Connection: keep-alive\r\n" - "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), - }; - MockRead reads[] = { - MockRead(ASYNC, 1, "HTTP/1.1 304 Not Modified\r\n\r\n"), - }; - spdy::SpdySerializedFrame req( - spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW, - HostPortPair("www.google.com", 443))); - spdy::SpdySerializedFrame rst( - spdy_util_.ConstructSpdyRstStream(1, spdy::ERROR_CODE_CANCEL)); - MockWrite spdy_writes[] = { - CreateMockWrite(req, 0, ASYNC), CreateMockWrite(rst, 2, ASYNC), - }; - spdy::SpdySerializedFrame resp(spdy_util_.ConstructSpdyReplyError(1)); - MockRead spdy_reads[] = { - CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 3), - }; - - Initialize(reads, writes, spdy_reads, spdy_writes); - AddAuthToCache(); - - int rv = handle_.Init("a", CreateTunnelParams(), LOW, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, - callback_.callback(), pool_.get(), NetLogWithSource()); - EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); - EXPECT_FALSE(handle_.is_initialized()); - EXPECT_FALSE(handle_.socket()); - - rv = callback_.WaitForResult(); - // All Proxy CONNECT responses are not trustworthy - EXPECT_THAT(rv, IsError(ERR_TUNNEL_CONNECTION_FAILED)); - EXPECT_FALSE(handle_.is_initialized()); - EXPECT_FALSE(handle_.socket()); -} - TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupRedirect) { const std::string redirectTarget = "https://foo.google.com/"; @@ -831,159 +463,6 @@ } } -TEST_P(HttpProxyClientSocketPoolTest, ProxyPoolMinTimeout) { - // Set RTT estimate to a low value. - base::TimeDelta rtt_estimate = base::TimeDelta::FromMilliseconds(1); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - - EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout()); - - // Test against a large value. - EXPECT_GE(base::TimeDelta::FromMinutes(10), GetProxyConnectionTimeout()); - -#if (defined(OS_ANDROID) || defined(OS_IOS)) - EXPECT_EQ(base::TimeDelta::FromSeconds(8), GetProxyConnectionTimeout()); -#else - EXPECT_EQ(base::TimeDelta::FromSeconds(30), GetProxyConnectionTimeout()); -#endif -} - -TEST_P(HttpProxyClientSocketPoolTest, ProxyPoolMaxTimeout) { - // Set RTT estimate to a high value. - base::TimeDelta rtt_estimate = base::TimeDelta::FromSeconds(100); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - - EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout()); - - // Test against a large value. - EXPECT_GE(base::TimeDelta::FromMinutes(10), GetProxyConnectionTimeout()); - -#if (defined(OS_ANDROID) || defined(OS_IOS)) - EXPECT_EQ(base::TimeDelta::FromSeconds(30), GetProxyConnectionTimeout()); -#else - EXPECT_EQ(base::TimeDelta::FromSeconds(60), GetProxyConnectionTimeout()); -#endif -} - -// Tests the connection timeout values when the field trial parameters are -// specified. -TEST_P(HttpProxyClientSocketPoolTest, ProxyPoolTimeoutWithExperiment) { - // Timeout should be kMultiplier times the HTTP RTT estimate. - const int kMultiplier = 4; - const base::TimeDelta kMinTimeout = base::TimeDelta::FromSeconds(8); - const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(20); - - InitAdaptiveTimeoutFieldTrialWithParams(false, kMultiplier, kMultiplier, - kMinTimeout, kMaxTimeout); - EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout()); - - base::TimeDelta rtt_estimate = base::TimeDelta::FromSeconds(4); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - base::TimeDelta expected_connection_timeout = kMultiplier * rtt_estimate; - EXPECT_EQ(expected_connection_timeout, GetProxyConnectionTimeout()); - - // Connection timeout should not exceed kMaxTimeout. - rtt_estimate = base::TimeDelta::FromSeconds(25); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - EXPECT_EQ(kMaxTimeout, GetProxyConnectionTimeout()); - - // Connection timeout should not be less than kMinTimeout. - rtt_estimate = base::TimeDelta::FromSeconds(0); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - EXPECT_EQ(kMinTimeout, GetProxyConnectionTimeout()); -} - -// Tests the connection timeout values when the field trial parameters are -// specified. -TEST_P(HttpProxyClientSocketPoolTest, - ProxyPoolTimeoutWithExperimentDifferentParams) { - // Timeout should be kMultiplier times the HTTP RTT estimate. - const int kMultiplier = 3; - const base::TimeDelta kMinTimeout = base::TimeDelta::FromSeconds(2); - const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(30); - - InitAdaptiveTimeoutFieldTrialWithParams(false, kMultiplier, kMultiplier, - kMinTimeout, kMaxTimeout); - EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout()); - - base::TimeDelta rtt_estimate = base::TimeDelta::FromSeconds(2); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - EXPECT_EQ(kMultiplier * rtt_estimate, GetProxyConnectionTimeout()); - - // A change in RTT estimate should also change the connection timeout. - rtt_estimate = base::TimeDelta::FromSeconds(7); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - EXPECT_EQ(kMultiplier * rtt_estimate, GetProxyConnectionTimeout()); - - // Connection timeout should not exceed kMaxTimeout. - rtt_estimate = base::TimeDelta::FromSeconds(35); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - EXPECT_EQ(kMaxTimeout, GetProxyConnectionTimeout()); - - // Connection timeout should not be less than kMinTimeout. - rtt_estimate = base::TimeDelta::FromSeconds(0); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - EXPECT_EQ(kMinTimeout, GetProxyConnectionTimeout()); -} - -TEST_P(HttpProxyClientSocketPoolTest, ProxyPoolTimeoutWithConnectionProperty) { - const int kSecureMultiplier = 3; - const int kNonSecureMultiplier = 5; - const base::TimeDelta kMinTimeout = base::TimeDelta::FromSeconds(2); - const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(30); - - InitAdaptiveTimeoutFieldTrialWithParams( - false, kSecureMultiplier, kNonSecureMultiplier, kMinTimeout, kMaxTimeout); - - HttpProxyClientSocketPool::HttpProxyConnectJobFactory job_factory( - transport_socket_pool(), ssl_socket_pool(), nullptr, estimator(), - nullptr); - - const base::TimeDelta kRttEstimate = base::TimeDelta::FromSeconds(2); - estimator()->SetStartTimeNullHttpRtt(kRttEstimate); - // By default, connection timeout should return the timeout for secure - // proxies. - if (GetParam() != HTTP) { - EXPECT_EQ(kSecureMultiplier * kRttEstimate, GetProxyConnectionTimeout()); - } else { - EXPECT_EQ(kNonSecureMultiplier * kRttEstimate, GetProxyConnectionTimeout()); - } -} - -// Tests the connection timeout values when the field trial parameters are not -// specified. -TEST_P(HttpProxyClientSocketPoolTest, - ProxyPoolTimeoutWithExperimentDefaultParams) { - InitAdaptiveTimeoutFieldTrialWithParams(true, 0, 0, base::TimeDelta(), - base::TimeDelta()); - EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout()); - - // Timeout should be |http_rtt_multiplier| times the HTTP RTT - // estimate. - base::TimeDelta rtt_estimate = base::TimeDelta::FromMilliseconds(10); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - // Connection timeout should not be less than the HTTP RTT estimate. - EXPECT_LE(rtt_estimate, GetProxyConnectionTimeout()); - - // A change in RTT estimate should also change the connection timeout. - rtt_estimate = base::TimeDelta::FromSeconds(10); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - // Connection timeout should not be less than the HTTP RTT estimate. - EXPECT_LE(rtt_estimate, GetProxyConnectionTimeout()); - - // Set RTT to a very large value. - rtt_estimate = base::TimeDelta::FromMinutes(60); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - EXPECT_GT(rtt_estimate, GetProxyConnectionTimeout()); - - // Set RTT to a very small value. - rtt_estimate = base::TimeDelta::FromSeconds(0); - estimator()->SetStartTimeNullHttpRtt(rtt_estimate); - EXPECT_LT(rtt_estimate, GetProxyConnectionTimeout()); -} - -// It would be nice to also test the timeouts in HttpProxyClientSocketPool. - // Test that SocketTag passed into HttpProxyClientSocketPool is applied to // returned underlying TCP sockets. #if defined(OS_ANDROID)
diff --git a/net/http/http_proxy_client_socket_wrapper.cc b/net/http/http_proxy_client_socket_wrapper.cc index 0ffb067..8ff84dd 100644 --- a/net/http/http_proxy_client_socket_wrapper.cc +++ b/net/http/http_proxy_client_socket_wrapper.cc
@@ -40,7 +40,7 @@ const std::string& group_name, RequestPriority priority, const SocketTag& socket_tag, - ClientSocketPool::RespectLimits respect_limits, + bool respect_limits, base::TimeDelta connect_timeout_duration, base::TimeDelta proxy_negotiation_timeout_duration, TransportClientSocketPool* transport_pool, @@ -143,7 +143,7 @@ } void HttpProxyClientSocketWrapper::SetPriority(RequestPriority priority) { - if (respect_limits_ == ClientSocketPool::RespectLimits::DISABLED) { + if (!respect_limits_) { DCHECK_EQ(MAXIMUM_PRIORITY, priority_); return; } @@ -503,7 +503,9 @@ group_name_, TransportClientSocketPool::SocketParams::CreateFromTransportSocketParams( transport_params_), - priority_, initial_socket_tag_, respect_limits_, + priority_, initial_socket_tag_, + respect_limits_ ? ClientSocketPool::RespectLimits::ENABLED + : ClientSocketPool::RespectLimits::DISABLED, base::Bind(&HttpProxyClientSocketWrapper::OnIOComplete, base::Unretained(this)), transport_pool_, net_log_);
diff --git a/net/http/http_proxy_client_socket_wrapper.h b/net/http/http_proxy_client_socket_wrapper.h index 7b4bff1..eb6ad4cd 100644 --- a/net/http/http_proxy_client_socket_wrapper.h +++ b/net/http/http_proxy_client_socket_wrapper.h
@@ -59,7 +59,7 @@ const std::string& group_name, RequestPriority priority, const SocketTag& socket_tag, - ClientSocketPool::RespectLimits respect_limits, + bool respect_limits, base::TimeDelta connect_timeout_duration, base::TimeDelta proxy_negotiation_timeout_duration, TransportClientSocketPool* transport_pool, @@ -190,7 +190,7 @@ const std::string group_name_; RequestPriority priority_; const SocketTag initial_socket_tag_; - ClientSocketPool::RespectLimits respect_limits_; + bool respect_limits_; const base::TimeDelta connect_timeout_duration_; const base::TimeDelta proxy_negotiation_timeout_duration_;
diff --git a/net/http/http_proxy_client_socket_wrapper_unittest.cc b/net/http/http_proxy_client_socket_wrapper_unittest.cc index 2fccc2d..93828a5 100644 --- a/net/http/http_proxy_client_socket_wrapper_unittest.cc +++ b/net/http/http_proxy_client_socket_wrapper_unittest.cc
@@ -286,10 +286,10 @@ SSLConfig(), privacy_mode_); transport_params = nullptr; - client_socket_wrapper_.reset(new HttpProxyClientSocketWrapper( + client_socket_wrapper_ = std::make_unique<HttpProxyClientSocketWrapper>( /*group_name=*/std::string(), /*requiest_priority=*/DEFAULT_PRIORITY, /*socket_tag=*/SocketTag(), - /*respect_limits=*/ClientSocketPool::RespectLimits::ENABLED, + /*respect_limits=*/true, /*connect_timeout_duration=*/base::TimeDelta::FromHours(1), /*proxy_negotiation_timeout_duration=*/base::TimeDelta::FromHours(1), /*transport_pool=*/nullptr, /*ssl_pool=*/nullptr, @@ -297,7 +297,7 @@ endpoint_host_port_, &http_auth_cache_, http_auth_handler_factory_.get(), /*spdy_session_pool=*/nullptr, quic_stream_factory_.get(), /*is_trusted_proxy=*/false, /*tunnel=*/true, /*proxy_delegate=*/nullptr, - TRAFFIC_ANNOTATION_FOR_TESTS, net_log_)); + TRAFFIC_ANNOTATION_FOR_TESTS, net_log_); TestCompletionCallback callback; client_socket_wrapper_->Connect(callback.callback()); @@ -344,10 +344,10 @@ transport_params = nullptr; SocketTag tag(getuid(), 0x87654321); - client_socket_wrapper_.reset(new HttpProxyClientSocketWrapper( + client_socket_wrapper_ = std::make_unique<HttpProxyClientSocketWrapper>( /*group_name=*/std::string(), /*requiest_priority=*/DEFAULT_PRIORITY, /*socket_tag=*/tag, - /*respect_limits=*/ClientSocketPool::RespectLimits::ENABLED, + /*respect_limits=*/true, /*connect_timeout_duration=*/base::TimeDelta::FromHours(1), /*proxy_negotiation_timeout_duration=*/base::TimeDelta::FromHours(1), /*transport_pool=*/nullptr, /*ssl_pool=*/nullptr, @@ -355,7 +355,7 @@ endpoint_host_port_, &http_auth_cache_, http_auth_handler_factory_.get(), /*spdy_session_pool=*/nullptr, quic_stream_factory_.get(), /*is_trusted_proxy=*/false, /*tunnel=*/true, /*proxy_delegate=*/nullptr, - TRAFFIC_ANNOTATION_FOR_TESTS, net_log_)); + TRAFFIC_ANNOTATION_FOR_TESTS, net_log_); TestCompletionCallback callback; client_socket_wrapper_->Connect(callback.callback());
diff --git a/net/http/http_proxy_connect_job.cc b/net/http/http_proxy_connect_job.cc new file mode 100644 index 0000000..4b42f1f --- /dev/null +++ b/net/http/http_proxy_connect_job.cc
@@ -0,0 +1,302 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/http/http_proxy_connect_job.h" + +#include <utility> + +#include "base/bind.h" +#include "base/metrics/field_trial.h" +#include "base/metrics/field_trial_params.h" +#include "base/no_destructor.h" +#include "base/numerics/ranges.h" +#include "base/optional.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/string_util.h" +#include "base/values.h" +#include "build/build_config.h" +#include "net/base/net_errors.h" +#include "net/http/http_proxy_client_socket_wrapper.h" +#include "net/log/net_log_source_type.h" +#include "net/log/net_log_with_source.h" +#include "net/nqe/network_quality_estimator.h" +#include "net/socket/client_socket_factory.h" +#include "net/socket/client_socket_handle.h" +#include "net/socket/ssl_client_socket.h" +#include "net/socket/ssl_connect_job.h" +#include "net/socket/transport_client_socket_pool.h" +#include "net/socket/transport_connect_job.h" +#include "net/spdy/spdy_proxy_client_socket.h" +#include "net/spdy/spdy_session.h" +#include "net/spdy/spdy_session_pool.h" +#include "net/spdy/spdy_stream.h" +#include "net/ssl/ssl_cert_request_info.h" +#include "url/gurl.h" + +namespace net { + +namespace { + +// HttpProxyConnectJobs will time out after this many seconds. Note this is in +// addition to the timeout for the transport socket. +#if defined(OS_ANDROID) || defined(OS_IOS) +const int kHttpProxyConnectJobTimeoutInSeconds = 10; +#else +const int kHttpProxyConnectJobTimeoutInSeconds = 30; +#endif + +class HttpProxyTimeoutExperiments { + public: + HttpProxyTimeoutExperiments() { Init(); } + + ~HttpProxyTimeoutExperiments() = default; + + void Init() { +#if defined(OS_ANDROID) || defined(OS_IOS) + min_proxy_connection_timeout_ = base::TimeDelta::FromSeconds( + GetInt32Param("min_proxy_connection_timeout_seconds", 8)); + max_proxy_connection_timeout_ = base::TimeDelta::FromSeconds( + GetInt32Param("max_proxy_connection_timeout_seconds", 30)); +#else + min_proxy_connection_timeout_ = base::TimeDelta::FromSeconds( + GetInt32Param("min_proxy_connection_timeout_seconds", 30)); + max_proxy_connection_timeout_ = base::TimeDelta::FromSeconds( + GetInt32Param("max_proxy_connection_timeout_seconds", 60)); +#endif + ssl_http_rtt_multiplier_ = GetInt32Param("ssl_http_rtt_multiplier", 10); + non_ssl_http_rtt_multiplier_ = + GetInt32Param("non_ssl_http_rtt_multiplier", 5); + + DCHECK_LT(0, ssl_http_rtt_multiplier_); + DCHECK_LT(0, non_ssl_http_rtt_multiplier_); + DCHECK_LE(base::TimeDelta(), min_proxy_connection_timeout_); + DCHECK_LE(base::TimeDelta(), max_proxy_connection_timeout_); + DCHECK_LE(min_proxy_connection_timeout_, max_proxy_connection_timeout_); + } + + base::TimeDelta min_proxy_connection_timeout() const { + return min_proxy_connection_timeout_; + } + base::TimeDelta max_proxy_connection_timeout() const { + return max_proxy_connection_timeout_; + } + int32_t ssl_http_rtt_multiplier() const { return ssl_http_rtt_multiplier_; } + int32_t non_ssl_http_rtt_multiplier() const { + return non_ssl_http_rtt_multiplier_; + } + + private: + // Returns the value of the parameter |param_name| for the field trial + // "NetAdaptiveProxyConnectionTimeout". If the value of the parameter is + // unavailable, then |default_value| is available. + static int32_t GetInt32Param(const std::string& param_name, + int32_t default_value) { + int32_t param; + if (!base::StringToInt(base::GetFieldTrialParamValue( + "NetAdaptiveProxyConnectionTimeout", param_name), + ¶m)) { + return default_value; + } + return param; + } + + // For secure proxies, the connection timeout is set to + // |ssl_http_rtt_multiplier_| times the HTTP RTT estimate. For insecure + // proxies, the connection timeout is set to |non_ssl_http_rtt_multiplier_| + // times the HTTP RTT estimate. In either case, the connection timeout + // is clamped to be between |min_proxy_connection_timeout_| and + // |max_proxy_connection_timeout_|. + base::TimeDelta min_proxy_connection_timeout_; + base::TimeDelta max_proxy_connection_timeout_; + int32_t ssl_http_rtt_multiplier_; + int32_t non_ssl_http_rtt_multiplier_; +}; + +HttpProxyTimeoutExperiments* GetProxyTimeoutExperiments() { + static base::NoDestructor<HttpProxyTimeoutExperiments> + proxy_timeout_experiments; + return proxy_timeout_experiments.get(); +} + +} // namespace + +HttpProxySocketParams::HttpProxySocketParams( + const scoped_refptr<TransportSocketParams>& transport_params, + const scoped_refptr<SSLSocketParams>& ssl_params, + quic::QuicTransportVersion quic_version, + const std::string& user_agent, + const HostPortPair& endpoint, + HttpAuthCache* http_auth_cache, + HttpAuthHandlerFactory* http_auth_handler_factory, + SpdySessionPool* spdy_session_pool, + QuicStreamFactory* quic_stream_factory, + bool is_trusted_proxy, + bool tunnel, + const NetworkTrafficAnnotationTag traffic_annotation) + : transport_params_(transport_params), + ssl_params_(ssl_params), + quic_version_(quic_version), + spdy_session_pool_(spdy_session_pool), + quic_stream_factory_(quic_stream_factory), + user_agent_(user_agent), + endpoint_(endpoint), + http_auth_cache_(tunnel ? http_auth_cache : NULL), + http_auth_handler_factory_(tunnel ? http_auth_handler_factory : NULL), + is_trusted_proxy_(is_trusted_proxy), + tunnel_(tunnel), + traffic_annotation_(traffic_annotation) { + // If doing a QUIC proxy, |quic_version| must not be + // quic::QUIC_VERSION_UNSUPPORTED, and |ssl_params| must be valid while + // |transport_params| is null. Otherwise, |quic_version| must be + // quic::QUIC_VERSION_UNSUPPORTED, and exactly one of |transport_params| or + // |ssl_params| must be set. + DCHECK(quic_version_ == quic::QUIC_VERSION_UNSUPPORTED + ? (bool)transport_params != (bool)ssl_params + : !transport_params && ssl_params); + // Exactly one of |transport_params_| and |ssl_params_| must be non-null. + DCHECK(transport_params_ || ssl_params_); + DCHECK(!transport_params_ || !ssl_params_); +} + +HttpProxySocketParams::~HttpProxySocketParams() = default; + +HttpProxyConnectJob::HttpProxyConnectJob( + const std::string& group_name, + RequestPriority priority, + const SocketTag& socket_tag, + bool respect_limits, + const scoped_refptr<HttpProxySocketParams>& params, + ProxyDelegate* proxy_delegate, + TransportClientSocketPool* transport_pool, + TransportClientSocketPool* ssl_pool, + NetworkQualityEstimator* network_quality_estimator, + Delegate* delegate, + NetLog* net_log) + : ConnectJob( + group_name, + base::TimeDelta() /* The socket takes care of timeouts */, + priority, + socket_tag, + respect_limits, + delegate, + NetLogWithSource::Make(net_log, + NetLogSourceType::HTTP_PROXY_CONNECT_JOB)), + client_socket_(std::make_unique<HttpProxyClientSocketWrapper>( + group_name, + priority, + socket_tag, + respect_limits, + ConnectionTimeout(*params, network_quality_estimator), + base::TimeDelta::FromSeconds(kHttpProxyConnectJobTimeoutInSeconds), + transport_pool, + ssl_pool, + params->transport_params(), + params->ssl_params(), + params->quic_version(), + params->user_agent(), + params->endpoint(), + params->http_auth_cache(), + params->http_auth_handler_factory(), + params->spdy_session_pool(), + params->quic_stream_factory(), + params->is_trusted_proxy(), + params->tunnel(), + proxy_delegate, + params->traffic_annotation(), + this->net_log())) {} + +HttpProxyConnectJob::~HttpProxyConnectJob() = default; + +LoadState HttpProxyConnectJob::GetLoadState() const { + return client_socket_->GetConnectLoadState(); +} + +bool HttpProxyConnectJob::HasEstablishedConnection() const { + // TODO(https://crbug.com/472729): Implement this, as nested pools are + // removed. + return false; +} + +void HttpProxyConnectJob::GetAdditionalErrorState(ClientSocketHandle* handle) { + if (error_response_info_) { + handle->set_ssl_error_response_info(*error_response_info_); + handle->set_is_ssl_error(true); + } +} + +base::TimeDelta HttpProxyConnectJob::ConnectionTimeout( + const HttpProxySocketParams& params, + const NetworkQualityEstimator* network_quality_estimator) { + bool is_https = params.ssl_params() != nullptr; + // HTTP proxy connections can't be on top of proxy connections. + DCHECK(!is_https || + params.ssl_params()->GetConnectionType() == SSLSocketParams::DIRECT); + + if (network_quality_estimator) { + base::Optional<base::TimeDelta> http_rtt_estimate = + network_quality_estimator->GetHttpRTT(); + if (http_rtt_estimate) { + int32_t multiplier = + is_https + ? GetProxyTimeoutExperiments()->ssl_http_rtt_multiplier() + : GetProxyTimeoutExperiments()->non_ssl_http_rtt_multiplier(); + base::TimeDelta timeout = base::TimeDelta::FromMicroseconds( + multiplier * http_rtt_estimate.value().InMicroseconds()); + // Ensure that connection timeout is between + // |min_proxy_connection_timeout_| and |max_proxy_connection_timeout_|. + return base::ClampToRange( + timeout, GetProxyTimeoutExperiments()->min_proxy_connection_timeout(), + GetProxyTimeoutExperiments()->max_proxy_connection_timeout()); + } + } + + // Return the default proxy connection timeout. + base::TimeDelta nested_job_timeout; +#if !defined(OS_ANDROID) && !defined(OS_IOS) + if (is_https) { + nested_job_timeout = SSLConnectJob::ConnectionTimeout( + *params.ssl_params(), network_quality_estimator); + } else { + nested_job_timeout = TransportConnectJob::ConnectionTimeout(); + } +#endif // !defined(OS_ANDROID) && !defined(OS_IOS) + + return nested_job_timeout + + base::TimeDelta::FromSeconds(kHttpProxyConnectJobTimeoutInSeconds); +} + +void HttpProxyConnectJob::UpdateFieldTrialParametersForTesting() { + GetProxyTimeoutExperiments()->Init(); +} + +int HttpProxyConnectJob::ConnectInternal() { + int result = client_socket_->Connect(base::BindOnce( + &HttpProxyConnectJob::OnConnectComplete, base::Unretained(this))); + return HandleConnectResult(result); +} + +void HttpProxyConnectJob::ChangePriorityInternal(RequestPriority priority) { + if (client_socket_) + client_socket_->SetPriority(priority); +} + +void HttpProxyConnectJob::OnConnectComplete(int result) { + DCHECK_NE(ERR_IO_PENDING, result); + result = HandleConnectResult(result); + NotifyDelegateOfCompletion(result); + // |this| will have been deleted at this point. +} + +int HttpProxyConnectJob::HandleConnectResult(int result) { + if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) + error_response_info_ = client_socket_->GetAdditionalErrorState(); + + if (result == OK || result == ERR_PROXY_AUTH_REQUESTED || + result == ERR_HTTPS_PROXY_TUNNEL_RESPONSE) { + SetSocket(std::move(client_socket_)); + } + return result; +} + +} // namespace net
diff --git a/net/http/http_proxy_connect_job.h b/net/http/http_proxy_connect_job.h new file mode 100644 index 0000000..80d3b6e3 --- /dev/null +++ b/net/http/http_proxy_connect_job.h
@@ -0,0 +1,159 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_HTTP_HTTP_PROXY_CONNECT_JOB_H_ +#define NET_HTTP_HTTP_PROXY_CONNECT_JOB_H_ + +#include <memory> +#include <string> + +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "base/time/time.h" +#include "net/base/host_port_pair.h" +#include "net/base/net_export.h" +#include "net/http/http_auth.h" +#include "net/http/http_response_info.h" +#include "net/socket/connect_job.h" +#include "net/socket/ssl_client_socket.h" +#include "net/spdy/spdy_session.h" +#include "net/traffic_annotation/network_traffic_annotation.h" + +namespace net { + +class HttpAuthCache; +class HttpAuthHandlerFactory; +class HttpProxyClientSocketWrapper; +class NetLog; +class NetworkQualityEstimator; +class ProxyDelegate; +class SpdySessionPool; +class SSLSocketParams; +class TransportClientSocketPool; +class TransportSocketParams; +class QuicStreamFactory; + +// HttpProxySocketParams only needs the socket params for one of the proxy +// types. The other param must be NULL. When using an HTTP proxy, +// |transport_params| must be set. When using an HTTPS proxy or QUIC proxy, +// |ssl_params| must be set. Also, if using a QUIC proxy, |quic_version| must +// not be quic::QUIC_VERSION_UNSUPPORTED. +class NET_EXPORT_PRIVATE HttpProxySocketParams + : public base::RefCounted<HttpProxySocketParams> { + public: + HttpProxySocketParams( + const scoped_refptr<TransportSocketParams>& transport_params, + const scoped_refptr<SSLSocketParams>& ssl_params, + quic::QuicTransportVersion quic_version, + const std::string& user_agent, + const HostPortPair& endpoint, + HttpAuthCache* http_auth_cache, + HttpAuthHandlerFactory* http_auth_handler_factory, + SpdySessionPool* spdy_session_pool, + QuicStreamFactory* quic_stream_factory, + bool is_trusted_proxy, + bool tunnel, + const NetworkTrafficAnnotationTag traffic_annotation); + + const scoped_refptr<TransportSocketParams>& transport_params() const { + return transport_params_; + } + const scoped_refptr<SSLSocketParams>& ssl_params() const { + return ssl_params_; + } + quic::QuicTransportVersion quic_version() const { return quic_version_; } + const std::string& user_agent() const { return user_agent_; } + const HostPortPair& endpoint() const { return endpoint_; } + HttpAuthCache* http_auth_cache() const { return http_auth_cache_; } + HttpAuthHandlerFactory* http_auth_handler_factory() const { + return http_auth_handler_factory_; + } + SpdySessionPool* spdy_session_pool() { return spdy_session_pool_; } + QuicStreamFactory* quic_stream_factory() const { + return quic_stream_factory_; + } + bool is_trusted_proxy() const { return is_trusted_proxy_; } + bool tunnel() const { return tunnel_; } + const NetworkTrafficAnnotationTag traffic_annotation() const { + return traffic_annotation_; + } + + private: + friend class base::RefCounted<HttpProxySocketParams>; + ~HttpProxySocketParams(); + + const scoped_refptr<TransportSocketParams> transport_params_; + const scoped_refptr<SSLSocketParams> ssl_params_; + quic::QuicTransportVersion quic_version_; + SpdySessionPool* spdy_session_pool_; + QuicStreamFactory* quic_stream_factory_; + const std::string user_agent_; + const HostPortPair endpoint_; + HttpAuthCache* const http_auth_cache_; + HttpAuthHandlerFactory* const http_auth_handler_factory_; + const bool is_trusted_proxy_; + const bool tunnel_; + const NetworkTrafficAnnotationTag traffic_annotation_; + + DISALLOW_COPY_AND_ASSIGN(HttpProxySocketParams); +}; + +// HttpProxyConnectJob optionally establishes a tunnel through the proxy +// server after connecting the underlying transport socket. +class NET_EXPORT_PRIVATE HttpProxyConnectJob : public ConnectJob { + public: + HttpProxyConnectJob(const std::string& group_name, + RequestPriority priority, + const SocketTag& socket_tag, + bool respect_limits, + const scoped_refptr<HttpProxySocketParams>& params, + ProxyDelegate* proxy_delegate, + TransportClientSocketPool* transport_pool, + TransportClientSocketPool* ssl_pool, + NetworkQualityEstimator* network_quality_estimator, + Delegate* delegate, + NetLog* net_log); + ~HttpProxyConnectJob() override; + + // ConnectJob methods. + LoadState GetLoadState() const override; + bool HasEstablishedConnection() const override; + + void GetAdditionalErrorState(ClientSocketHandle* handle) override; + + // Returns the connection timeout that will be used by a HttpProxyConnectJob + // created with the specified parameters, given current network conditions. + static base::TimeDelta ConnectionTimeout( + const HttpProxySocketParams& params, + const NetworkQualityEstimator* network_quality_estimator); + + // Updates the field trial parameters used in calculating timeouts. + static void UpdateFieldTrialParametersForTesting(); + + private: + // Begins the tcp connection and the optional Http proxy tunnel. If the + // request is not immediately serviceable (likely), the request will return + // ERR_IO_PENDING. An OK return from this function or the callback means + // that the connection is established; ERR_PROXY_AUTH_REQUESTED means + // that the tunnel needs authentication credentials, the socket will be + // returned in this case, and must be released back to the pool; or + // a standard net error code will be returned. + int ConnectInternal() override; + + void ChangePriorityInternal(RequestPriority priority) override; + + void OnConnectComplete(int result); + + int HandleConnectResult(int result); + + std::unique_ptr<HttpProxyClientSocketWrapper> client_socket_; + + std::unique_ptr<HttpResponseInfo> error_response_info_; + + DISALLOW_COPY_AND_ASSIGN(HttpProxyConnectJob); +}; + +} // namespace net + +#endif // NET_HTTP_HTTP_PROXY_CONNECT_JOB_H_
diff --git a/net/http/http_proxy_connect_job_unittest.cc b/net/http/http_proxy_connect_job_unittest.cc new file mode 100644 index 0000000..7a149467 --- /dev/null +++ b/net/http/http_proxy_connect_job_unittest.cc
@@ -0,0 +1,746 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/http/http_proxy_connect_job.h" + +#include <map> +#include <string> +#include <utility> + +#include "base/metrics/field_trial.h" +#include "base/metrics/field_trial_param_associator.h" +#include "base/metrics/field_trial_params.h" +#include "base/stl_util.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/string_util.h" +#include "base/strings/stringprintf.h" +#include "base/strings/utf_string_conversions.h" +#include "base/test/metrics/histogram_tester.h" +#include "build/build_config.h" +#include "net/base/host_port_pair.h" +#include "net/base/test_proxy_delegate.h" +#include "net/http/http_network_session.h" +#include "net/nqe/network_quality_estimator_test_util.h" +#include "net/socket/client_socket_handle.h" +#include "net/socket/connect_job_test_util.h" +#include "net/socket/socket_test_util.h" +#include "net/socket/socks_connect_job.h" +#include "net/socket/ssl_connect_job.h" +#include "net/socket/transport_client_socket_pool.h" +#include "net/socket/transport_connect_job.h" +#include "net/spdy/spdy_test_util_common.h" +#include "net/test/gtest_util.h" +#include "net/test/test_with_scoped_task_environment.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace net { + +namespace { + +const char kEndpointHost[] = "www.endpoint.test"; + +enum HttpProxyType { HTTP, HTTPS, SPDY }; + +const char kHttpProxyHost[] = "httpproxy.example.test"; +const char kHttpsProxyHost[] = "httpsproxy.example.test"; + +} // namespace + +class HttpProxyConnectJobTest : public ::testing::TestWithParam<HttpProxyType>, + public WithScopedTaskEnvironment { + protected: + HttpProxyConnectJobTest() + : transport_socket_pool_(32 /* max_sockets */, + 6 /* max_sockets_pre_group */, + &socket_factory_, + session_deps_.host_resolver.get(), + session_deps_.cert_verifier.get(), + session_deps_.channel_id_service.get(), + session_deps_.transport_security_state.get(), + session_deps_.cert_transparency_verifier.get(), + session_deps_.ct_policy_enforcer.get(), + nullptr /* ssl_client_session_cache */, + std::string() /* ssl_session_cache_shard */, + session_deps_.ssl_config_service.get(), + nullptr /* socket_performance_watcher_factory */, + nullptr /* network_quality_estimator */, + nullptr /* net_log */), + ssl_socket_pool_(32 /* max_sockets */, + 6 /* max_sockets_pre_group */, + &socket_factory_, + session_deps_.host_resolver.get(), + session_deps_.cert_verifier.get(), + session_deps_.channel_id_service.get(), + session_deps_.transport_security_state.get(), + session_deps_.cert_transparency_verifier.get(), + session_deps_.ct_policy_enforcer.get(), + nullptr /* ssl_client_session_cache */, + std::string() /* ssl_session_cache_shard */, + session_deps_.ssl_config_service.get(), + nullptr /* socket_performance_watcher_factory */, + nullptr /* network_quality_estimator */, + nullptr /* net_log */), + field_trial_list_(nullptr) { + session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); + } + + virtual ~HttpProxyConnectJobTest() { + // Reset global field trial parameters to defaults values. + base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting(); + HttpProxyConnectJob::UpdateFieldTrialParametersForTesting(); + } + + // Initializes the field trial parameters for the field trial that determines + // connection timeout based on the network quality. + void InitAdaptiveTimeoutFieldTrialWithParams( + bool use_default_params, + int ssl_http_rtt_multiplier, + int non_ssl_http_rtt_multiplier, + base::TimeDelta min_proxy_connection_timeout, + base::TimeDelta max_proxy_connection_timeout) { + std::string trial_name = "NetAdaptiveProxyConnectionTimeout"; + std::string group_name = "GroupName"; + + std::map<std::string, std::string> params; + if (!use_default_params) { + params["ssl_http_rtt_multiplier"] = + base::NumberToString(ssl_http_rtt_multiplier); + params["non_ssl_http_rtt_multiplier"] = + base::NumberToString(non_ssl_http_rtt_multiplier); + params["min_proxy_connection_timeout_seconds"] = + base::NumberToString(min_proxy_connection_timeout.InSeconds()); + params["max_proxy_connection_timeout_seconds"] = + base::NumberToString(max_proxy_connection_timeout.InSeconds()); + } + base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting(); + EXPECT_TRUE( + base::AssociateFieldTrialParams(trial_name, group_name, params)); + EXPECT_TRUE(base::FieldTrialList::CreateFieldTrial(trial_name, group_name)); + + // Force static global that reads the field trials to update. + HttpProxyConnectJob::UpdateFieldTrialParametersForTesting(); + } + + scoped_refptr<TransportSocketParams> CreateHttpProxyParams() const { + if (GetParam() != HTTP) + return nullptr; + return base::MakeRefCounted<TransportSocketParams>( + HostPortPair(kHttpProxyHost, 80), false, OnHostResolutionCallback()); + } + + scoped_refptr<SSLSocketParams> CreateHttpsProxyParams() const { + if (GetParam() == HTTP) + return nullptr; + return base::MakeRefCounted<SSLSocketParams>( + base::MakeRefCounted<TransportSocketParams>( + HostPortPair(kHttpsProxyHost, 443), false, + OnHostResolutionCallback()), + nullptr, nullptr, HostPortPair(kHttpsProxyHost, 443), SSLConfig(), + PRIVACY_MODE_DISABLED); + } + + // Returns a correctly constructed HttpProxyParams for the HTTP or HTTPS + // proxy. + scoped_refptr<HttpProxySocketParams> CreateParams(bool tunnel) { + return base::MakeRefCounted<HttpProxySocketParams>( + CreateHttpProxyParams(), CreateHttpsProxyParams(), + quic::QUIC_VERSION_UNSUPPORTED, std::string(), + HostPortPair(kEndpointHost, tunnel ? 443 : 80), + session_->http_auth_cache(), session_->http_auth_handler_factory(), + session_->spdy_session_pool(), session_->quic_stream_factory(), + /*is_trusted_proxy=*/false, tunnel, TRAFFIC_ANNOTATION_FOR_TESTS); + } + + std::unique_ptr<HttpProxyConnectJob> CreateConnectJobForHttpRequest( + ConnectJob::Delegate* delegate, + RequestPriority priority = DEFAULT_PRIORITY) { + return CreateConnectJob(CreateParams(false /* tunnel */), delegate, + priority); + } + + std::unique_ptr<HttpProxyConnectJob> CreateConnectJobForTunnel( + ConnectJob::Delegate* delegate, + RequestPriority priority = DEFAULT_PRIORITY) { + return CreateConnectJob(CreateParams(true /* tunnel */), delegate, + priority); + } + + std::unique_ptr<HttpProxyConnectJob> CreateConnectJob( + scoped_refptr<HttpProxySocketParams> http_proxy_socket_params, + ConnectJob::Delegate* delegate, + RequestPriority priority) { + return std::make_unique<HttpProxyConnectJob>( + "group_name", priority, SocketTag(), true /* respect_limits */, + std::move(http_proxy_socket_params), proxy_delegate_.get(), + &transport_socket_pool_, &ssl_socket_pool_, &network_quality_estimator_, + delegate, nullptr /* net_log */); + } + + void InitProxyDelegate() { + proxy_delegate_ = std::make_unique<TestProxyDelegate>(); + } + + void Initialize(base::span<const MockRead> reads, + base::span<const MockWrite> writes, + base::span<const MockRead> spdy_reads, + base::span<const MockWrite> spdy_writes, + IoMode connect_and_ssl_io_mode) { + if (GetParam() == SPDY) { + data_ = std::make_unique<SequencedSocketData>(spdy_reads, spdy_writes); + } else { + data_ = std::make_unique<SequencedSocketData>(reads, writes); + } + + data_->set_connect_data(MockConnect(connect_and_ssl_io_mode, OK)); + + socket_factory_.AddSocketDataProvider(data_.get()); + + if (GetParam() != HTTP) { + ssl_data_ = + std::make_unique<SSLSocketDataProvider>(connect_and_ssl_io_mode, OK); + if (GetParam() == SPDY) { + InitializeSpdySsl(ssl_data_.get()); + } + socket_factory_.AddSSLSocketDataProvider(ssl_data_.get()); + } + } + + void InitializeSpdySsl(SSLSocketDataProvider* ssl_data) { + ssl_data->next_proto = kProtoHTTP2; + } + + TransportClientSocketPool* transport_socket_pool() { + return &transport_socket_pool_; + } + TransportClientSocketPool* ssl_socket_pool() { return &ssl_socket_pool_; } + + base::TimeDelta GetProxyConnectionTimeout() { + // Doesn't actually matter whether or not this is for a tunnel - the + // connection timeout is the same, though it probably shouldn't be the same, + // since tunnels need an extra round trip. + return HttpProxyConnectJob::ConnectionTimeout( + *CreateParams(true /* tunnel */), &network_quality_estimator_); + } + + protected: + std::unique_ptr<TestProxyDelegate> proxy_delegate_; + + std::unique_ptr<SSLSocketDataProvider> ssl_data_; + std::unique_ptr<SequencedSocketData> data_; + MockClientSocketFactory socket_factory_; + SpdySessionDependencies session_deps_; + + TestNetworkQualityEstimator network_quality_estimator_; + + TransportClientSocketPool transport_socket_pool_; + TransportClientSocketPool ssl_socket_pool_; + + std::unique_ptr<HttpNetworkSession> session_; + + base::HistogramTester histogram_tester_; + + base::FieldTrialList field_trial_list_; + + SpdyTestUtil spdy_util_; + + TestCompletionCallback callback_; +}; + +// All tests are run with three different proxy types: HTTP, HTTPS (non-SPDY) +// and SPDY. +INSTANTIATE_TEST_CASE_P(HttpProxyType, + HttpProxyConnectJobTest, + ::testing::Values(HTTP, HTTPS, SPDY)); + +TEST_P(HttpProxyConnectJobTest, NoTunnel) { + InitProxyDelegate(); + int loop_iterations = 0; + for (IoMode io_mode : {SYNCHRONOUS, ASYNC}) { + SCOPED_TRACE(io_mode); + session_deps_.host_resolver->set_synchronous_mode(io_mode == SYNCHRONOUS); + + Initialize(base::span<MockRead>(), base::span<MockWrite>(), + base::span<MockRead>(), base::span<MockWrite>(), io_mode); + + TestConnectJobDelegate test_delegate; + std::unique_ptr<ConnectJob> connect_job = + CreateConnectJobForHttpRequest(&test_delegate); + test_delegate.StartJobExpectingResult(connect_job.get(), OK, + io_mode == SYNCHRONOUS); + EXPECT_FALSE(proxy_delegate_->on_before_tunnel_request_called()); + + ++loop_iterations; + bool is_secure_proxy = GetParam() == HTTPS || GetParam() == SPDY; + histogram_tester_.ExpectTotalCount( + "Net.HttpProxy.ConnectLatency.Insecure.Success", + is_secure_proxy ? 0 : loop_iterations); + histogram_tester_.ExpectTotalCount( + "Net.HttpProxy.ConnectLatency.Secure.Success", + is_secure_proxy ? loop_iterations : 0); + } +} + +TEST_P(HttpProxyConnectJobTest, ProxyDelegateExtraHeaders) { + // TODO(https://crbug.com/926427): The ProxyDelegate API is currently broken + // in the SPDY case. + if (GetParam() == SPDY) + return; + + InitProxyDelegate(); + + ProxyServer proxy_server( + GetParam() == HTTP ? ProxyServer::SCHEME_HTTP : ProxyServer::SCHEME_HTTPS, + HostPortPair(GetParam() == HTTP ? kHttpProxyHost : kHttpsProxyHost, + GetParam() == HTTP ? 80 : 443)); + std::string request = + "CONNECT www.endpoint.test:443 HTTP/1.1\r\n" + "Host: www.endpoint.test:443\r\n" + "Proxy-Connection: keep-alive\r\n" + "Foo: " + + proxy_server.ToURI() + "\r\n\r\n"; + MockWrite writes[] = { + MockWrite(ASYNC, 0, request.c_str()), + }; + + const char kResponseHeaderName[] = "Foo"; + const char kResponseHeaderValue[] = "Response"; + std::string response = base::StringPrintf( + "HTTP/1.1 200 Connection Established\r\n" + "%s: %s\r\n\r\n", + kResponseHeaderName, kResponseHeaderValue); + MockRead reads[] = { + MockRead(ASYNC, 1, response.c_str()), + }; + + Initialize(reads, writes, base::span<MockRead>(), base::span<MockWrite>(), + ASYNC); + + TestConnectJobDelegate test_delegate; + std::unique_ptr<ConnectJob> connect_job = + CreateConnectJobForTunnel(&test_delegate); + test_delegate.StartJobExpectingResult(connect_job.get(), OK, + false /* expect_sync_result */); + proxy_delegate_->VerifyOnHttp1TunnelHeadersReceived( + proxy_server, kResponseHeaderName, kResponseHeaderValue); +} + +TEST_P(HttpProxyConnectJobTest, RequestPriority) { + // Make request hang during host resolution, so can observe priority there. + session_deps_.host_resolver->set_ondemand_mode(true); + + // Needed to destroy the ConnectJob in the nested socket pools. + // TODO(https://crbug.com/927088): Remove this once there are no nested socket + // pools. + session_deps_.host_resolver->rules()->AddSimulatedFailure(kHttpProxyHost); + session_deps_.host_resolver->rules()->AddSimulatedFailure(kHttpsProxyHost); + + for (int initial_priority = MINIMUM_PRIORITY; + initial_priority <= MAXIMUM_PRIORITY; ++initial_priority) { + SCOPED_TRACE(initial_priority); + for (int new_priority = MINIMUM_PRIORITY; new_priority <= MAXIMUM_PRIORITY; + ++new_priority) { + SCOPED_TRACE(new_priority); + if (initial_priority == new_priority) + continue; + TestConnectJobDelegate test_delegate; + std::unique_ptr<ConnectJob> connect_job = CreateConnectJobForHttpRequest( + &test_delegate, static_cast<RequestPriority>(initial_priority)); + EXPECT_THAT(connect_job->Connect(), test::IsError(ERR_IO_PENDING)); + EXPECT_FALSE(test_delegate.has_result()); + + MockHostResolverBase* host_resolver = session_deps_.host_resolver.get(); + int request_id = host_resolver->num_resolve(); + EXPECT_EQ(initial_priority, host_resolver->request_priority(request_id)); + + connect_job->ChangePriority(static_cast<RequestPriority>(new_priority)); + EXPECT_EQ(new_priority, host_resolver->request_priority(request_id)); + + connect_job->ChangePriority( + static_cast<RequestPriority>(initial_priority)); + EXPECT_EQ(initial_priority, host_resolver->request_priority(request_id)); + + // Complete the resolution, which should result in destroying the + // connecting socket. Can't just delete the ConnectJob, since that won't + // destroy the ConnectJobs in the underlying pools. + host_resolver->ResolveAllPending(); + EXPECT_THAT(test_delegate.WaitForResult(), + test::IsError(ERR_PROXY_CONNECTION_FAILED)); + } + } +} + +// Make sure that HttpProxyConnectJob passes on its priority to its +// SPDY session's socket request on Init, and on SetPriority. +TEST_P(HttpProxyConnectJobTest, SetSpdySessionSocketRequestPriority) { + if (GetParam() != SPDY) + return; + session_deps_.host_resolver->set_synchronous_mode(true); + + // The SPDY CONNECT request should have a priority of HIGHEST. + spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyConnect( + nullptr /* extra_headers */, 0 /* extra_header_count */, + 1 /* stream_id */, HIGHEST, HostPortPair(kEndpointHost, 443))); + MockWrite spdy_writes[] = {CreateMockWrite(req, 0, ASYNC)}; + spdy::SpdySerializedFrame resp( + spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); + MockRead spdy_reads[] = {CreateMockRead(resp, 1, ASYNC), + MockRead(ASYNC, 0, 2)}; + + Initialize(base::span<MockRead>(), base::span<MockWrite>(), spdy_reads, + spdy_writes, SYNCHRONOUS); + + TestConnectJobDelegate test_delegate; + std::unique_ptr<ConnectJob> connect_job = + CreateConnectJobForTunnel(&test_delegate, MEDIUM); + EXPECT_THAT(connect_job->Connect(), test::IsError(ERR_IO_PENDING)); + EXPECT_FALSE(test_delegate.has_result()); + + connect_job->ChangePriority(HIGHEST); + + // Wait for tunnel to be established. If the frame has a MEDIUM priority + // instead of highest, the written data will not match what is expected, and + // the test will fail. + EXPECT_THAT(test_delegate.WaitForResult(), test::IsOk()); +} + +TEST_P(HttpProxyConnectJobTest, TCPError) { + // SPDY and HTTPS are identical, as they only differ once a connection is + // established. + if (GetParam() == SPDY) + return; + int loop_iterations = 0; + for (IoMode io_mode : {SYNCHRONOUS, ASYNC}) { + SCOPED_TRACE(io_mode); + session_deps_.host_resolver->set_synchronous_mode(io_mode == SYNCHRONOUS); + + SequencedSocketData data; + data.set_connect_data(MockConnect(io_mode, ERR_CONNECTION_CLOSED)); + socket_factory_.AddSocketDataProvider(&data); + + TestConnectJobDelegate test_delegate; + std::unique_ptr<ConnectJob> connect_job = + CreateConnectJobForHttpRequest(&test_delegate); + test_delegate.StartJobExpectingResult( + connect_job.get(), ERR_PROXY_CONNECTION_FAILED, io_mode == SYNCHRONOUS); + + bool is_secure_proxy = GetParam() == HTTPS; + ++loop_iterations; + histogram_tester_.ExpectTotalCount( + "Net.HttpProxy.ConnectLatency.Insecure.Error", + is_secure_proxy ? 0 : loop_iterations); + histogram_tester_.ExpectTotalCount( + "Net.HttpProxy.ConnectLatency.Secure.Error", + is_secure_proxy ? loop_iterations : 0); + } +} + +TEST_P(HttpProxyConnectJobTest, SSLError) { + if (GetParam() == HTTP) + return; + int loop_iterations = 0; + + for (IoMode io_mode : {SYNCHRONOUS, ASYNC}) { + SCOPED_TRACE(io_mode); + session_deps_.host_resolver->set_synchronous_mode(io_mode == SYNCHRONOUS); + + SequencedSocketData data; + data.set_connect_data(MockConnect(io_mode, OK)); + socket_factory_.AddSocketDataProvider(&data); + + SSLSocketDataProvider ssl_data(io_mode, ERR_CERT_AUTHORITY_INVALID); + if (GetParam() == SPDY) { + InitializeSpdySsl(&ssl_data); + } + socket_factory_.AddSSLSocketDataProvider(&ssl_data); + + TestConnectJobDelegate test_delegate; + std::unique_ptr<ConnectJob> connect_job = + CreateConnectJobForTunnel(&test_delegate); + test_delegate.StartJobExpectingResult(connect_job.get(), + ERR_PROXY_CERTIFICATE_INVALID, + io_mode == SYNCHRONOUS); + + ++loop_iterations; + histogram_tester_.ExpectTotalCount( + "Net.HttpProxy.ConnectLatency.Secure.Error", loop_iterations); + histogram_tester_.ExpectTotalCount( + "Net.HttpProxy.ConnectLatency.Insecure.Error", 0); + } +} + +TEST_P(HttpProxyConnectJobTest, TunnelUnexpectedClose) { + for (IoMode io_mode : {SYNCHRONOUS, ASYNC}) { + SCOPED_TRACE(io_mode); + session_deps_.host_resolver->set_synchronous_mode(io_mode == SYNCHRONOUS); + + MockWrite writes[] = { + MockWrite(io_mode, 0, + "CONNECT www.endpoint.test:443 HTTP/1.1\r\n" + "Host: www.endpoint.test:443\r\n" + "Proxy-Connection: keep-alive\r\n\r\n"), + }; + MockRead reads[] = { + MockRead(io_mode, 1, "HTTP/1.1 200 Conn"), + MockRead(io_mode, ERR_CONNECTION_CLOSED, 2), + }; + spdy::SpdySerializedFrame req(SpdyTestUtil().ConstructSpdyConnect( + nullptr /*extra_headers */, 0 /*extra_header_count */, + 1 /* stream_id */, DEFAULT_PRIORITY, HostPortPair(kEndpointHost, 443))); + MockWrite spdy_writes[] = {CreateMockWrite(req, 0, io_mode)}; + // Sync reads don't really work with SPDY, since it constantly reads from + // the socket. + MockRead spdy_reads[] = { + MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), + }; + + Initialize(reads, writes, spdy_reads, spdy_writes, io_mode); + + TestConnectJobDelegate test_delegate; + std::unique_ptr<ConnectJob> connect_job = + CreateConnectJobForTunnel(&test_delegate); + + if (GetParam() == SPDY) { + // SPDY cannot process a headers block unless it's complete and so it + // returns ERR_CONNECTION_CLOSED in this case. SPDY also doesn't return + // this failure synchronously. + test_delegate.StartJobExpectingResult(connect_job.get(), + ERR_CONNECTION_CLOSED, + false /* expect_sync_result */); + } else { + test_delegate.StartJobExpectingResult(connect_job.get(), + ERR_RESPONSE_HEADERS_TRUNCATED, + io_mode == SYNCHRONOUS); + } + } +} + +TEST_P(HttpProxyConnectJobTest, Tunnel1xxResponse) { + // Tests that 1xx responses are rejected for a CONNECT request. + if (GetParam() == SPDY) { + // SPDY doesn't have 1xx responses. + return; + } + + for (IoMode io_mode : {SYNCHRONOUS, ASYNC}) { + SCOPED_TRACE(io_mode); + session_deps_.host_resolver->set_synchronous_mode(io_mode == SYNCHRONOUS); + + MockWrite writes[] = { + MockWrite(io_mode, 0, + "CONNECT www.endpoint.test:443 HTTP/1.1\r\n" + "Host: www.endpoint.test:443\r\n" + "Proxy-Connection: keep-alive\r\n\r\n"), + }; + MockRead reads[] = { + MockRead(io_mode, 1, "HTTP/1.1 100 Continue\r\n\r\n"), + MockRead(io_mode, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"), + }; + + Initialize(reads, writes, base::span<MockRead>(), base::span<MockWrite>(), + io_mode); + + TestConnectJobDelegate test_delegate; + std::unique_ptr<ConnectJob> connect_job = + CreateConnectJobForTunnel(&test_delegate); + test_delegate.StartJobExpectingResult(connect_job.get(), + ERR_TUNNEL_CONNECTION_FAILED, + io_mode == SYNCHRONOUS); + } +} + +TEST_P(HttpProxyConnectJobTest, TunnelSetupError) { + for (IoMode io_mode : {SYNCHRONOUS, ASYNC}) { + SCOPED_TRACE(io_mode); + session_deps_.host_resolver->set_synchronous_mode(io_mode == SYNCHRONOUS); + + MockWrite writes[] = { + MockWrite(io_mode, 0, + "CONNECT www.endpoint.test:443 HTTP/1.1\r\n" + "Host: www.endpoint.test:443\r\n" + "Proxy-Connection: keep-alive\r\n\r\n"), + }; + MockRead reads[] = { + MockRead(io_mode, 1, "HTTP/1.1 304 Not Modified\r\n\r\n"), + }; + SpdyTestUtil spdy_util; + spdy::SpdySerializedFrame req(spdy_util.ConstructSpdyConnect( + nullptr /* extra_headers */, 0 /* extra_header_count */, + 1 /* stream_id */, LOW, HostPortPair("www.endpoint.test", 443))); + spdy::SpdySerializedFrame rst( + spdy_util.ConstructSpdyRstStream(1, spdy::ERROR_CODE_CANCEL)); + MockWrite spdy_writes[] = { + CreateMockWrite(req, 0, io_mode), + CreateMockWrite(rst, 2, io_mode), + }; + spdy::SpdySerializedFrame resp(spdy_util.ConstructSpdyReplyError(1)); + // Sync reads don't really work with SPDY, since it constantly reads from + // the socket. + MockRead spdy_reads[] = { + CreateMockRead(resp, 1, ASYNC), + MockRead(ASYNC, OK, 3), + }; + + Initialize(reads, writes, spdy_reads, spdy_writes, io_mode); + + TestConnectJobDelegate test_delegate; + std::unique_ptr<ConnectJob> connect_job = + CreateConnectJobForTunnel(&test_delegate, LOW); + test_delegate.StartJobExpectingResult( + connect_job.get(), ERR_TUNNEL_CONNECTION_FAILED, + io_mode == SYNCHRONOUS && GetParam() != SPDY); + // Need to close the session to prevent reuse in the next loop iteration. + session_->spdy_session_pool()->CloseAllSessions(); + } +} + +TEST_P(HttpProxyConnectJobTest, ConnectionTimeoutMin) { + // Set RTT estimate to a low value. + base::TimeDelta rtt_estimate = base::TimeDelta::FromMilliseconds(1); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + + EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout()); + + // Test against a large value. + EXPECT_GE(base::TimeDelta::FromMinutes(10), GetProxyConnectionTimeout()); + +#if (defined(OS_ANDROID) || defined(OS_IOS)) + EXPECT_EQ(base::TimeDelta::FromSeconds(8), GetProxyConnectionTimeout()); +#else + EXPECT_EQ(base::TimeDelta::FromSeconds(30), GetProxyConnectionTimeout()); +#endif +} + +TEST_P(HttpProxyConnectJobTest, ConnectionTimeoutMax) { + // Set RTT estimate to a high value. + base::TimeDelta rtt_estimate = base::TimeDelta::FromSeconds(100); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + + EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout()); + + // Test against a large value. + EXPECT_GE(base::TimeDelta::FromMinutes(10), GetProxyConnectionTimeout()); + +#if (defined(OS_ANDROID) || defined(OS_IOS)) + EXPECT_EQ(base::TimeDelta::FromSeconds(30), GetProxyConnectionTimeout()); +#else + EXPECT_EQ(base::TimeDelta::FromSeconds(60), GetProxyConnectionTimeout()); +#endif +} + +// Tests the connection timeout values when the field trial parameters are +// specified. +TEST_P(HttpProxyConnectJobTest, ConnectionTimeoutWithExperiment) { + // Timeout should be kMultiplier times the HTTP RTT estimate. + const int kMultiplier = 4; + const base::TimeDelta kMinTimeout = base::TimeDelta::FromSeconds(8); + const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(20); + + InitAdaptiveTimeoutFieldTrialWithParams(false, kMultiplier, kMultiplier, + kMinTimeout, kMaxTimeout); + EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout()); + + base::TimeDelta rtt_estimate = base::TimeDelta::FromSeconds(4); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + base::TimeDelta expected_connection_timeout = kMultiplier * rtt_estimate; + EXPECT_EQ(expected_connection_timeout, GetProxyConnectionTimeout()); + + // Connection timeout should not exceed kMaxTimeout. + rtt_estimate = base::TimeDelta::FromSeconds(25); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + EXPECT_EQ(kMaxTimeout, GetProxyConnectionTimeout()); + + // Connection timeout should not be less than kMinTimeout. + rtt_estimate = base::TimeDelta::FromSeconds(0); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + EXPECT_EQ(kMinTimeout, GetProxyConnectionTimeout()); +} + +// Tests the connection timeout values when the field trial parameters are +// specified. +TEST_P(HttpProxyConnectJobTest, ConnectionTimeoutExperimentDifferentParams) { + // Timeout should be kMultiplier times the HTTP RTT estimate. + const int kMultiplier = 3; + const base::TimeDelta kMinTimeout = base::TimeDelta::FromSeconds(2); + const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(30); + + InitAdaptiveTimeoutFieldTrialWithParams(false, kMultiplier, kMultiplier, + kMinTimeout, kMaxTimeout); + EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout()); + + base::TimeDelta rtt_estimate = base::TimeDelta::FromSeconds(2); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + EXPECT_EQ(kMultiplier * rtt_estimate, GetProxyConnectionTimeout()); + + // A change in RTT estimate should also change the connection timeout. + rtt_estimate = base::TimeDelta::FromSeconds(7); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + EXPECT_EQ(kMultiplier * rtt_estimate, GetProxyConnectionTimeout()); + + // Connection timeout should not exceed kMaxTimeout. + rtt_estimate = base::TimeDelta::FromSeconds(35); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + EXPECT_EQ(kMaxTimeout, GetProxyConnectionTimeout()); + + // Connection timeout should not be less than kMinTimeout. + rtt_estimate = base::TimeDelta::FromSeconds(0); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + EXPECT_EQ(kMinTimeout, GetProxyConnectionTimeout()); +} + +TEST_P(HttpProxyConnectJobTest, ConnectionTimeoutWithConnectionProperty) { + const int kSecureMultiplier = 3; + const int kNonSecureMultiplier = 5; + const base::TimeDelta kMinTimeout = base::TimeDelta::FromSeconds(2); + const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(30); + + InitAdaptiveTimeoutFieldTrialWithParams( + false, kSecureMultiplier, kNonSecureMultiplier, kMinTimeout, kMaxTimeout); + + const base::TimeDelta kRttEstimate = base::TimeDelta::FromSeconds(2); + network_quality_estimator_.SetStartTimeNullHttpRtt(kRttEstimate); + // By default, connection timeout should return the timeout for secure + // proxies. + if (GetParam() != HTTP) { + EXPECT_EQ(kSecureMultiplier * kRttEstimate, GetProxyConnectionTimeout()); + } else { + EXPECT_EQ(kNonSecureMultiplier * kRttEstimate, GetProxyConnectionTimeout()); + } +} + +// Tests the connection timeout values when the field trial parameters are not +// specified. +TEST_P(HttpProxyConnectJobTest, ProxyPoolTimeoutWithExperimentDefaultParams) { + InitAdaptiveTimeoutFieldTrialWithParams(true, 0, 0, base::TimeDelta(), + base::TimeDelta()); + EXPECT_LE(base::TimeDelta(), GetProxyConnectionTimeout()); + + // Timeout should be |http_rtt_multiplier| times the HTTP RTT + // estimate. + base::TimeDelta rtt_estimate = base::TimeDelta::FromMilliseconds(10); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + // Connection timeout should not be less than the HTTP RTT estimate. + EXPECT_LE(rtt_estimate, GetProxyConnectionTimeout()); + + // A change in RTT estimate should also change the connection timeout. + rtt_estimate = base::TimeDelta::FromSeconds(10); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + // Connection timeout should not be less than the HTTP RTT estimate. + EXPECT_LE(rtt_estimate, GetProxyConnectionTimeout()); + + // Set RTT to a very large value. + rtt_estimate = base::TimeDelta::FromMinutes(60); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + EXPECT_GT(rtt_estimate, GetProxyConnectionTimeout()); + + // Set RTT to a very small value. + rtt_estimate = base::TimeDelta::FromSeconds(0); + network_quality_estimator_.SetStartTimeNullHttpRtt(rtt_estimate); + EXPECT_LT(rtt_estimate, GetProxyConnectionTimeout()); +} + +// TODO(https://crbug.com/927096): It would be nice to also test the timeouts in +// HttpProxyClientSocketPool. + +} // namespace net \ No newline at end of file
diff --git a/net/http/http_stream_factory_unittest.cc b/net/http/http_stream_factory_unittest.cc index 193b301..84b3685c 100644 --- a/net/http/http_stream_factory_unittest.cc +++ b/net/http/http_stream_factory_unittest.cc
@@ -402,8 +402,11 @@ int last_num_streams() const { return last_num_streams_; } const std::string& last_group_name() const { return last_group_name_; } - // Resets |last_num_streams_| to its default value. - void reset_last_num_streams() { last_num_streams_ = -1; } + // Resets |last_num_streams_| and |last_group_name_| default values. + void reset() { + last_num_streams_ = -1; + last_group_name_.clear(); + } int RequestSocket(const std::string& group_name, const void* socket_params, @@ -551,10 +554,15 @@ proxy_server, base::WrapUnique(ssl_conn_pool)); peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); PreconnectHelper(kTests[i], session.get()); - if (kTests[i].ssl) + if (kTests[i].ssl) { EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); - else + EXPECT_EQ("http_proxy/" + GetGroupName(kTests[i]), + ssl_conn_pool->last_group_name()); + } else { EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); + EXPECT_EQ("http_proxy/" + GetGroupName(kTests[i]), + http_proxy_pool->last_group_name()); + } } } @@ -573,23 +581,14 @@ session_deps.transport_security_state.get(), session_deps.cert_transparency_verifier.get(), session_deps.ct_policy_enforcer.get()); - CapturePreconnectsTransportSocketPool* ssl_conn_pool = - new CapturePreconnectsTransportSocketPool( - session_deps.host_resolver.get(), session_deps.cert_verifier.get(), - session_deps.transport_security_state.get(), - session_deps.cert_transparency_verifier.get(), - session_deps.ct_policy_enforcer.get()); auto mock_pool_manager = std::make_unique<MockClientSocketPoolManager>(); mock_pool_manager->SetSocketPoolForProxy( proxy_server, base::WrapUnique(socks_proxy_pool)); - mock_pool_manager->SetSocketPoolForSSLWithProxy( - proxy_server, base::WrapUnique(ssl_conn_pool)); peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); PreconnectHelper(kTests[i], session.get()); - if (kTests[i].ssl) - EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); - else - EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); + EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); + EXPECT_EQ("socks4/" + GetGroupName(kTests[i]), + socks_proxy_pool->last_group_name()); } } @@ -1375,7 +1374,7 @@ num_streams, request_privacy_mode_disabled); EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); EXPECT_EQ(num_streams, http_proxy_pool->last_num_streams()); - http_proxy_pool->reset_last_num_streams(); + http_proxy_pool->reset(); // Second preconnect job with same privacy mode should not succeed. session->http_stream_factory()->PreconnectStreams(
diff --git a/net/http/mock_http_cache.cc b/net/http/mock_http_cache.cc index 3ae150b..254a960 100644 --- a/net/http/mock_http_cache.cc +++ b/net/http/mock_http_cache.cc
@@ -414,6 +414,7 @@ double_create_check_(true), fail_sparse_requests_(false), support_in_memory_entry_data_(true), + force_fail_callback_later_(false), defer_op_(MockDiskEntry::DEFER_NONE), resume_return_code_(0) {} @@ -434,6 +435,11 @@ disk_cache::Entry** entry, CompletionOnceCallback callback) { DCHECK(!callback.is_null()); + if (force_fail_callback_later_) { + CallbackLater(std::move(callback), ERR_CACHE_OPEN_FAILURE); + return ERR_IO_PENDING; + } + if (fail_requests_) return ERR_CACHE_OPEN_FAILURE; @@ -471,6 +477,11 @@ disk_cache::Entry** entry, CompletionOnceCallback callback) { DCHECK(!callback.is_null()); + if (force_fail_callback_later_) { + CallbackLater(std::move(callback), ERR_CACHE_CREATE_FAILURE); + return ERR_IO_PENDING; + } + if (fail_requests_) return ERR_CACHE_CREATE_FAILURE; @@ -525,6 +536,14 @@ net::RequestPriority request_priority, CompletionOnceCallback callback) { DCHECK(!callback.is_null()); + if (force_fail_callback_later_) { + CallbackLater(std::move(callback), ERR_CACHE_DOOM_FAILURE); + return ERR_IO_PENDING; + } + + if (fail_requests_) + return ERR_CACHE_DOOM_FAILURE; + auto it = entries_.find(key); if (it != entries_.end()) { it->second->Release();
diff --git a/net/http/mock_http_cache.h b/net/http/mock_http_cache.h index 887f45ff..84030b7 100644 --- a/net/http/mock_http_cache.h +++ b/net/http/mock_http_cache.h
@@ -191,8 +191,8 @@ // Returns number of doomed entries. int doomed_count() const { return doomed_count_; } - // Fail any subsequent CreateEntry and OpenEntry. - void set_fail_requests() { fail_requests_ = true; } + // Fail any subsequent CreateEntry, OpenEntry, and DoomEntry + void set_fail_requests(bool value) { fail_requests_ = value; } // Return entries that fail some of their requests. void set_soft_failures(bool value) { soft_failures_ = value; } @@ -212,6 +212,12 @@ support_in_memory_entry_data_ = value; } + // OpenEntry, CreateEntry, and DoomEntry immediately return with + // ERR_IO_PENDING and will callback some time later with an error. + void set_force_fail_callback_later(bool value) { + force_fail_callback_later_ = value; + } + // Makes all requests for data ranges to fail as not implemented. void set_fail_sparse_requests() { fail_sparse_requests_ = true; } @@ -256,6 +262,7 @@ bool double_create_check_; bool fail_sparse_requests_; bool support_in_memory_entry_data_; + bool force_fail_callback_later_; // Used for pause and restart. MockDiskEntry::DeferOp defer_op_;
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc index 5a76480..d391c3a 100644 --- a/net/socket/client_socket_pool_base.cc +++ b/net/socket/client_socket_pool_base.cc
@@ -1265,11 +1265,12 @@ // connection - the timeout they used is tuned for that, and tests expect that // behavior. // - // TODO(mmenke): Replace both this and the LOAD_STATE_RESOLVING_HOST check - // with a callback. Use the LOAD_STATE_RESOLVING_HOST callback to start the - // timer (And invoke the OnHostResolved callback of any pending requests), and - // the HasEstablishedConnection() callback to stop the timer. That should - // result in a more robust, testable API. + // TODO(https://crbug.com/929814): Replace both this and the + // LOAD_STATE_RESOLVING_HOST check with a callback. Use the + // LOAD_STATE_RESOLVING_HOST callback to start the timer (And invoke the + // OnHostResolved callback of any pending requests), and the + // HasEstablishedConnection() callback to stop the timer. That should result + // in a more robust, testable API. if ((*jobs_.begin())->HasEstablishedConnection()) return;
diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc index cbb30de..6ebcccc 100644 --- a/net/socket/client_socket_pool_manager.cc +++ b/net/socket/client_socket_pool_manager.cc
@@ -200,6 +200,9 @@ TransportClientSocketPool* ssl_pool = nullptr; if (proxy_info.is_direct()) { ssl_pool = session->GetTransportSocketPool(socket_pool_type); + } else if (proxy_info.is_socks()) { + ssl_pool = session->GetSocketPoolForSOCKSProxy(socket_pool_type, + proxy_info.proxy_server()); } else { ssl_pool = session->GetSocketPoolForSSLWithProxy( socket_pool_type, proxy_info.proxy_server());
diff --git a/net/socket/client_socket_pool_manager.h b/net/socket/client_socket_pool_manager.h index 3e8c651..c212e25 100644 --- a/net/socket/client_socket_pool_manager.h +++ b/net/socket/client_socket_pool_manager.h
@@ -79,6 +79,10 @@ virtual void CloseIdleSockets() = 0; // Returns the socket pool for direct HTTP and SSL connections. virtual TransportClientSocketPool* GetTransportSocketPool() = 0; + // Returns the socket pool used for both SOCKS and SSL over SOCKS. + // TODO(https://crbug.com/929714): Merge this with + // GetSocketPoolForHTTPLikeProxy(), once GetSocketPoolForSSLWithProxy() and + // GetSocketPoolForHTTPLikeProxy() have been merged. virtual TransportClientSocketPool* GetSocketPoolForSOCKSProxy( const ProxyServer& socks_proxy) = 0; // Returns the HttpProxyClientSocketPool for a ProxyServer that uses an
diff --git a/net/socket/client_socket_pool_manager_impl.cc b/net/socket/client_socket_pool_manager_impl.cc index d6eaec05..a0527e8c 100644 --- a/net/socket/client_socket_pool_manager_impl.cc +++ b/net/socket/client_socket_pool_manager_impl.cc
@@ -243,8 +243,7 @@ ct_policy_enforcer_, ssl_client_session_cache_, ssl_session_cache_shard_, ssl_config_service_, socket_performance_watcher_factory_, network_quality_estimator_, - net_log_, nullptr /* no socks proxy */, - nullptr /* no http proxy */))); + net_log_, nullptr /* no http proxy */))); DCHECK(ssl_https_ret.second); std::pair<HTTPProxySocketPoolMap::iterator, bool> ret = @@ -261,6 +260,9 @@ TransportClientSocketPool* ClientSocketPoolManagerImpl::GetSocketPoolForSSLWithProxy( const ProxyServer& proxy_server) { + DCHECK(!proxy_server.is_socks()); + DCHECK(!proxy_server.is_direct()); + TransportSocketPoolMap::const_iterator it = ssl_socket_pools_for_proxies_.find(proxy_server); if (it != ssl_socket_pools_for_proxies_.end()) @@ -281,8 +283,6 @@ ssl_session_cache_shard_, ssl_config_service_, socket_performance_watcher_factory_, network_quality_estimator_, net_log_, - proxy_server.is_socks() ? GetSocketPoolForSOCKSProxy(proxy_server) - : nullptr, proxy_server.is_http_like() ? GetSocketPoolForHTTPLikeProxy(proxy_server) : nullptr)));
diff --git a/net/socket/connect_job.h b/net/socket/connect_job.h index 6f195025..b0f08657 100644 --- a/net/socket/connect_job.h +++ b/net/socket/connect_job.h
@@ -157,8 +157,8 @@ // Returns true if the ConnectJob has ever successfully established a TCP // connection. Used solely for deciding if a backup job is needed. Once it - // starts returning true, must always return true when called in the future, - // until NotifyComplete() is invoked. + // starts returning true, must always return true when called in the future. + // Not safe to call after NotifyComplete() is invoked. virtual bool HasEstablishedConnection() const = 0; // If Connect returns an error (or OnConnectJobComplete reports an error
diff --git a/net/socket/ssl_client_socket_pool_unittest.cc b/net/socket/ssl_client_socket_pool_unittest.cc index 9ec8143c..6d5751bc 100644 --- a/net/socket/ssl_client_socket_pool_unittest.cc +++ b/net/socket/ssl_client_socket_pool_unittest.cc
@@ -113,7 +113,6 @@ nullptr /* ssl_config_service */, nullptr /* socket_performance_watcher_factory */, nullptr /* network_quality_estimator */, nullptr /* net_log */, - nullptr /* socks_pool */, http_proxy_pool ? &http_proxy_socket_pool_ : nullptr)); }
diff --git a/net/socket/ssl_connect_job.cc b/net/socket/ssl_connect_job.cc index 529ff81f..ccf5781 100644 --- a/net/socket/ssl_connect_job.cc +++ b/net/socket/ssl_connect_job.cc
@@ -24,7 +24,6 @@ #include "net/socket/client_socket_handle.h" #include "net/socket/socks_connect_job.h" #include "net/socket/ssl_client_socket.h" -#include "net/socket/transport_client_socket_pool.h" #include "net/socket/transport_connect_job.h" #include "net/ssl/ssl_cert_request_info.h" #include "net/ssl/ssl_connection_status_flags.h" @@ -95,7 +94,6 @@ RequestPriority priority, const CommonConnectJobParams& common_connect_job_params, const scoped_refptr<SSLSocketParams>& params, - TransportClientSocketPool* socks_pool, HttpProxyClientSocketPool* http_proxy_pool, ConnectJob::Delegate* delegate) : ConnectJob(priority, @@ -107,7 +105,6 @@ NetLogWithSource::Make(common_connect_job_params.net_log, NetLogSourceType::SSL_CONNECT_JOB)), params_(params), - socks_pool_(socks_pool), http_proxy_pool_(http_proxy_pool), callback_(base::BindRepeating(&SSLConnectJob::OnIOComplete, base::Unretained(this))) {} @@ -121,9 +118,8 @@ case STATE_TUNNEL_CONNECT: return LOAD_STATE_IDLE; case STATE_TRANSPORT_CONNECT_COMPLETE: - return nested_connect_job_->GetLoadState(); case STATE_SOCKS_CONNECT_COMPLETE: - return transport_socket_handle_->GetLoadState(); + return nested_connect_job_->GetLoadState(); case STATE_TUNNEL_CONNECT_COMPLETE: if (transport_socket_handle_->socket()) return LOAD_STATE_ESTABLISHING_PROXY_TUNNEL; @@ -140,7 +136,7 @@ bool SSLConnectJob::HasEstablishedConnection() const { // Return true to prevent creating any backup jobs when this is used on top of // another socket pool type. - if (socks_pool_ || http_proxy_pool_) + if (http_proxy_pool_) return true; // If waiting on a nested ConnectJob, defer to that ConnectJob's state. @@ -256,7 +252,8 @@ } int SSLConnectJob::DoTransportConnectComplete(int result) { - // TODO(mmenke): Implement a better API to get this information. + // TODO(https://crbug.com/927101): Implement a better API to get this + // information. ClientSocketHandle bogus_handle; nested_connect_job_->GetAdditionalErrorState(&bogus_handle); connection_attempts_.insert(connection_attempts_.end(), @@ -272,22 +269,21 @@ } int SSLConnectJob::DoSOCKSConnect() { - DCHECK(socks_pool_); + DCHECK(!nested_connect_job_); + DCHECK(params_->GetSocksProxyConnectionParams()); + next_state_ = STATE_SOCKS_CONNECT_COMPLETE; - transport_socket_handle_.reset(new ClientSocketHandle()); - scoped_refptr<SOCKSSocketParams> socks_proxy_params = - params_->GetSocksProxyConnectionParams(); - return transport_socket_handle_->Init( - group_name(), - TransportClientSocketPool::SocketParams::CreateFromSOCKSSocketParams( - socks_proxy_params), - priority(), socket_tag(), respect_limits(), callback_, socks_pool_, - net_log()); + nested_connect_job_ = std::make_unique<SOCKSConnectJob>( + priority(), common_connect_job_params(), + params_->GetSocksProxyConnectionParams(), this); + return nested_connect_job_->Connect(); } int SSLConnectJob::DoSOCKSConnectComplete(int result) { - if (result == OK) + if (result == OK) { next_state_ = STATE_SSL_CONNECT; + nested_socket_ = nested_connect_job_->PassSocket(); + } return result; } @@ -355,8 +351,8 @@ // If privacy mode is enabled and the session shard is non-empty, prefix the // SSL session shard with "pm/". Otherwise, prefix with "nopm/". - // TODO(mmenke): Consider moving this up to the socket pool layer, after - // giving socket pools knowledge of privacy mode. + // TODO(https://crbug.com/927084): Consider moving this up to the socket pool + // layer, after giving socket pools knowledge of privacy mode. SSLClientSocketContext context_with_privacy_mode( ssl_client_socket_context().cert_verifier, ssl_client_socket_context().channel_id_service,
diff --git a/net/socket/ssl_connect_job.h b/net/socket/ssl_connect_job.h index 49f7a83..452d25f7 100644 --- a/net/socket/ssl_connect_job.h +++ b/net/socket/ssl_connect_job.h
@@ -27,7 +27,6 @@ class HttpProxyClientSocketPool; class HttpProxySocketParams; class SOCKSSocketParams; -class TransportClientSocketPool; class TransportSocketParams; class NET_EXPORT_PRIVATE SSLSocketParams @@ -85,7 +84,6 @@ SSLConnectJob(RequestPriority priority, const CommonConnectJobParams& common_connect_job_params, const scoped_refptr<SSLSocketParams>& params, - TransportClientSocketPool* socks_pool, HttpProxyClientSocketPool* http_proxy_pool, ConnectJob::Delegate* delegate); ~SSLConnectJob() override; @@ -144,7 +142,6 @@ void ChangePriorityInternal(RequestPriority priority) override; scoped_refptr<SSLSocketParams> params_; - TransportClientSocketPool* const socks_pool_; HttpProxyClientSocketPool* const http_proxy_pool_; State next_state_;
diff --git a/net/socket/ssl_connect_job_unittest.cc b/net/socket/ssl_connect_job_unittest.cc index 978978f4..1ea2b5eb 100644 --- a/net/socket/ssl_connect_job_unittest.cc +++ b/net/socket/ssl_connect_job_unittest.cc
@@ -167,8 +167,6 @@ nullptr /* network_quality_estimator */, nullptr /* net_log */, nullptr /* websocket_lock_endpoint_manager */), SSLParams(proxy_scheme), - proxy_scheme == ProxyServer::SCHEME_SOCKS5 ? &transport_socket_pool_ - : nullptr, proxy_scheme == ProxyServer::SCHEME_HTTP ? &http_proxy_socket_pool_ : nullptr, test_delegate); @@ -502,12 +500,13 @@ MockWrite writes[] = { MockWrite(io_mode, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), - MockWrite(io_mode, base::size(kSOCKS5Request), - base::size(kSOCKS5Request))}; + MockWrite(io_mode, kSOCKS5Request, base::size(kSOCKS5Request)), + }; MockRead reads[] = { MockRead(io_mode, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), - MockRead(io_mode, kSOCKS5OkResponse, kSOCKS5OkResponseLength)}; + MockRead(io_mode, kSOCKS5OkResponse, kSOCKS5OkResponseLength), + }; host_resolver_.set_synchronous_mode(io_mode == SYNCHRONOUS); StaticSocketDataProvider data(reads, writes); @@ -525,6 +524,64 @@ } } +TEST_F(SSLConnectJobTest, SOCKSHasEstablishedConnection) { + const char kSOCKS5Request[] = {0x05, 0x01, 0x00, 0x03, 0x09, 's', 'o', 'c', + 'k', 's', 'h', 'o', 's', 't', 0x01, 0xBB}; + + MockWrite writes[] = { + MockWrite(SYNCHRONOUS, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength, 0), + MockWrite(SYNCHRONOUS, kSOCKS5Request, base::size(kSOCKS5Request), 3), + }; + + MockRead reads[] = { + // Pause so can probe current state. + MockRead(ASYNC, ERR_IO_PENDING, 1), + MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength, 2), + MockRead(SYNCHRONOUS, kSOCKS5OkResponse, kSOCKS5OkResponseLength, 4), + }; + + host_resolver_.set_ondemand_mode(true); + SequencedSocketData data(reads, writes); + data.set_connect_data(MockConnect(ASYNC, OK)); + socket_factory_.AddSocketDataProvider(&data); + + // SSL negotiation hangs. Value returned after SSL negotiation is complete + // doesn't matter, as HasEstablishedConnection() may only be used between job + // start and job complete. + SSLSocketDataProvider ssl(SYNCHRONOUS, ERR_IO_PENDING); + socket_factory_.AddSSLSocketDataProvider(&ssl); + + TestConnectJobDelegate test_delegate; + std::unique_ptr<ConnectJob> ssl_connect_job = + CreateConnectJob(&test_delegate, ProxyServer::SCHEME_SOCKS5); + EXPECT_THAT(ssl_connect_job->Connect(), test::IsError(ERR_IO_PENDING)); + EXPECT_TRUE(host_resolver_.has_pending_requests()); + EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, ssl_connect_job->GetLoadState()); + EXPECT_FALSE(ssl_connect_job->HasEstablishedConnection()); + + // DNS resolution completes, and then the ConnectJob tries to connect the + // socket, which should succeed asynchronously. + host_resolver_.ResolveNow(1); + EXPECT_EQ(LOAD_STATE_CONNECTING, ssl_connect_job->GetLoadState()); + EXPECT_FALSE(ssl_connect_job->HasEstablishedConnection()); + + // Spin the message loop until the first read of the handshake. + // HasEstablishedConnection() should return true, as a TCP connection has been + // successfully established by this point. + data.RunUntilPaused(); + EXPECT_FALSE(test_delegate.has_result()); + EXPECT_EQ(LOAD_STATE_CONNECTING, ssl_connect_job->GetLoadState()); + EXPECT_TRUE(ssl_connect_job->HasEstablishedConnection()); + + // Finish up the handshake, and spin the message loop until the SSL handshake + // starts and hang. + data.Resume(); + base::RunLoop().RunUntilIdle(); + EXPECT_FALSE(test_delegate.has_result()); + EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, ssl_connect_job->GetLoadState()); + EXPECT_TRUE(ssl_connect_job->HasEstablishedConnection()); +} + TEST_F(SSLConnectJobTest, SOCKSRequestPriority) { host_resolver_.set_ondemand_mode(true); // Make resolution eventually fail, so old jobs can easily be removed from the
diff --git a/net/socket/transport_client_socket_pool.cc b/net/socket/transport_client_socket_pool.cc index 5bd2e69e..dec343d0 100644 --- a/net/socket/transport_client_socket_pool.cc +++ b/net/socket/transport_client_socket_pool.cc
@@ -38,9 +38,7 @@ RequestPriority priority, const CommonConnectJobParams& common_connect_job_params, ConnectJob::Delegate* delegate, - TransportClientSocketPool* socks_pool, HttpProxyClientSocketPool* http_proxy_pool) { - DCHECK(!socks_pool); DCHECK(!http_proxy_pool); return TransportConnectJob::CreateTransportConnectJob( std::move(transport_socket_params), priority, common_connect_job_params, @@ -52,9 +50,7 @@ RequestPriority priority, const CommonConnectJobParams& common_connect_job_params, ConnectJob::Delegate* delegate, - TransportClientSocketPool* socks_pool, HttpProxyClientSocketPool* http_proxy_pool) { - DCHECK(!socks_pool); DCHECK(!http_proxy_pool); return std::make_unique<SOCKSConnectJob>(priority, common_connect_job_params, std::move(socks_socket_params), @@ -66,11 +62,10 @@ RequestPriority priority, const CommonConnectJobParams& common_connect_job_params, ConnectJob::Delegate* delegate, - TransportClientSocketPool* socks_pool, HttpProxyClientSocketPool* http_proxy_pool) { return std::make_unique<SSLConnectJob>(priority, common_connect_job_params, std::move(ssl_socket_params), - socks_pool, http_proxy_pool, delegate); + http_proxy_pool, delegate); } } // namespace @@ -113,7 +108,6 @@ SocketPerformanceWatcherFactory* socket_performance_watcher_factory, NetworkQualityEstimator* network_quality_estimator, NetLog* net_log, - TransportClientSocketPool* socks_pool, HttpProxyClientSocketPool* http_proxy_pool) : client_socket_factory_(client_socket_factory), host_resolver_(host_resolver), @@ -121,7 +115,6 @@ socket_performance_watcher_factory_(socket_performance_watcher_factory), network_quality_estimator_(network_quality_estimator), net_log_(net_log), - socks_pool_(socks_pool), http_proxy_pool_(http_proxy_pool) {} TransportClientSocketPool::TransportConnectJobFactory:: @@ -140,7 +133,7 @@ client_socket_factory_, host_resolver_, ssl_client_socket_context_, socket_performance_watcher_factory_, network_quality_estimator_, net_log_, nullptr /* websocket_endpoint_lock_manager */), - delegate, socks_pool_, http_proxy_pool_); + delegate, http_proxy_pool_); } TransportClientSocketPool::TransportClientSocketPool( @@ -159,7 +152,6 @@ SocketPerformanceWatcherFactory* socket_performance_watcher_factory, NetworkQualityEstimator* network_quality_estimator, NetLog* net_log, - TransportClientSocketPool* socks_pool, HttpProxyClientSocketPool* http_proxy_pool) : base_(this, max_sockets, @@ -179,7 +171,6 @@ socket_performance_watcher_factory, network_quality_estimator, net_log, - socks_pool, http_proxy_pool)), client_socket_factory_(client_socket_factory), ssl_config_service_(ssl_config_service) { @@ -187,8 +178,6 @@ if (ssl_config_service_) ssl_config_service_->AddObserver(this); - if (socks_pool) - base_.AddLowerLayeredPool(socks_pool); if (http_proxy_pool) base_.AddLowerLayeredPool(http_proxy_pool); }
diff --git a/net/socket/transport_client_socket_pool.h b/net/socket/transport_client_socket_pool.h index 10d59b8..ac99b8e 100644 --- a/net/socket/transport_client_socket_pool.h +++ b/net/socket/transport_client_socket_pool.h
@@ -48,15 +48,14 @@ // |websocket_endpoint_lock_manager| is non-null, a ConnectJob for use by // WebSockets should be created. // - // |socks_pool| and |http_proxy_pool| are for the case of SSLConnectJobs that - // will be layered on top of other socket pool types. - // TODO(mmenke): Remove them. + // |http_proxy_pool| is for the case of SSLConnectJobs that will be layered + // on top of an HttpProxyClientSocketPool. + // TODO(https://crbug.com/927084): Remove the |http_proxy_pool| argument. using CreateConnectJobCallback = base::RepeatingCallback<std::unique_ptr<ConnectJob>( RequestPriority priority, const CommonConnectJobParams& common_connect_job_params, ConnectJob::Delegate* delegate, - TransportClientSocketPool* socks_pool, HttpProxyClientSocketPool* http_proxy_pool)>; // "Parameters" that own a single callback for creating a ConnectJob that can @@ -92,10 +91,11 @@ DISALLOW_COPY_AND_ASSIGN(SocketParams); }; - // If this is being used for an SSL socket pool, |socks_pool| and - // |http_proxy_pool| socket pools beneath the SSL socket pool. + // If this is being used for an SSL socket pool, the |http_proxy_pool| socket + // pool is used for HTTP proxy tunnels beneath the SSL socket pool. // - // TODO(mmenke): Remove those socket pools. + // TODO(https://crbug.com/927084): Remove the |http_proxy_pool| argument, once + // the socket pools are flat. TransportClientSocketPool( int max_sockets, int max_sockets_per_group, @@ -112,7 +112,6 @@ SocketPerformanceWatcherFactory* socket_performance_watcher_factory, NetworkQualityEstimator* network_quality_estimator, NetLog* net_log, - TransportClientSocketPool* socks_pool = nullptr, HttpProxyClientSocketPool* http_proxy_pool = nullptr); ~TransportClientSocketPool() override; @@ -184,7 +183,6 @@ SocketPerformanceWatcherFactory* socket_performance_watcher_factory, NetworkQualityEstimator* network_quality_estimator, NetLog* net_log, - TransportClientSocketPool* socks_pool = nullptr, HttpProxyClientSocketPool* http_proxy_pool = nullptr); ~TransportConnectJobFactory() override; @@ -204,7 +202,6 @@ NetworkQualityEstimator* const network_quality_estimator_; NetLog* const net_log_; - TransportClientSocketPool* const socks_pool_; HttpProxyClientSocketPool* const http_proxy_pool_; DISALLOW_COPY_AND_ASSIGN(TransportConnectJobFactory);
diff --git a/net/socket/websocket_transport_client_socket_pool.cc b/net/socket/websocket_transport_client_socket_pool.cc index e791b2f6..0fef1db 100644 --- a/net/socket/websocket_transport_client_socket_pool.cc +++ b/net/socket/websocket_transport_client_socket_pool.cc
@@ -137,6 +137,10 @@ std::make_unique<ConnectJobDelegate>(this, std::move(callback), handle, request_net_log); + // For WebSockets, only the main socket pool uses a + // WebSocketTransportClientSocketPool, so there's no need to pass in any + // nested socket pools for the proxy case, which use standard proxy socket + // pool types on top of a standard TransportClientSocketPool. std::unique_ptr<ConnectJob> connect_job = casted_params->create_connect_job_callback().Run( priority, @@ -147,7 +151,8 @@ nullptr /* SocketPerformanceWatcherFactory */, network_quality_estimator_, pool_net_log_, websocket_endpoint_lock_manager_), - connect_job_delegate.get(), nullptr, nullptr); + connect_job_delegate.get(), + nullptr /* http_proxy_client_socket_pool */); int result = connect_job_delegate->Connect(std::move(connect_job));
diff --git a/net/spdy/spdy_proxy_client_socket_unittest.cc b/net/spdy/spdy_proxy_client_socket_unittest.cc index b9ab32c..eb7b639aec 100644 --- a/net/spdy/spdy_proxy_client_socket_unittest.cc +++ b/net/spdy/spdy_proxy_client_socket_unittest.cc
@@ -115,8 +115,7 @@ nullptr /* socket_performance_watcher_factory */, nullptr /* network_quality_estimator */, session_deps->net_log, nullptr /* websocket_endpoint_lock_manager */), - ssl_params, nullptr /* socks_pool */, nullptr /* http_proxy_pool */, - &connect_job_delegate); + ssl_params, nullptr /* http_proxy_pool */, &connect_job_delegate); connect_job_delegate.StartJobExpectingResult(&connect_job, OK, false /* expect_sync_result */);
diff --git a/ppapi/proxy/ppb_var_unittest.cc b/ppapi/proxy/ppb_var_unittest.cc index 38afb60c..41f8fac 100644 --- a/ppapi/proxy/ppb_var_unittest.cc +++ b/ppapi/proxy/ppb_var_unittest.cc
@@ -36,7 +36,7 @@ ppb_var_(ppapi::PPB_Var_Shared::GetVarInterface1_2()) { // Set the value of test_strings_[i] to "i". for (size_t i = 0; i < kNumStrings; ++i) - test_strings_[i] = base::IntToString(static_cast<int>(i)); + test_strings_[i] = base::NumberToString(i); } protected: std::vector<std::string> test_strings_;
diff --git a/ppapi/proxy/url_request_info_resource.cc b/ppapi/proxy/url_request_info_resource.cc index 77d20e0..c082fa4 100644 --- a/ppapi/proxy/url_request_info_resource.cc +++ b/ppapi/proxy/url_request_info_resource.cc
@@ -70,7 +70,7 @@ if (!result) { std::string error_msg("PPB_URLRequestInfo.SetProperty: Attempted to set a " "value for PP_URLRequestProperty "); - error_msg += base::IntToString(property); + error_msg += base::NumberToString(property); error_msg += ", but either this property type is invalid or its parameter " "was inappropriate (e.g., the wrong type of PP_Var)."; Log(PP_LOGLEVEL_ERROR, error_msg);
diff --git a/ppapi/shared_impl/var.cc b/ppapi/shared_impl/var.cc index 4d9f821..f3acb34 100644 --- a/ppapi/shared_impl/var.cc +++ b/ppapi/shared_impl/var.cc
@@ -31,7 +31,7 @@ case PP_VARTYPE_BOOL: return var.value.as_bool ? "[True]" : "[False]"; case PP_VARTYPE_INT32: - return base::IntToString(var.value.as_int); + return base::NumberToString(var.value.as_int); case PP_VARTYPE_DOUBLE: return base::NumberToString(var.value.as_double); case PP_VARTYPE_STRING: {
diff --git a/services/ws/window_tree.cc b/services/ws/window_tree.cc index 4aef294..bd44461 100644 --- a/services/ws/window_tree.cc +++ b/services/ws/window_tree.cc
@@ -1253,6 +1253,21 @@ return false; } +bool WindowTree::SetWindowTransformImpl(const ClientWindowId& window_id, + const gfx::Transform& transform) { + DVLOG(3) << "SetWindowTransform window_id=" << window_id; + aura::Window* window = GetWindowByClientId(window_id); + // This doesn't allow setting the transform on top-levels as that may conflict + // with top-level animations done by the window-manager. Additionally the + // window-manager is really the one that should be animating top-levels. + if (!window || !IsClientCreatedWindow(window) || IsTopLevel(window)) { + DVLOG(1) << "SetWindowTransform failed (invalid window)"; + return false; + } + window->SetTransform(transform); + return true; +} + bool WindowTree::ReorderWindowImpl(const ClientWindowId& window_id, const ClientWindowId& relative_window_id, mojom::OrderDirection direction) { @@ -1600,12 +1615,11 @@ } void WindowTree::SetWindowTransform(uint32_t change_id, - Id window_id, + Id transport_window_id, const gfx::Transform& transform) { - // NOTE: Tests may time out if they trigger this NOTIMPLEMENTED because - // the change is not ack'd. The code under test may need to change to - // avoid triggering window transforms outside the window manager. - NOTIMPLEMENTED_LOG_ONCE(); + window_tree_client_->OnChangeCompleted( + change_id, SetWindowTransformImpl(MakeClientWindowId(transport_window_id), + transform)); } void WindowTree::SetClientArea(
diff --git a/services/ws/window_tree.h b/services/ws/window_tree.h index 2c23fa3..f385a4b 100644 --- a/services/ws/window_tree.h +++ b/services/ws/window_tree.h
@@ -344,6 +344,8 @@ const gfx::Rect& bounds, const base::Optional<viz::LocalSurfaceIdAllocation>& local_surface_id_allocation); + bool SetWindowTransformImpl(const ClientWindowId& window_id, + const gfx::Transform& transform); bool ReorderWindowImpl(const ClientWindowId& window_id, const ClientWindowId& relative_window_id, mojom::OrderDirection direction); @@ -396,7 +398,7 @@ local_surface_id_allocation) override; void AllocateLocalSurfaceId(Id transport_window_id) override; void SetWindowTransform(uint32_t change_id, - Id window_id, + Id transport_window_id, const gfx::Transform& transform) override; void SetClientArea(Id transport_window_id, const gfx::Insets& insets,
diff --git a/services/ws/window_tree_test_helper.cc b/services/ws/window_tree_test_helper.cc index b6eb1860..4223b78c 100644 --- a/services/ws/window_tree_test_helper.cc +++ b/services/ws/window_tree_test_helper.cc
@@ -71,6 +71,12 @@ direction); } +bool WindowTreeTestHelper::SetTransform(aura::Window* window, + const gfx::Transform& transform) { + return window_tree_->SetWindowTransformImpl(ClientWindowIdForWindow(window), + transform); +} + bool WindowTreeTestHelper::SetWindowBounds( aura::Window* window, const gfx::Rect& bounds,
diff --git a/services/ws/window_tree_test_helper.h b/services/ws/window_tree_test_helper.h index dbb33f8..c786e4c9 100644 --- a/services/ws/window_tree_test_helper.h +++ b/services/ws/window_tree_test_helper.h
@@ -23,6 +23,7 @@ namespace gfx { class Insets; +class Transform; } namespace ui { @@ -65,6 +66,7 @@ bool ReorderWindow(aura::Window* window, aura::Window* relative_window, mojom::OrderDirection direction); + bool SetTransform(aura::Window* window, const gfx::Transform& transform); bool SetWindowBounds(aura::Window* window, const gfx::Rect& bounds, const base::Optional<viz::LocalSurfaceIdAllocation>&
diff --git a/services/ws/window_tree_unittest.cc b/services/ws/window_tree_unittest.cc index e098047..586de423 100644 --- a/services/ws/window_tree_unittest.cc +++ b/services/ws/window_tree_unittest.cc
@@ -40,6 +40,7 @@ #include "ui/base/hit_test.h" #include "ui/events/mojo/event_constants.mojom.h" #include "ui/events/test/event_generator.h" +#include "ui/gfx/transform.h" #include "ui/wm/core/capture_controller.h" #include "ui/wm/core/default_screen_position_client.h" #include "ui/wm/core/focus_controller.h" @@ -2535,5 +2536,22 @@ EXPECT_TRUE(setup.changes()->empty()); } +TEST(WindowTreeTest, SetWindowTransform) { + WindowServiceTestSetup setup; + aura::Window* top_level = + setup.window_tree_test_helper()->NewTopLevelWindow(); + setup.changes()->clear(); + gfx::Transform scaled; + scaled.Scale(2, 2); + EXPECT_FALSE( + setup.window_tree_test_helper()->SetTransform(top_level, scaled)); + EXPECT_EQ(gfx::Transform(), top_level->transform()); + + aura::Window* child_window = setup.window_tree_test_helper()->NewWindow(); + EXPECT_TRUE( + setup.window_tree_test_helper()->SetTransform(child_window, scaled)); + EXPECT_EQ(scaled, child_window->transform()); +} + } // namespace } // namespace ws
diff --git a/sql/database_unittest.cc b/sql/database_unittest.cc index 38cd6c01..da91ab2 100644 --- a/sql/database_unittest.cc +++ b/sql/database_unittest.cc
@@ -522,7 +522,7 @@ static const char kInsertSql2[] = "INSERT INTO x VALUES ('That was a test')"; const base::FilePath db_path = db_prefix.InsertBeforeExtensionASCII( - base::IntToString(initial_page_size)); + base::NumberToString(initial_page_size)); sql::Database::Delete(db_path); sql::Database db; db.set_page_size(initial_page_size); @@ -1590,7 +1590,7 @@ ASSERT_GT(db().GetAppropriateMmapSize(), kMmapAlot); ASSERT_FALSE(db().DoesTableExist("meta")); ASSERT_TRUE(db().DoesViewExist("MmapStatus")); - EXPECT_EQ(base::IntToString(MetaTable::kMmapSuccess), + EXPECT_EQ(base::NumberToString(MetaTable::kMmapSuccess), ExecuteWithResult(&db(), "SELECT * FROM MmapStatus")); // Also maps everything when kMmapSuccess is already in the view. @@ -1600,14 +1600,14 @@ ASSERT_TRUE(db().Execute("DROP VIEW MmapStatus")); ASSERT_TRUE(db().Execute("CREATE VIEW MmapStatus (value) AS SELECT 1")); ASSERT_GT(db().GetAppropriateMmapSize(), kMmapAlot); - EXPECT_EQ(base::IntToString(MetaTable::kMmapSuccess), + EXPECT_EQ(base::NumberToString(MetaTable::kMmapSuccess), ExecuteWithResult(&db(), "SELECT * FROM MmapStatus")); // Failure status leads to nothing being mapped. ASSERT_TRUE(db().Execute("DROP VIEW MmapStatus")); ASSERT_TRUE(db().Execute("CREATE VIEW MmapStatus (value) AS SELECT -2")); ASSERT_EQ(0UL, db().GetAppropriateMmapSize()); - EXPECT_EQ(base::IntToString(MetaTable::kMmapFailure), + EXPECT_EQ(base::NumberToString(MetaTable::kMmapFailure), ExecuteWithResult(&db(), "SELECT * FROM MmapStatus")); }
diff --git a/sql/recovery_unittest.cc b/sql/recovery_unittest.cc index 7e65bf7b..17b8e8a 100644 --- a/sql/recovery_unittest.cc +++ b/sql/recovery_unittest.cc
@@ -941,7 +941,7 @@ static const char kSelectSql[] = "SELECT * FROM x ORDER BY t"; const base::FilePath db_path = db_prefix.InsertBeforeExtensionASCII( - base::IntToString(initial_page_size)); + base::NumberToString(initial_page_size)); sql::Database::Delete(db_path); sql::Database db; db.set_page_size(initial_page_size);
diff --git a/storage/browser/blob/blob_url_request_job.cc b/storage/browser/blob/blob_url_request_job.cc index 3a73bc7..88bd83f 100644 --- a/storage/browser/blob/blob_url_request_job.cc +++ b/storage/browser/blob/blob_url_request_job.cc
@@ -142,7 +142,7 @@ uint64_t total_size, uint64_t content_size) { std::string status("HTTP/1.1 "); - status.append(base::IntToString(status_code)); + status.append(base::NumberToString(status_code)); status.append(" "); status.append(net::GetHttpReasonPhrase(status_code)); status.append("\0\0", 2);
diff --git a/storage/browser/blob/view_blob_internals_job.cc b/storage/browser/blob/view_blob_internals_job.cc index dd5c6715..34e9f8a4 100644 --- a/storage/browser/blob/view_blob_internals_job.cc +++ b/storage/browser/blob/view_blob_internals_job.cc
@@ -229,7 +229,7 @@ std::string* out) { StartHTMLList(out); - AddHTMLListItem(kRefcount, base::IntToString(refcount), out); + AddHTMLListItem(kRefcount, base::NumberToString(refcount), out); AddHTMLListItem(kStatus, StatusToString(blob_data.status()), out); if (!content_type.empty()) AddHTMLListItem(kContentType, content_type, out);
diff --git a/storage/browser/database/database_tracker.cc b/storage/browser/database/database_tracker.cc index a7ef758..18f8b0a1 100644 --- a/storage/browser/database/database_tracker.cc +++ b/storage/browser/database/database_tracker.cc
@@ -280,7 +280,7 @@ origin_directory = it->second; } else { origin_directory = - base::IntToString16(incognito_origin_directories_generator_++); + base::NumberToString16(incognito_origin_directories_generator_++); incognito_origin_directories_[origin_identifier] = origin_directory; } } @@ -302,7 +302,7 @@ return base::FilePath(); return GetOriginDirectory(origin_identifier) - .AppendASCII(base::Int64ToString(id)); + .AppendASCII(base::NumberToString(id)); } bool DatabaseTracker::GetOriginInfo(const std::string& origin_identifier,
diff --git a/storage/browser/fileapi/sandbox_directory_database.cc b/storage/browser/fileapi/sandbox_directory_database.cc index afb74cc..797934d 100644 --- a/storage/browser/fileapi/sandbox_directory_database.cc +++ b/storage/browser/fileapi/sandbox_directory_database.cc
@@ -104,14 +104,14 @@ const base::FilePath::StringType& child_name) { std::string name; name = storage::FilePathToString(base::FilePath(child_name)); - return std::string(kChildLookupPrefix) + base::Int64ToString(parent_id) + - std::string(kChildLookupSeparator) + name; + return std::string(kChildLookupPrefix) + base::NumberToString(parent_id) + + std::string(kChildLookupSeparator) + name; } std::string GetChildListingKeyPrefix( storage::SandboxDirectoryDatabase::FileId parent_id) { - return std::string(kChildLookupPrefix) + base::Int64ToString(parent_id) + - std::string(kChildLookupSeparator); + return std::string(kChildLookupPrefix) + base::NumberToString(parent_id) + + std::string(kChildLookupSeparator); } const char* LastFileIdKey() { @@ -124,7 +124,7 @@ std::string GetFileLookupKey( storage::SandboxDirectoryDatabase::FileId file_id) { - return base::Int64ToString(file_id); + return base::NumberToString(file_id); } // Assumptions: @@ -561,7 +561,7 @@ if (!AddFileInfoHelper(info, temp_id, &batch)) return base::File::FILE_ERROR_FAILED; - batch.Put(LastFileIdKey(), base::Int64ToString(temp_id)); + batch.Put(LastFileIdKey(), base::NumberToString(temp_id)); status = db_->Write(leveldb::WriteOptions(), &batch); if (!status.ok()) { HandleError(FROM_HERE, status); @@ -685,7 +685,7 @@ } ++temp; status = db_->Put(leveldb::WriteOptions(), LastIntegerKey(), - base::Int64ToString(temp)); + base::NumberToString(temp)); if (!status.ok()) { HandleError(FROM_HERE, status); return false; @@ -861,8 +861,8 @@ leveldb::WriteBatch batch; if (!AddFileInfoHelper(root, 0, &batch)) return false; - batch.Put(LastFileIdKey(), base::Int64ToString(0)); - batch.Put(LastIntegerKey(), base::Int64ToString(-1)); + batch.Put(LastFileIdKey(), base::NumberToString(0)); + batch.Put(LastIntegerKey(), base::NumberToString(-1)); leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); if (!status.ok()) { HandleError(FROM_HERE, status);
diff --git a/storage/browser/fileapi/sandbox_directory_database_unittest.cc b/storage/browser/fileapi/sandbox_directory_database_unittest.cc index dfaf01ed..110eabd6 100644 --- a/storage/browser/fileapi/sandbox_directory_database_unittest.cc +++ b/storage/browser/fileapi/sandbox_directory_database_unittest.cc
@@ -119,21 +119,24 @@ void MakeHierarchyLink(FileId parent_id, FileId child_id, const base::FilePath::StringType& name) { - ASSERT_TRUE(db()->db_->Put( - leveldb::WriteOptions(), - "CHILD_OF:" + base::Int64ToString(parent_id) + ":" + - FilePathToString(base::FilePath(name)), - base::Int64ToString(child_id)).ok()); + ASSERT_TRUE(db()->db_ + ->Put(leveldb::WriteOptions(), + "CHILD_OF:" + base::NumberToString(parent_id) + ":" + + FilePathToString(base::FilePath(name)), + base::NumberToString(child_id)) + .ok()); } // Deletes link from parent of |file_id| to |file_id|. void DeleteHierarchyLink(FileId file_id) { FileInfo file_info; ASSERT_TRUE(db()->GetFileInfo(file_id, &file_info)); - ASSERT_TRUE(db()->db_->Delete( - leveldb::WriteOptions(), - "CHILD_OF:" + base::Int64ToString(file_info.parent_id) + ":" + - FilePathToString(base::FilePath(file_info.name))).ok()); + ASSERT_TRUE( + db()->db_ + ->Delete(leveldb::WriteOptions(), + "CHILD_OF:" + base::NumberToString(file_info.parent_id) + + ":" + FilePathToString(base::FilePath(file_info.name))) + .ok()); } protected:
diff --git a/storage/browser/quota/quota_manager.cc b/storage/browser/quota/quota_manager.cc index c458eb4..980cd30 100644 --- a/storage/browser/quota/quota_manager.cc +++ b/storage/browser/quota/quota_manager.cc
@@ -1131,7 +1131,7 @@ temporary_storage_evictor_->GetStatistics(&stats); for (const auto& origin_usage_pair : stats) { statistics[origin_usage_pair.first] = - base::Int64ToString(origin_usage_pair.second); + base::NumberToString(origin_usage_pair.second); } } return statistics;
diff --git a/storage/common/database/database_identifier.cc b/storage/common/database/database_identifier.cc index 0625135f..26de8fe 100644 --- a/storage/common/database/database_identifier.cc +++ b/storage/common/database/database_identifier.cc
@@ -189,7 +189,7 @@ if (is_unique_) return "__0"; return scheme_ + "_" + EscapeIPv6Hostname(hostname_) + "_" + - base::IntToString(port_); + base::NumberToString(port_); } GURL DatabaseIdentifier::ToOrigin() const { @@ -199,7 +199,7 @@ return GURL(); if (port_ == 0) return GURL(scheme_ + "://" + hostname_); - return GURL(scheme_ + "://" + hostname_ + ":" + base::IntToString(port_)); + return GURL(scheme_ + "://" + hostname_ + ":" + base::NumberToString(port_)); } } // namespace storage
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json index f1aa588bd..b42de65b 100644 --- a/testing/buildbot/chromium.clang.json +++ b/testing/buildbot/chromium.clang.json
@@ -327,6 +327,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -1209,6 +1219,21 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Windows-10-15063" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2385,6 +2410,21 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Windows-10-15063" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -3549,6 +3589,21 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Windows-10-15063" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -9691,6 +9746,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -10409,6 +10474,17 @@ }, { "args": [ + "--enable-features=NetworkService", + "--test-launcher-print-test-stdio=always" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { + "args": [ "--test-launcher-print-test-stdio=always" ], "swarming": { @@ -11135,6 +11211,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -11720,6 +11806,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -12291,6 +12387,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -12873,6 +12979,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -13467,6 +13583,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -14050,6 +14176,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -14786,6 +14922,17 @@ }, { "args": [ + "--enable-features=NetworkService", + "--test-launcher-print-test-stdio=always" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { + "args": [ "--test-launcher-print-test-stdio=always" ], "swarming": { @@ -15468,6 +15615,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -16140,6 +16297,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -16812,6 +16979,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -17484,6 +17661,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -18156,6 +18343,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -18828,6 +19025,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -19500,6 +19707,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -20172,6 +20389,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -20844,6 +21071,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -21516,6 +21753,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -22152,6 +22399,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -23011,6 +23268,21 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Windows-10" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index b2712d5..abf8211 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -639,6 +639,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -2893,6 +2903,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": false + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": false }, @@ -6322,6 +6342,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -7116,6 +7146,17 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "isolate_coverage_data": true, + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "isolate_coverage_data": true, "swarming": { "can_use_on_swarming_builders": true @@ -10489,6 +10530,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -10943,6 +10994,10 @@ "script": "checkperms.py" }, { + "name": "headless_python_unittests", + "script": "headless_python_unittests.py" + }, + { "name": "webkit_lint", "script": "webkit_lint.py" } @@ -11756,6 +11811,23 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0a2e", + "os": "Mac-10.14" + } + ], + "expiration": 21600 + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json index 72d3422..a37f609 100644 --- a/testing/buildbot/chromium.linux.json +++ b/testing/buildbot/chromium.linux.json
@@ -1342,6 +1342,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -1801,6 +1811,10 @@ "script": "checkperms.py" }, { + "name": "headless_python_unittests", + "script": "headless_python_unittests.py" + }, + { "name": "webkit_lint", "script": "webkit_lint.py" } @@ -2114,6 +2128,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -2826,6 +2850,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -3755,6 +3789,21 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -4499,6 +4548,10 @@ "script": "checkperms.py" }, { + "name": "headless_python_unittests", + "script": "headless_python_unittests.py" + }, + { "name": "webkit_lint", "script": "webkit_lint.py" }
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json index b5c62a65..ff06c3d4 100644 --- a/testing/buildbot/chromium.mac.json +++ b/testing/buildbot/chromium.mac.json
@@ -503,6 +503,22 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "none", + "os": "Mac-10.10" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1649,6 +1665,22 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "none", + "os": "Mac-10.11" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2861,6 +2893,22 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0a2e", + "os": "Mac-10.12.6" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -4024,6 +4072,22 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "none", + "os": "Mac-10.13" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -5163,6 +5227,22 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "none", + "os": "Mac-10.13" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index 8654341..5fd0bca 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -3050,6 +3050,17 @@ }, { "args": [ + "--enable-features=NetworkService", + "--test-launcher-print-test-stdio=always" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { + "args": [ "--test-launcher-print-test-stdio=always" ], "swarming": { @@ -3840,6 +3851,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -7361,6 +7382,23 @@ }, { "args": [ + "--enable-features=NetworkService", + "--test-launcher-print-test-stdio=always" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-14.04" + } + ] + }, + "test": "headless_browsertests" + }, + { + "args": [ "--test-launcher-print-test-stdio=always" ], "swarming": { @@ -8431,6 +8469,17 @@ }, { "args": [ + "--enable-features=NetworkService", + "--test-launcher-print-test-stdio=always" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { + "args": [ "--test-launcher-print-test-stdio=always" ], "swarming": { @@ -9185,6 +9234,17 @@ }, { "args": [ + "--enable-features=NetworkService", + "--test-launcher-print-test-stdio=always" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { + "args": [ "--test-launcher-print-test-stdio=always" ], "swarming": { @@ -10221,6 +10281,21 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Windows-10-15063" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json index 594b693..9d53656 100644 --- a/testing/buildbot/chromium.win.json +++ b/testing/buildbot/chromium.win.json
@@ -372,6 +372,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -1483,6 +1493,22 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-15063" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2672,6 +2698,22 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-15063" + } + ] + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -3797,6 +3839,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true }, @@ -4597,6 +4649,16 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "swarming": { "can_use_on_swarming_builders": true },
diff --git a/testing/buildbot/filters/webui_polymer2_browser_tests.filter b/testing/buildbot/filters/webui_polymer2_browser_tests.filter index a8aa4a3..cbc0befd 100644 --- a/testing/buildbot/filters/webui_polymer2_browser_tests.filter +++ b/testing/buildbot/filters/webui_polymer2_browser_tests.filter
@@ -71,6 +71,7 @@ CrElementsDialogTest.* CrElementsDrawerTest.* CrElementsFingerprintProgressArcTest.* +CrElementsIconButtonTest.* CrElementsInputTest.* CrElementsLazyRenderTest.* CrElementsPolicyIndicatorBehaviorTest.*
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 888e6b5..e5def3d 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -2419,6 +2419,9 @@ 'check_static_initializers': { 'script': 'check_static_initializers.py', }, + 'headless_python_unittests': { + 'script': 'headless_python_unittests.py', + }, 'webkit_lint': { 'script': 'webkit_lint.py', }, @@ -4018,6 +4021,12 @@ 'cronet_tests': {}, 'cronet_unittests': {}, 'headless_browsertests': {}, + 'network_service_headless_browsertests': { + 'args': [ + '--enable-features=NetworkService', + ], + 'test': 'headless_browsertests', + }, 'headless_unittests': {}, },
diff --git a/testing/buildbot/tryserver.chromium.linux.json b/testing/buildbot/tryserver.chromium.linux.json index e2a0d2f9..36ce76c6 100644 --- a/testing/buildbot/tryserver.chromium.linux.json +++ b/testing/buildbot/tryserver.chromium.linux.json
@@ -354,6 +354,17 @@ "test": "headless_browsertests" }, { + "args": [ + "--enable-features=NetworkService" + ], + "isolate_coverage_data": true, + "name": "network_service_headless_browsertests", + "swarming": { + "can_use_on_swarming_builders": true + }, + "test": "headless_browsertests" + }, + { "isolate_coverage_data": true, "swarming": { "can_use_on_swarming_builders": true
diff --git a/testing/perf/perf_test.cc b/testing/perf/perf_test.cc index 737caa97..0b0b666db 100644 --- a/testing/perf/perf_test.cc +++ b/testing/perf/perf_test.cc
@@ -53,14 +53,8 @@ size_t value, const std::string& units, bool important) { - PrintResultsImpl(measurement, - modifier, - trace, - base::UintToString(static_cast<unsigned int>(value)), - std::string(), - std::string(), - units, - important); + PrintResultsImpl(measurement, modifier, trace, base::NumberToString(value), + std::string(), std::string(), units, important); } void PrintResult(const std::string& measurement, @@ -80,15 +74,9 @@ size_t value, const std::string& units, bool important) { - output += ResultsToString( - measurement, - modifier, - trace, - base::UintToString(static_cast<unsigned int>(value)), - std::string(), - std::string(), - units, - important); + output += + ResultsToString(measurement, modifier, trace, base::NumberToString(value), + std::string(), std::string(), units, important); } void PrintResult(const std::string& measurement,
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 680fde6a..8dd5c01 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -4612,6 +4612,26 @@ ] } ], + "SyncUssBookmarks'": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SyncUSSBookmarks" + ] + } + ] + } + ], "TabRanker": [ { "platforms": [
diff --git a/third_party/blink/perf_tests/paint/contain-update-layer-tree.html b/third_party/blink/perf_tests/paint/contain-update-layer-tree.html new file mode 100644 index 0000000..d9fd614 --- /dev/null +++ b/third_party/blink/perf_tests/paint/contain-update-layer-tree.html
@@ -0,0 +1,72 @@ +<!DOCTYPE html> +<title>Contain update layer tree performance</title> +<style> +#wrapper { + position: relative; +} +.cell { + position: absolute; + box-sizing: border-box; + border: solid; + contain: strict; +} +.progressbar { + position: absolute; + left: 0px; + top: 5px; + height: 10px; +} +</style> +<script src="../resources/runner.js"></script> +<script src="resources/paint.js"></script> +<pre id="log"></pre> +<div id="wrapper"></div> +<script> + const CELL_WIDTH = "50"; + const CELL_HEIGHT = "25"; + const NUM_ROWS = 200; + const NUM_COLUMNS = 200; + const DOM_DEPTH = 10; + + function createContent(depth) { + let content = document.createElement("div"); + content.appendChild(document.createElement("h1")); + content.appendChild(document.createElement("paragraph")); + if (depth > 0) + content.appendChild(createContent(depth - 1)); + return content; + } + + function setupTest() { + let wrapper = document.getElementById("wrapper"); + for (let i = 0; i < NUM_ROWS; i++) { + for (let j = 0; j < NUM_COLUMNS; j++) { + let cell = document.createElement("div"); + if (i == 0 && j == 0) + cell.id = "target"; + cell.classList.add("cell"); + cell.style.width = CELL_WIDTH + "px"; + cell.style.height = CELL_HEIGHT + "px"; + cell.style.left = (j * CELL_WIDTH) + "px"; + cell.style.top = (i * CELL_HEIGHT) + "px"; + cell.style.overflow = "visible"; + + cell.appendChild(createContent(DOM_DEPTH)); + + wrapper.appendChild(cell); + } + } + } + + function runTest() { + let cell = document.getElementById("target"); + // This causes a call to PaintLayer::SetNeedsCompositingInputsUpdate(). + cell.style.overflow = cell.style.overflow == "hidden" ? "visible" : "hidden"; + } + + setupTest(); + + measurePaint({ + run: runTest + }); +</script>
diff --git a/third_party/blink/public/mojom/BUILD.gn b/third_party/blink/public/mojom/BUILD.gn index fc29734..d588cf8 100644 --- a/third_party/blink/public/mojom/BUILD.gn +++ b/third_party/blink/public/mojom/BUILD.gn
@@ -59,7 +59,6 @@ "notifications/notification.mojom", "page/display_cutout.mojom", "payments/payment_app.mojom", - "picture_in_picture/picture_in_picture.mojom", "plugins/plugin_registry.mojom", "presentation/presentation.mojom", "quota/quota_dispatcher_host.mojom", @@ -111,7 +110,6 @@ "//services/device/public/mojom", "//services/network/public/mojom", "//services/service_manager/public/mojom", - "//services/viz/public/interfaces", "//skia/public/interfaces", "//third_party/blink/public:web_feature_mojo_bindings", "//third_party/blink/public/mojom/usb", @@ -201,7 +199,7 @@ "service_worker/service_worker_registration.mojom", # Depends on controller_service_worker.mojom. - "worker/dedicated_worker_factory.mojom", + "worker/dedicated_worker_host_factory.mojom", "worker/shared_worker_factory.mojom", ]
diff --git a/third_party/blink/public/mojom/picture_in_picture/OWNERS b/third_party/blink/public/mojom/picture_in_picture/OWNERS deleted file mode 100644 index 08850f4..0000000 --- a/third_party/blink/public/mojom/picture_in_picture/OWNERS +++ /dev/null
@@ -1,2 +0,0 @@ -per-file *.mojom=set noparent -per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom b/third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom deleted file mode 100644 index 9146179e..0000000 --- a/third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom +++ /dev/null
@@ -1,58 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -module blink.mojom; - -import "services/viz/public/interfaces/compositing/surface_id.mojom"; -import "ui/gfx/geometry/mojo/geometry.mojom"; - -// PictureInPictureDelegate is associated to a PictureInPictureService. It will -// be notified by running its callbacks when a change happened to the running -// Picture-in-Picture session. -interface PictureInPictureDelegate { - PictureInPictureWindowSizeChanged(gfx.mojom.Size size); -}; - -// PictureInPictureService is a Document-associated interface that lives in -// the browser process. It is responsible for implementing the browser-side -// support for https://wicg.github.io/picture-in-picture and manages all -// picture-in-picture interactions for Document. Picture-in-picture allows -// a Document to display a video in an always-on-top floating window with -// basic playback functionality (e.g. play and pause). -interface PictureInPictureService { - // Notify the service that it should start a Picture-in-Picture session. - // player_id: WebMediaPlayer id used to control playback via the - // Picture-in-Picture window. - // surface_id: SurfaceId to be shown in the Picture-in-Picture window. - // natural_size: Size of the video frames. - // show_play_pause_button: Whether a play/pause control should be offered in - // the Picture-in-Picture window. - // NOTE: this method shouldn't be called twice in a raw. An interleaved call - // to EndSession() would be expected. In case of some parameters have changed, - // UpdateSession() should be called. - StartSession( - uint32 player_id, - viz.mojom.SurfaceId? surface_id, - gfx.mojom.Size natural_size, - bool show_play_pause_button) => (gfx.mojom.Size size); - - // Notify the service to end the Picture-in-Picture session. It will close - // the Picture-in-Picture window. - EndSession() => (); - - // Notify the service that some information about the client have change. All - // information associated with the Picture-in-Picture session are sent again. - // A Picture-in-Picture session must already be active from a previous call to - // StartSession(). - UpdateSession( - uint32 player_id, - viz.mojom.SurfaceId? surface_id, - gfx.mojom.Size natural_size, - bool show_play_pause_button); - - // Associate a PictureInPictureDelegate with the service. All changes in - // Picture-in-Picture states will be sent to the delegate. Only one delegate - // can be set at a time. - SetDelegate(PictureInPictureDelegate delegate); -};
diff --git a/third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom b/third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom similarity index 89% rename from third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom rename to third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom index b944541..948943d 100644 --- a/third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom +++ b/third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom
@@ -20,8 +20,8 @@ // PlzDedicatedWorker: // An interface implemented by clients (e.g., the renderer where "new Worker()" -// was invoked) to observe events on the DedicatedWorkerFactory. -interface DedicatedWorkerFactoryClient { +// was invoked) to observe events on the DedicatedWorkerHostFactory. +interface DedicatedWorkerHostFactoryClient { // Called when the worker host is created. OnWorkerHostCreated( // Used for accessing services from the worker. @@ -52,9 +52,9 @@ OnScriptLoadFailed(); }; -// An interface used to instantiate a dedicated worker. The implementation of -// this interface lives in the browser process. -interface DedicatedWorkerFactory { +// An interface used to instantiate a dedicated worker host. The implementation +// of this interface lives in the browser process. +interface DedicatedWorkerHostFactory { // Non-PlzDedicatedWorker: // The factory client should call this instead of CreateAndStartLoad() when // PlzDedicatedWorker is disabled. @@ -62,7 +62,7 @@ // Informs the browser that the renderer has created a new dedicated worker, // requesting |worker_interface_provider| to provide the worker access to mojo // interfaces. |origin| must either be unique or match the origin of the - // creating document. + // creating context (Document or DedicatedWorkerGlobalScope). CreateDedicatedWorker( url.mojom.Origin origin, service_manager.mojom.InterfaceProvider& worker_interface_provider); @@ -78,5 +78,5 @@ CreateAndStartLoad(url.mojom.Url script_url, url.mojom.Origin origin, blink.mojom.BlobURLToken? blob_url_token, - DedicatedWorkerFactoryClient client); + DedicatedWorkerHostFactoryClient client); };
diff --git a/third_party/blink/public/platform/web_media_player.h b/third_party/blink/public/platform/web_media_player.h index 55115e8..edfea4c 100644 --- a/third_party/blink/public/platform/web_media_player.h +++ b/third_party/blink/public/platform/web_media_player.h
@@ -31,9 +31,7 @@ #ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_MEDIA_PLAYER_H_ #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_MEDIA_PLAYER_H_ -#include "base/optional.h" #include "base/time/time.h" -#include "components/viz/common/surfaces/surface_id.h" #include "third_party/blink/public/platform/web_callbacks.h" #include "third_party/blink/public/platform/web_content_decryption_module.h" #include "third_party/blink/public/platform/web_media_source.h" @@ -139,6 +137,14 @@ kAlways, }; + // Callback to get notified when the Picture-in-Picture window is opened. + using PipWindowOpenedCallback = base::OnceCallback<void(const WebSize&)>; + // Callback to get notified when Picture-in-Picture window is closed. + using PipWindowClosedCallback = base::OnceClosure; + // Callback to get notified when the Picture-in-Picture window is resized. + using PipWindowResizedCallback = + base::RepeatingCallback<void(const WebSize&)>; + virtual ~WebMediaPlayer() = default; virtual LoadTiming Load(LoadType, const WebMediaPlayerSource&, CorsMode) = 0; @@ -152,13 +158,16 @@ // Enter Picture-in-Picture and notifies Blink with window size // when video successfully enters Picture-in-Picture. - // TODO(mlamouri): rename to "OnRequestPictureInPicture". - virtual void EnterPictureInPicture() = 0; + virtual void EnterPictureInPicture(PipWindowOpenedCallback) = 0; // Exit Picture-in-Picture and notifies Blink when it's done. - virtual void ExitPictureInPicture() = 0; + virtual void ExitPictureInPicture(PipWindowClosedCallback) = 0; // Assign custom controls to the Picture-in-Picture window. virtual void SetPictureInPictureCustomControls( const std::vector<PictureInPictureControlInfo>&) = 0; + // Register a callback that will be run when the Picture-in-Picture window + // is resized. + virtual void RegisterPictureInPictureWindowResizeCallback( + PipWindowResizedCallback) = 0; virtual void RequestRemotePlayback() {} virtual void RequestRemotePlaybackControl() {} @@ -402,18 +411,6 @@ virtual void OnBecameVisible() {} virtual bool IsOpaque() const { return false; } - - // Returns the id given by the WebMediaPlayerDelegate. This is used by the - // Blink code to pass a player id to mojo services. - // TODO(mlamouri): remove this and move the id handling to Blink. - virtual int GetDelegateId() { return -1; }; - - // Returns the SurfaceId the video element is currently using. - // Returns base::nullopt if the element isn't a video or doesn't have a - // SurfaceId associated to it. - virtual base::Optional<viz::SurfaceId> GetSurfaceId() { - return base::nullopt; - } }; } // namespace blink
diff --git a/third_party/blink/public/platform/web_media_player_client.h b/third_party/blink/public/platform/web_media_player_client.h index b8ae775..092556d 100644 --- a/third_party/blink/public/platform/web_media_player_client.h +++ b/third_party/blink/public/platform/web_media_player_client.h
@@ -179,15 +179,6 @@ // Request the player to pause playback. virtual void RequestPause() = 0; - // Notify the client that one of the state used by Picture-in-Picture has - // changed. The client will then have to poll the states from the associated - // WebMediaPlayer. - // The states are: - // - Delegate ID; - // - Surface ID; - // - Natural Size. - virtual void OnPictureInPictureStateChange() = 0; - protected: ~WebMediaPlayerClient() = default; };
diff --git a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc index fe53aa48..4e0c584 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_streamer.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_streamer.cc
@@ -21,9 +21,9 @@ #include "third_party/blink/renderer/platform/loader/fetch/cached_metadata.h" #include "third_party/blink/renderer/platform/loader/fetch/resource.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" -#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h" +#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h" #include "third_party/blink/renderer/platform/shared_buffer.h" #include "third_party/blink/renderer/platform/wtf/deque.h" #include "third_party/blink/renderer/platform/wtf/text/text_encoding_registry.h" @@ -445,7 +445,7 @@ // cancel the task. // // TODO(leszeks): Decrease the priority of these tasks where possible. - background_scheduler::PostOnBackgroundThreadWithTraits( + worker_pool::PostTaskWithTraits( FROM_HERE, {base::TaskPriority::USER_BLOCKING, base::MayBlock()}, CrossThreadBind(RunBlockingScriptStreamingTask, WTF::Passed(std::move(script_streaming_task)), @@ -498,7 +498,7 @@ // The task creation shouldn't fail, since it didn't fail before during // NotifyAppendData. CHECK(script_streaming_task); - background_scheduler::PostOnBackgroundThreadWithTraits( + worker_pool::PostTaskWithTraits( FROM_HERE, {base::TaskPriority::USER_BLOCKING}, CrossThreadBind(RunNonBlockingScriptStreamingTask, WTF::Passed(std::move(script_streaming_task)),
diff --git a/third_party/blink/renderer/core/dom/events/event_dispatcher.cc b/third_party/blink/renderer/core/dom/events/event_dispatcher.cc index 335c457..e217aa9 100644 --- a/third_party/blink/renderer/core/dom/events/event_dispatcher.cc +++ b/third_party/blink/renderer/core/dom/events/event_dispatcher.cc
@@ -140,15 +140,14 @@ return DispatchEventResult::kNotCanceled; } std::unique_ptr<EventTiming> eventTiming; - const Document& document = node_->GetDocument(); - LocalFrame* frame = document.GetFrame(); - if (frame && frame->DomWindow()) { - if (origin_trials::EventTimingEnabled(&document)) { - UseCounter::Count(document, + if (origin_trials::EventTimingEnabled(&node_->GetDocument())) { + LocalFrame* frame = node_->GetDocument().GetFrame(); + if (frame && frame->DomWindow()) { + UseCounter::Count(node_->GetDocument(), WebFeature::kPerformanceEventTimingConstructor); + eventTiming = std::make_unique<EventTiming>(frame->DomWindow()); + eventTiming->WillDispatchEvent(*event_); } - eventTiming = std::make_unique<EventTiming>(frame->DomWindow()); - eventTiming->WillDispatchEvent(*event_); } event_->GetEventPath().EnsureWindowEventContext(); @@ -156,6 +155,8 @@ event_->IsMouseEvent() && event_->type() == event_type_names::kClick; if (is_click && event_->isTrusted()) { + Document& document = node_->GetDocument(); + LocalFrame* frame = document.GetFrame(); if (frame) { // A genuine mouse click cannot be triggered by script so we don't expect // there are any script in the stack.
diff --git a/third_party/blink/renderer/core/frame/picture_in_picture_controller.h b/third_party/blink/renderer/core/frame/picture_in_picture_controller.h index 87d82d73..98b35b80 100644 --- a/third_party/blink/renderer/core/frame/picture_in_picture_controller.h +++ b/third_party/blink/renderer/core/frame/picture_in_picture_controller.h
@@ -83,8 +83,6 @@ HTMLVideoElement*, const std::vector<PictureInPictureControlInfo>&) = 0; - // Notifies that one of the states used by Picture-in-Picture has changed. - virtual void OnPictureInPictureStateChange() = 0; void Trace(blink::Visitor*) override;
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc index 345ec01..b283207 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc +++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
@@ -20,10 +20,10 @@ #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h" #include "third_party/blink/renderer/platform/histogram.h" #include "third_party/blink/renderer/platform/image-encoders/image_encoder_utils.h" -#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" #include "third_party/blink/renderer/platform/scheduler/public/thread.h" #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h" +#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/time.h" #include "third_party/skia/include/core/SkSurface.h" @@ -330,7 +330,7 @@ WrapPersistent(this))); } else { - background_scheduler::PostOnBackgroundThread( + worker_pool::PostTask( FROM_HERE, CrossThreadBind(&CanvasAsyncBlobCreator::EncodeImageOnEncoderThread, WrapCrossThreadPersistent(this), quality));
diff --git a/third_party/blink/renderer/core/html/media/html_audio_element.h b/third_party/blink/renderer/core/html/media/html_audio_element.h index b6076b7..2463517 100644 --- a/third_party/blink/renderer/core/html/media/html_audio_element.h +++ b/third_party/blink/renderer/core/html/media/html_audio_element.h
@@ -55,7 +55,6 @@ void PictureInPictureControlClicked(const WebString& control_id) override { NOTREACHED(); } - void OnPictureInPictureStateChange() final { NOTREACHED(); } }; } // namespace blink
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.h b/third_party/blink/renderer/core/html/media/html_media_element.h index 4e059f9c..e0ee8d2 100644 --- a/third_party/blink/renderer/core/html/media/html_media_element.h +++ b/third_party/blink/renderer/core/html/media/html_media_element.h
@@ -333,8 +333,6 @@ // becomes visible again. bool PausedWhenVisible() const; - void SetCcLayerForTesting(cc::Layer* layer) { SetCcLayer(layer); } - protected: HTMLMediaElement(const QualifiedName&, Document&); ~HTMLMediaElement() override;
diff --git a/third_party/blink/renderer/core/html/media/html_video_element.cc b/third_party/blink/renderer/core/html/media/html_video_element.cc index e29450c..642053f 100644 --- a/third_party/blink/renderer/core/html/media/html_video_element.cc +++ b/third_party/blink/renderer/core/html/media/html_video_element.cc
@@ -502,10 +502,8 @@ void HTMLVideoElement::DidEnterFullscreen() { UpdateControlsVisibility(); - if (DisplayType() == WebMediaPlayer::DisplayType::kPictureInPicture) { - PictureInPictureController::From(GetDocument()) - .ExitPictureInPicture(this, nullptr); - } + if (DisplayType() == WebMediaPlayer::DisplayType::kPictureInPicture) + exitPictureInPicture(base::DoNothing()); if (GetWebMediaPlayer()) { // FIXME: There is no embedder-side handling in web test mode. @@ -663,12 +661,19 @@ PictureInPictureController::Status::kEnabled; } -void HTMLVideoElement::enterPictureInPicture() { +void HTMLVideoElement::enterPictureInPicture( + WebMediaPlayer::PipWindowOpenedCallback callback) { if (DisplayType() == WebMediaPlayer::DisplayType::kFullscreen) Fullscreen::ExitFullscreen(GetDocument()); if (GetWebMediaPlayer()) - GetWebMediaPlayer()->EnterPictureInPicture(); + GetWebMediaPlayer()->EnterPictureInPicture(std::move(callback)); +} + +void HTMLVideoElement::exitPictureInPicture( + WebMediaPlayer::PipWindowClosedCallback callback) { + if (GetWebMediaPlayer()) + GetWebMediaPlayer()->ExitPictureInPicture(std::move(callback)); } void HTMLVideoElement::SendCustomControlsToPipWindow() { @@ -707,16 +712,6 @@ return is_auto_picture_in_picture_; } -void HTMLVideoElement::OnPictureInPictureStateChange() { - if (DisplayType() != WebMediaPlayer::DisplayType::kPictureInPicture || - IsInAutoPIP()) { - return; - } - - PictureInPictureController::From(GetDocument()) - .OnPictureInPictureStateChange(); -} - void HTMLVideoElement::OnEnteredPictureInPicture() { if (!picture_in_picture_interstitial_) { picture_in_picture_interstitial_ =
diff --git a/third_party/blink/renderer/core/html/media/html_video_element.h b/third_party/blink/renderer/core/html/media/html_video_element.h index 925fae2..9e6a0a1 100644 --- a/third_party/blink/renderer/core/html/media/html_video_element.h +++ b/third_party/blink/renderer/core/html/media/html_video_element.h
@@ -175,14 +175,14 @@ void MediaRemotingStarted(const WebString& remote_device_friendly_name) final; bool SupportsPictureInPicture() const final; - void enterPictureInPicture(); + void enterPictureInPicture(WebMediaPlayer::PipWindowOpenedCallback callback); + void exitPictureInPicture(WebMediaPlayer::PipWindowClosedCallback callback); void SendCustomControlsToPipWindow(); void PictureInPictureStopped() final; void PictureInPictureControlClicked(const WebString& control_id) final; void MediaRemotingStopped(WebLocalizedString::Name error_msg) final; WebMediaPlayer::DisplayType DisplayType() const final; bool IsInAutoPIP() const final; - void OnPictureInPictureStateChange() final; // Used by the PictureInPictureController as callback when the video element // enters or exits Picture-in-Picture state.
diff --git a/third_party/blink/renderer/core/html/media/video_wake_lock_test.cc b/third_party/blink/renderer/core/html/media/video_wake_lock_test.cc index bc01a5ee..8fd93c8e 100644 --- a/third_party/blink/renderer/core/html/media/video_wake_lock_test.cc +++ b/third_party/blink/renderer/core/html/media/video_wake_lock_test.cc
@@ -5,7 +5,6 @@ #include "third_party/blink/renderer/core/html/media/video_wake_lock.h" #include "testing/gtest/include/gtest/gtest.h" -#include "third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom-blink.h" #include "third_party/blink/renderer/core/dom/events/event.h" #include "third_party/blink/renderer/core/frame/picture_in_picture_controller.h" #include "third_party/blink/renderer/core/html/media/html_media_test_helper.h" @@ -16,107 +15,23 @@ namespace blink { -// The VideoWakeLockPictureInPictureService implements the PictureInPicture -// service in the same process as the test and guarantees that the callbacks are -// called in order for the events to be fired. set_run_loop() MUST be called -// before each attempt to enter/leave Picture-in-Picture. -class VideoWakeLockPictureInPictureService - : public mojom::blink::PictureInPictureService { +class VideoWakeLockMediaPlayer : public EmptyWebMediaPlayer { public: - VideoWakeLockPictureInPictureService() : binding_(this) {} - ~VideoWakeLockPictureInPictureService() override = default; - - void Bind(mojo::ScopedMessagePipeHandle handle) { - binding_.Bind( - mojom::blink::PictureInPictureServiceRequest(std::move(handle))); - } - - void StartSession(uint32_t, - const base::Optional<viz::SurfaceId>&, - const blink::WebSize&, - bool, - StartSessionCallback callback) final { + void EnterPictureInPicture(PipWindowOpenedCallback callback) final { std::move(callback).Run(WebSize()); } - void EndSession(EndSessionCallback callback) final { + void ExitPictureInPicture(PipWindowClosedCallback callback) final { std::move(callback).Run(); } - - void UpdateSession(uint32_t, - const base::Optional<viz::SurfaceId>&, - const blink::WebSize&, - bool) final {} - void SetDelegate(mojom::blink::PictureInPictureDelegatePtr) final {} - - private: - mojo::Binding<mojom::blink::PictureInPictureService> binding_; -}; - -class VideoWakeLockFrameClient : public test::MediaStubLocalFrameClient { - public: - static VideoWakeLockFrameClient* Create( - std::unique_ptr<WebMediaPlayer> player) { - return MakeGarbageCollected<VideoWakeLockFrameClient>(std::move(player)); - } - - explicit VideoWakeLockFrameClient(std::unique_ptr<WebMediaPlayer> player) - : test::MediaStubLocalFrameClient(std::move(player)), - interface_provider_(new service_manager::InterfaceProvider()) {} - - service_manager::InterfaceProvider* GetInterfaceProvider() override { - return interface_provider_.get(); - } - - private: - std::unique_ptr<service_manager::InterfaceProvider> interface_provider_; - - DISALLOW_COPY_AND_ASSIGN(VideoWakeLockFrameClient); }; class VideoWakeLockTest : public PageTestBase { public: - // Helper class that will block running the test until the given event is - // fired on the given element. - class WaitForEvent : public NativeEventListener { - public: - static WaitForEvent* Create(Element* element, const AtomicString& name) { - return MakeGarbageCollected<WaitForEvent>(element, name); - } - - WaitForEvent(Element* element, const AtomicString& name) - : element_(element), name_(name) { - element_->addEventListener(name_, this); - run_loop_.Run(); - } - - void Invoke(ExecutionContext*, Event*) final { - run_loop_.Quit(); - element_->removeEventListener(name_, this); - } - - void Trace(Visitor* visitor) final { - NativeEventListener::Trace(visitor); - visitor->Trace(element_); - } - - private: - base::RunLoop run_loop_; - Member<Element> element_; - AtomicString name_; - }; - void SetUp() override { PageTestBase::SetupPageWithClients( - nullptr, VideoWakeLockFrameClient::Create( - std::make_unique<EmptyWebMediaPlayer>())); - - service_manager::InterfaceProvider::TestApi test_api( - GetFrame().Client()->GetInterfaceProvider()); - test_api.SetBinderForName( - mojom::blink::PictureInPictureService::Name_, - WTF::BindRepeating(&VideoWakeLockPictureInPictureService::Bind, - WTF::Unretained(&pip_service_))); + nullptr, test::MediaStubLocalFrameClient::Create( + std::make_unique<VideoWakeLockMediaPlayer>())); video_ = HTMLVideoElement::Create(GetDocument()); video_wake_lock_ = MakeGarbageCollected<VideoWakeLock>(*video_.Get()); @@ -142,24 +57,16 @@ void SimulateEnterPictureInPicture() { PictureInPictureController::From(GetDocument()) .EnterPictureInPicture(Video(), nullptr); - - WaitForEvent::Create(video_.Get(), - event_type_names::kEnterpictureinpicture); } void SimulateLeavePictureInPicture() { PictureInPictureController::From(GetDocument()) .ExitPictureInPicture(Video(), nullptr); - - WaitForEvent::Create(video_.Get(), - event_type_names::kLeavepictureinpicture); } private: Persistent<HTMLVideoElement> video_; Persistent<VideoWakeLock> video_wake_lock_; - - VideoWakeLockPictureInPictureService pip_service_; }; TEST_F(VideoWakeLockTest, NoLockByDefault) {
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc b/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc index 9599733..70950b9 100644 --- a/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc +++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
@@ -17,8 +17,8 @@ #include "third_party/blink/renderer/platform/graphics/canvas_resource_provider.h" #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h" #include "third_party/blink/renderer/platform/image-decoders/image_decoder.h" -#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" +#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h" #include "third_party/blink/renderer/platform/wtf/saturated_arithmetic.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkImageInfo.h" @@ -1004,7 +1004,7 @@ draw_dst_rect, parsed_options.flip_y); std::unique_ptr<ParsedOptions> passed_parsed_options = std::make_unique<ParsedOptions>(parsed_options); - background_scheduler::PostOnBackgroundThread( + worker_pool::PostTask( FROM_HERE, CrossThreadBind(&RasterizeImageOnBackgroundThread, WrapCrossThreadPersistent(resolver),
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc b/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc index 41d1dec..b3fa07e15 100644 --- a/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc +++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap_factories.cc
@@ -52,9 +52,9 @@ #include "third_party/blink/renderer/platform/cross_thread_functional.h" #include "third_party/blink/renderer/platform/histogram.h" #include "third_party/blink/renderer/platform/image-decoders/image_decoder.h" -#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" #include "third_party/blink/renderer/platform/scheduler/public/thread.h" +#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h" #include "third_party/blink/renderer/platform/shared_buffer.h" #include "v8/include/v8.h" @@ -314,7 +314,7 @@ DOMArrayBuffer* array_buffer) { scoped_refptr<base::SingleThreadTaskRunner> task_runner = Thread::Current()->GetTaskRunner(); - background_scheduler::PostOnBackgroundThread( + worker_pool::PostTask( FROM_HERE, CrossThreadBind( &ImageBitmapFactories::ImageBitmapLoader::DecodeImageOnDecoderThread,
diff --git a/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.cc b/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.cc index 1a0f15a5..ed269f7 100644 --- a/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.cc +++ b/third_party/blink/renderer/core/layout/custom/custom_layout_fragment_request.cc
@@ -98,7 +98,7 @@ } } - box->SetOverrideBlockPercentageResolutionSize( + box->SetOverridePercentageResolutionBlockSize( percentage_resolution_logical_height); if (box->IsLayoutCustom()) @@ -107,7 +107,7 @@ box->ForceLayout(); box->ClearOverrideContainingBlockContentSize(); - box->ClearOverrideBlockPercentageResolutionSize(); + box->ClearOverridePercentageResolutionBlockSize(); box->ClearOverrideSize(); if (box->IsLayoutCustom())
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc index 2f0d5ca..1014d1b 100644 --- a/third_party/blink/renderer/core/layout/layout_box.cc +++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -138,7 +138,7 @@ void LayoutBox::WillBeDestroyed() { ClearOverrideSize(); ClearOverrideContainingBlockContentSize(); - ClearOverrideBlockPercentageResolutionSize(); + ClearOverridePercentageResolutionBlockSize(); if (IsOutOfFlowPositioned()) LayoutBlock::RemovePositionedObject(this); @@ -1472,17 +1472,17 @@ false; } -LayoutUnit LayoutBox::OverrideBlockPercentageResolutionSize() const { - DCHECK(HasOverrideBlockPercentageResolutionSize()); - return rare_data_->override_block_percentage_resolution_size_; +LayoutUnit LayoutBox::OverridePercentageResolutionBlockSize() const { + DCHECK(HasOverridePercentageResolutionBlockSize()); + return rare_data_->override_percentage_resolution_block_size_; } -bool LayoutBox::HasOverrideBlockPercentageResolutionSize() const { +bool LayoutBox::HasOverridePercentageResolutionBlockSize() const { return rare_data_ && - rare_data_->has_override_block_percentage_resolution_size_; + rare_data_->has_override_percentage_resolution_block_size_; } -void LayoutBox::SetOverrideBlockPercentageResolutionSize( +void LayoutBox::SetOverridePercentageResolutionBlockSize( LayoutUnit logical_height) { DCHECK_GE(logical_height, LayoutUnit(-1)); auto& rare_data = EnsureRareData(); @@ -1491,19 +1491,19 @@ // cannot be in use at the same time. DCHECK(!rare_data.has_override_available_inline_size_); - rare_data.override_block_percentage_resolution_size_ = logical_height; - rare_data.has_override_block_percentage_resolution_size_ = true; + rare_data.override_percentage_resolution_block_size_ = logical_height; + rare_data.has_override_percentage_resolution_block_size_ = true; } -void LayoutBox::ClearOverrideBlockPercentageResolutionSize() { +void LayoutBox::ClearOverridePercentageResolutionBlockSize() { if (!rare_data_) return; - EnsureRareData().has_override_block_percentage_resolution_size_ = false; + EnsureRareData().has_override_percentage_resolution_block_size_ = false; } LayoutUnit LayoutBox::OverrideAvailableInlineSize() const { DCHECK(HasOverrideAvailableInlineSize()); - return rare_data_->override_block_percentage_resolution_size_; + return rare_data_->override_percentage_resolution_block_size_; } bool LayoutBox::HasOverrideAvailableInlineSize() const { @@ -1516,7 +1516,7 @@ // The actual data field is shared with override block percentage resolution // size. They cannot be in use at the same time. - DCHECK(!rare_data.has_override_block_percentage_resolution_size_); + DCHECK(!rare_data.has_override_percentage_resolution_block_size_); rare_data.override_available_inline_size_ = inline_size; rare_data.has_override_available_inline_size_ = true; @@ -3473,7 +3473,7 @@ !containing_block->IsOutOfFlowPositioned() && !(containing_block->IsLayoutCustom() && ToLayoutCustom(containing_block)->IsLoaded()) && - !containing_block->HasOverrideBlockPercentageResolutionSize() && + !containing_block->HasOverridePercentageResolutionBlockSize() && !containing_block->IsLayoutGrid() && containing_block->StyleRef().LogicalHeight().IsAuto(); } @@ -3507,11 +3507,11 @@ } LayoutUnit available_height(-1); - if (containing_block_child->HasOverrideBlockPercentageResolutionSize()) { + if (containing_block_child->HasOverridePercentageResolutionBlockSize()) { available_height = - containing_block_child->OverrideBlockPercentageResolutionSize(); - } else if (cb->HasOverrideBlockPercentageResolutionSize()) { - available_height = cb->OverrideBlockPercentageResolutionSize(); + containing_block_child->OverridePercentageResolutionBlockSize(); + } else if (cb->HasOverridePercentageResolutionBlockSize()) { + available_height = cb->OverridePercentageResolutionBlockSize(); } else if (HasOverrideContainingBlockContentLogicalWidth() && IsHorizontalWritingMode() != real_cb->IsHorizontalWritingMode()) { available_height = OverrideContainingBlockContentLogicalWidth(); @@ -3706,7 +3706,7 @@ // CustomLayout items can resolve their percentages against an available or // percentage size override. if (IsCustomItem() && (HasOverrideContainingBlockContentLogicalHeight() || - HasOverrideBlockPercentageResolutionSize())) + HasOverridePercentageResolutionBlockSize())) return false; if (LayoutBlock* cb = ContainingBlockForAutoHeightDetection(logical_height)) @@ -3778,8 +3778,8 @@ ToLayoutBoxModelObject(cb)); } else if (stretched_height != -1) { available_height = stretched_height; - } else if (HasOverrideBlockPercentageResolutionSize()) { - available_height = OverrideBlockPercentageResolutionSize(); + } else if (HasOverridePercentageResolutionBlockSize()) { + available_height = OverridePercentageResolutionBlockSize(); } else { available_height = has_perpendicular_containing_block ? ContainingBlockLogicalWidthForContent()
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h index 0d1df0c5..fd5e6ec 100644 --- a/third_party/blink/renderer/core/layout/layout_box.h +++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -71,7 +71,7 @@ // TODO(rego): We should store these based on physical direction. has_override_containing_block_content_logical_width_(false), has_override_containing_block_content_logical_height_(false), - has_override_block_percentage_resolution_size_(false), + has_override_percentage_resolution_block_size_(false), has_override_available_inline_size_(false), has_previous_content_box_rect_and_layout_overflow_rect_(false), percent_height_container_(nullptr), @@ -87,7 +87,7 @@ bool has_override_containing_block_content_logical_width_ : 1; bool has_override_containing_block_content_logical_height_ : 1; - bool has_override_block_percentage_resolution_size_ : 1; + bool has_override_percentage_resolution_block_size_ : 1; bool has_override_available_inline_size_ : 1; bool has_previous_content_box_rect_and_layout_overflow_rect_ : 1; @@ -101,7 +101,7 @@ // LayoutNG. So, since custom layout containers are laid out by legacy, this // should be safe. union { - LayoutUnit override_block_percentage_resolution_size_; + LayoutUnit override_percentage_resolution_block_size_; LayoutUnit override_available_inline_size_; }; @@ -790,13 +790,13 @@ void SetOverrideContainingBlockContentLogicalHeight(LayoutUnit); void ClearOverrideContainingBlockContentSize(); - // When a block percentage resolution size override has been set, we'll use + // When a percentage resolution block size override has been set, we'll use // that size to resolve block-size percentages on this box, rather than // deducing it from the containing block. - LayoutUnit OverrideBlockPercentageResolutionSize() const; - bool HasOverrideBlockPercentageResolutionSize() const; - void SetOverrideBlockPercentageResolutionSize(LayoutUnit); - void ClearOverrideBlockPercentageResolutionSize(); + LayoutUnit OverridePercentageResolutionBlockSize() const; + bool HasOverridePercentageResolutionBlockSize() const; + void SetOverridePercentageResolutionBlockSize(LayoutUnit); + void ClearOverridePercentageResolutionBlockSize(); // When an available inline size override has been set, we'll use that to fill // available inline size, rather than deducing it from the containing block
diff --git a/third_party/blink/renderer/core/layout/layout_box_model_object.cc b/third_party/blink/renderer/core/layout/layout_box_model_object.cc index 9cbc223..f265434 100644 --- a/third_party/blink/renderer/core/layout/layout_box_model_object.cc +++ b/third_party/blink/renderer/core/layout/layout_box_model_object.cc
@@ -718,7 +718,7 @@ return false; if (this_box && this_box->IsCustomItem() && (this_box->HasOverrideContainingBlockContentLogicalHeight() || - this_box->HasOverrideBlockPercentageResolutionSize())) + this_box->HasOverridePercentageResolutionBlockSize())) return false; if (logical_height_length.IsAuto() &&
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.cc index bf73a03c..64babf9 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.h" +#include "third_party/blink/renderer/core/layout/layout_text_fragment.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_bidi_paragraph.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_break_token.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.h" @@ -131,7 +132,6 @@ return false; if (IsIgnoredInCaretMovement(index)) return false; - // TODO(xiaochengh): Handle other cases return true; } @@ -156,7 +156,40 @@ } bool NGCaretNavigator::IsIgnoredInCaretMovement(unsigned index) const { - // TODO(xiaochengh): Include floats, out-of-flows and CSS-generated contents. + DCHECK_LT(index, GetText().length()); + const NGInlineItem& item = GetData().FindItemForTextOffset(index); + + // Caret navigation works on text, atomic inlines and non-ZWS controls only. + switch (item.Type()) { + case NGInlineItem::kText: + case NGInlineItem::kAtomicInline: + break; + case NGInlineItem::kControl: + if (GetText()[index] == kZeroWidthSpaceCharacter) + return true; + break; + default: + return true; + } + + // Ignore CSS generate contents. + // TODO(xiaochengh): This might be general enough to be merged into + // |NGInlineItem| as a member function. + DCHECK(item.GetLayoutObject()); + const LayoutObject* object = item.GetLayoutObject(); + if (const auto* text_fragment = ToLayoutTextFragmentOrNull(object)) { + // ::first-letter |LayoutTextFragment| returns null for |GetNode()|. Check + // |AssociatedTextNode()| to see if it's created by a text node. + if (!text_fragment->AssociatedTextNode()) + return true; + } else { + if (!object->NonPseudoNode()) + return true; + } + + // Ignore collapsed whitespaces that not visually at line end due to bidi. + // Caret movement should move over them as if they don't exist to match the + // existing behavior. return IsCollapsedSpaceByLineWrap(index) && index != VisualLastCharacterOf(ContainingLineOf(index)); } @@ -321,7 +354,6 @@ if (next.type != VisualMovementResultType::kWithinContext) return {next.type, base::nullopt}; - // TODO(xiaochengh): Handle editing-ignored contents, e.g., CSS-generated. if (next.has_passed_character) has_passed_character = true;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.h b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.h index 046de98..f4e61d4 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator.h
@@ -77,7 +77,6 @@ // TODO(xiaochengh): Handle the following // - Grapheme clusters // - Enterable atomic inlines - // - Editing-ignored contents enum class VisualMovementResultType { kWithinContext,
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator_test.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator_test.cc index c386e4f..1192a8e 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator_test.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_navigator_test.cc
@@ -393,4 +393,31 @@ EXPECT_TRUE(RightPositionOf(CaretAfter(6)).IsAfterContext()); } +TEST_F(NGCaretNavigatorTest, MoveOverPseudoElementInBidi) { + SetupHtml("container", + "<style>.bidi::before,.bidi::after{content:'a\\05D0 b'}</style>" + "<div id=container>אב גד " + "<span class=bidi>הו</span>" + " זח טי</div>"); + + // Text: "AB CD aAbEFaAb GH IJ" + // Rendered as: "DC BA aAbFEaAb JI HG" + + // Moving right from "BA |" should arrive at "F|E" + EXPECT_TRUE(RightPositionOf(CaretAfter(5)).IsWithinContext()); + EXPECT_EQ(CaretBefore(10), *RightPositionOf(CaretAfter(5)).position); + + // Moving left from "|FE" should arrive at "BA| " + EXPECT_TRUE(LeftPositionOf(CaretAfter(10)).IsWithinContext()); + EXPECT_EQ(CaretBefore(5), *LeftPositionOf(CaretAfter(10)).position); + + // Moving right from "FE|" should arrive at " |JI" + EXPECT_TRUE(RightPositionOf(CaretBefore(9)).IsWithinContext()); + EXPECT_EQ(CaretAfter(14), *RightPositionOf(CaretBefore(9)).position); + + // Moving left from "| JI" should arrive at "F|E" + EXPECT_TRUE(LeftPositionOf(CaretBefore(14)).IsWithinContext()); + EXPECT_EQ(CaretAfter(9), *LeftPositionOf(CaretBefore(14)).position); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/page/drag_controller.cc b/third_party/blink/renderer/core/page/drag_controller.cc index 3b0b20a..818638f9 100644 --- a/third_party/blink/renderer/core/page/drag_controller.cc +++ b/third_party/blink/renderer/core/page/drag_controller.cc
@@ -292,12 +292,21 @@ if (OperationForLoad(drag_data, local_root) != kDragOperationNone) { if (page_->GetSettings().GetNavigateOnDragDrop()) { ResourceRequest resource_request(drag_data->AsURL()); - // TODO(mkwst): Perhaps this should use a unique origin as the requestor - // origin rather than the origin of the dragged data URL? - resource_request.SetRequestorOrigin( - SecurityOrigin::Create(KURL(drag_data->AsURL()))); resource_request.SetHasUserGesture(LocalFrame::HasTransientUserActivation( document_under_mouse_ ? document_under_mouse_->GetFrame() : nullptr)); + + // Use a unique origin to match other navigations that are initiated + // outside of a renderer process (e.g. omnibox navigations). Here, the + // initiator of the navigation is a user dragging files from *outside* of + // the current page. See also https://crbug.com/930049. + // + // TODO(lukasza): Once drag-and-drop remembers the source of the drag + // (unique origin for drags started from top-level Chrome like bookmarks + // or for drags started from other apps like Windows Explorer; specific + // origin for drags started from another tab) we should use the source of + // the drag as the initiator of the navigation below. + resource_request.SetRequestorOrigin(SecurityOrigin::CreateUniqueOpaque()); + page_->MainFrame()->Navigate(FrameLoadRequest(nullptr, resource_request), WebFrameLoadType::kStandard); }
diff --git a/third_party/blink/renderer/core/timing/event_timing.cc b/third_party/blink/renderer/core/timing/event_timing.cc index 3315755..cca33b2 100644 --- a/third_party/blink/renderer/core/timing/event_timing.cc +++ b/third_party/blink/renderer/core/timing/event_timing.cc
@@ -7,7 +7,6 @@ #include "third_party/blink/renderer/core/dom/events/event.h" #include "third_party/blink/renderer/core/events/pointer_event.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" -#include "third_party/blink/renderer/core/origin_trials/origin_trials.h" #include "third_party/blink/renderer/core/timing/dom_window_performance.h" #include "third_party/blink/renderer/core/timing/performance_event_timing.h" #include "third_party/blink/renderer/platform/wtf/time.h" @@ -26,29 +25,22 @@ event.isTrusted(); } -void EventTiming::FinishWillDispatch() { - processing_start_ = CurrentTimeTicks(); - finished_will_dispatch_event_ = true; -} - void EventTiming::WillDispatchEvent(const Event& event) { // Assume each event can be dispatched only once. DCHECK(!finished_will_dispatch_event_); if (!performance_ || !ShouldReportForEventTiming(event)) return; - // We care about events when the first input is desired or - // when the EventTiming origin trial is enabled. - if (performance_->FirstInputDesired()) { - FinishWillDispatch(); - return; - } - if (!origin_trials::EventTimingEnabled(performance_->GetExecutionContext())) - return; + // Although we screen the events for timing by setting these conditions here, + // we cannot assume that the conditions should still hold true in + // DidDispatchEvent. These conditions have to be re-tested before an entry is + // dispatched. if ((performance_->ShouldBufferEntries() && !performance_->IsEventTimingBufferFull()) || - performance_->HasObserverFor(PerformanceEntry::kEvent)) { - FinishWillDispatch(); + performance_->HasObserverFor(PerformanceEntry::kEvent) || + !performance_->FirstInputDetected()) { + processing_start_ = CurrentTimeTicks(); + finished_will_dispatch_event_ = true; } }
diff --git a/third_party/blink/renderer/core/timing/event_timing.h b/third_party/blink/renderer/core/timing/event_timing.h index 96648d9d..59bacd8 100644 --- a/third_party/blink/renderer/core/timing/event_timing.h +++ b/third_party/blink/renderer/core/timing/event_timing.h
@@ -26,7 +26,6 @@ void DidDispatchEvent(const Event&); private: - void FinishWillDispatch(); bool ShouldReportForEventTiming(const Event& event) const; // The time the first event handler or default action started to execute. TimeTicks processing_start_;
diff --git a/third_party/blink/renderer/core/timing/performance_event_timing.idl b/third_party/blink/renderer/core/timing/performance_event_timing.idl index 951011e3..ef577a5 100644 --- a/third_party/blink/renderer/core/timing/performance_event_timing.idl +++ b/third_party/blink/renderer/core/timing/performance_event_timing.idl
@@ -3,8 +3,10 @@ // found in the LICENSE file. // https://github.com/wicg/event-timing -[Exposed=Window] -interface PerformanceEventTiming : PerformanceEntry { +[ + Exposed=Window, + OriginTrialEnabled=EventTiming +] interface PerformanceEventTiming : PerformanceEntry { readonly attribute DOMHighResTimeStamp processingStart; readonly attribute DOMHighResTimeStamp processingEnd; readonly attribute boolean cancelable;
diff --git a/third_party/blink/renderer/core/timing/performance_observer.cc b/third_party/blink/renderer/core/timing/performance_observer.cc index 5850cc8..1cb5429 100644 --- a/third_party/blink/renderer/core/timing/performance_observer.cc +++ b/third_party/blink/renderer/core/timing/performance_observer.cc
@@ -59,9 +59,10 @@ if (execution_context->IsDocument()) { if (origin_trials::ElementTimingEnabled(execution_context)) supportedEntryTypes.push_back(performance_entry_names::kElement); - if (origin_trials::EventTimingEnabled(execution_context)) + if (origin_trials::EventTimingEnabled(execution_context)) { supportedEntryTypes.push_back(performance_entry_names::kEvent); - supportedEntryTypes.push_back(performance_entry_names::kFirstInput); + supportedEntryTypes.push_back(performance_entry_names::kFirstInput); + } if (origin_trials::LayoutJankAPIEnabled(execution_context)) supportedEntryTypes.push_back(performance_entry_names::kLayoutJank); supportedEntryTypes.push_back(performance_entry_names::kLongtask);
diff --git a/third_party/blink/renderer/core/timing/window_performance.cc b/third_party/blink/renderer/core/timing/window_performance.cc index 89924e9..3f264bb5 100644 --- a/third_party/blink/renderer/core/timing/window_performance.cc +++ b/third_party/blink/renderer/core/timing/window_performance.cc
@@ -329,23 +329,12 @@ return !timing() || !timing()->loadEventStart(); } -bool WindowPerformance::FirstInputDesired() const { - if (!GetFrame() || !GetFrame()->IsMainFrame()) - return false; - - return !first_input_timing_; -} - void WindowPerformance::RegisterEventTiming(const AtomicString& event_type, TimeTicks start_time, TimeTicks processing_start, TimeTicks processing_end, bool cancelable) { - if (!GetFrame()) - return; - - DCHECK(FirstInputDesired() || - origin_trials::EventTimingEnabled(GetExecutionContext())); + DCHECK(origin_trials::EventTimingEnabled(GetExecutionContext())); // |start_time| could be null in some tests that inject input. DCHECK(!processing_start.is_null()); @@ -375,11 +364,7 @@ void WindowPerformance::ReportEventTimings(WebLayerTreeView::SwapResult result, TimeTicks timestamp) { - if (!GetFrame()) - return; - - DCHECK(FirstInputDesired() || - origin_trials::EventTimingEnabled(GetExecutionContext())); + DCHECK(origin_trials::EventTimingEnabled(GetExecutionContext())); DOMHighResTimeStamp end_time = MonotonicTimeToDOMHighResTimeStamp(timestamp); for (const auto& entry : event_timings_) { @@ -397,11 +382,8 @@ PerformanceEventTiming::CreateFirstInputTiming(entry)); } } - // Do not report EventTiming unless origin trial is enabled! - if (!origin_trials::EventTimingEnabled(GetExecutionContext()) || - duration_in_ms <= kEventTimingDurationThresholdInMs) { + if (duration_in_ms <= kEventTimingDurationThresholdInMs) continue; - } if (HasObserverFor(PerformanceEntry::kEvent)) { UseCounter::Count(GetFrame(), @@ -432,6 +414,8 @@ void WindowPerformance::DispatchFirstInputTiming( PerformanceEventTiming* entry) { + DCHECK(origin_trials::EventTimingEnabled(GetExecutionContext())); + if (!entry) return; DCHECK_EQ("firstInput", entry->entryType());
diff --git a/third_party/blink/renderer/core/timing/window_performance.h b/third_party/blink/renderer/core/timing/window_performance.h index 2bbc08c..d4182035 100644 --- a/third_party/blink/renderer/core/timing/window_performance.h +++ b/third_party/blink/renderer/core/timing/window_performance.h
@@ -69,10 +69,7 @@ bool ShouldBufferEntries(); - // Currently, returns false always for frames that are not main frames because - // we're only shipping FirstInputTiming on main frames. For main frames, - // returns true if the first input has not yet been calculated. - bool FirstInputDesired() const; + bool FirstInputDetected() const { return !!first_input_timing_; } // This method creates a PerformanceEventTiming and if needed creates a swap // promise to calculate the |duration| attribute when such promise is
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc index eee2c082..5d9dbf6 100644 --- a/third_party/blink/renderer/core/workers/dedicated_worker.cc +++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -11,7 +11,7 @@ #include "services/service_manager/public/mojom/interface_provider.mojom-blink.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/mojom/script/script_type.mojom-blink.h" -#include "third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom-blink.h" +#include "third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom-blink.h" #include "third_party/blink/public/platform/web_content_settings_client.h" #include "third_party/blink/public/platform/web_layer_tree_view.h" #include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h" @@ -53,11 +53,11 @@ ConnectToWorkerInterfaceProvider( ExecutionContext* execution_context, scoped_refptr<const SecurityOrigin> script_origin) { - mojom::blink::DedicatedWorkerFactoryPtr worker_factory; - execution_context->GetInterfaceProvider()->GetInterface(&worker_factory); + mojom::blink::DedicatedWorkerHostFactoryPtr worker_host_factory; + execution_context->GetInterfaceProvider()->GetInterface(&worker_host_factory); service_manager::mojom::blink::InterfaceProviderPtrInfo interface_provider_ptr; - worker_factory->CreateDedicatedWorker( + worker_host_factory->CreateDedicatedWorker( script_origin, mojo::MakeRequest(&interface_provider_ptr)); return interface_provider_ptr; }
diff --git a/third_party/blink/renderer/core/workers/experimental/thread_pool.cc b/third_party/blink/renderer/core/workers/experimental/thread_pool.cc index 93e729cb..ef7309a8 100644 --- a/third_party/blink/renderer/core/workers/experimental/thread_pool.cc +++ b/third_party/blink/renderer/core/workers/experimental/thread_pool.cc
@@ -5,7 +5,7 @@ #include "third_party/blink/renderer/core/workers/experimental/thread_pool.h" #include "services/service_manager/public/cpp/interface_provider.h" -#include "third_party/blink/public/mojom/worker/dedicated_worker_factory.mojom-blink.h" +#include "third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom-blink.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h" @@ -64,11 +64,11 @@ ExecutionContext* execution_context, scoped_refptr<const SecurityOrigin> script_origin) { // TODO(japhet): Implement a proper factory. - mojom::blink::DedicatedWorkerFactoryPtr worker_factory; - execution_context->GetInterfaceProvider()->GetInterface(&worker_factory); + mojom::blink::DedicatedWorkerHostFactoryPtr worker_host_factory; + execution_context->GetInterfaceProvider()->GetInterface(&worker_host_factory); service_manager::mojom::blink::InterfaceProviderPtrInfo interface_provider_ptr; - worker_factory->CreateDedicatedWorker( + worker_host_factory->CreateDedicatedWorker( script_origin, mojo::MakeRequest(&interface_provider_ptr)); return interface_provider_ptr; }
diff --git a/third_party/blink/renderer/devtools/front_end/main/Main.js b/third_party/blink/renderer/devtools/front_end/main/Main.js index ea1a21dd..bab894d5 100644 --- a/third_party/blink/renderer/devtools/front_end/main/Main.js +++ b/third_party/blink/renderer/devtools/front_end/main/Main.js
@@ -489,6 +489,7 @@ _handleContextMenu(contextMenu) { if (Components.dockController.canDock()) { const dockItemElement = createElementWithClass('div', 'flex-centered flex-auto'); + dockItemElement.tabIndex = -1; const titleElement = dockItemElement.createChild('span', 'flex-auto'); titleElement.textContent = Common.UIString('Dock side'); const toggleDockSideShorcuts = UI.shortcutRegistry.shortcutDescriptorsForAction('main.toggle-dock'); @@ -507,13 +508,13 @@ right.addEventListener(UI.ToolbarButton.Events.MouseDown, event => event.data.consume()); left.addEventListener(UI.ToolbarButton.Events.MouseDown, event => event.data.consume()); undock.addEventListener( - UI.ToolbarButton.Events.MouseUp, setDockSide.bind(null, Components.DockController.State.Undocked)); + UI.ToolbarButton.Events.Click, setDockSide.bind(null, Components.DockController.State.Undocked)); bottom.addEventListener( - UI.ToolbarButton.Events.MouseUp, setDockSide.bind(null, Components.DockController.State.DockedToBottom)); + UI.ToolbarButton.Events.Click, setDockSide.bind(null, Components.DockController.State.DockedToBottom)); right.addEventListener( - UI.ToolbarButton.Events.MouseUp, setDockSide.bind(null, Components.DockController.State.DockedToRight)); + UI.ToolbarButton.Events.Click, setDockSide.bind(null, Components.DockController.State.DockedToRight)); left.addEventListener( - UI.ToolbarButton.Events.MouseUp, setDockSide.bind(null, Components.DockController.State.DockedToLeft)); + UI.ToolbarButton.Events.Click, setDockSide.bind(null, Components.DockController.State.DockedToLeft)); undock.setToggled(Components.dockController.dockSide() === Components.DockController.State.Undocked); bottom.setToggled(Components.dockController.dockSide() === Components.DockController.State.DockedToBottom); right.setToggled(Components.dockController.dockSide() === Components.DockController.State.DockedToRight); @@ -522,6 +523,22 @@ dockItemToolbar.appendToolbarItem(left); dockItemToolbar.appendToolbarItem(bottom); dockItemToolbar.appendToolbarItem(right); + dockItemElement.addEventListener('keydown', event => { + let dir = 0; + if (event.key === 'ArrowLeft') + dir = -1; + else if (event.key === 'ArrowRight') + dir = 1; + else + return; + + const buttons = [undock, left, bottom, right]; + let index = buttons.findIndex(button => button.element.hasFocus()); + index = Number.constrain(index + dir, 0, buttons.length - 1); + + buttons[index].element.focus(); + event.consume(true); + }); contextMenu.headerSection().appendCustomItem(dockItemElement); }
diff --git a/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js b/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js index 7ecef0e..4707e5d 100644 --- a/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js +++ b/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptAutocomplete.js
@@ -413,7 +413,8 @@ const group = {items: [], __proto__: null}; try { - if (typeof o === 'object' && o.constructor && o.constructor.name) + if (typeof o === 'object' && Object.prototype.hasOwnProperty.call(o, 'constructor') && o.constructor && + o.constructor.name) group.title = o.constructor.name; } catch (ee) { // we could break upon cross origin check.
diff --git a/third_party/blink/renderer/devtools/front_end/ui/SoftContextMenu.js b/third_party/blink/renderer/devtools/front_end/ui/SoftContextMenu.js index aff0106c..e67dd080 100644 --- a/third_party/blink/renderer/devtools/front_end/ui/SoftContextMenu.js +++ b/third_party/blink/renderer/devtools/front_end/ui/SoftContextMenu.js
@@ -119,7 +119,7 @@ if (item.element) { const wrapper = menuItemElement.createChild('div', 'soft-context-menu-custom-item'); wrapper.appendChild(item.element); - menuItemElement._isCustom = true; + menuItemElement._customElement = item.element; return menuItemElement; } @@ -277,7 +277,10 @@ if (UI.themeSupport.hasTheme() || Host.isMac()) this._highlightedMenuItemElement.classList.add('force-white-icons'); this._highlightedMenuItemElement.classList.add('soft-context-menu-item-mouse-over'); - this._highlightedMenuItemElement.focus(); + if (this._highlightedMenuItemElement._customElement) + this._highlightedMenuItemElement._customElement.focus(); + else + this._highlightedMenuItemElement.focus(); if (scheduleSubMenu && this._highlightedMenuItemElement._subItems && !this._highlightedMenuItemElement._subMenuTimer) { this._highlightedMenuItemElement._subMenuTimer = @@ -290,8 +293,7 @@ let menuItemElement = this._highlightedMenuItemElement ? this._highlightedMenuItemElement.previousSibling : this._contextMenuElement.lastChild; while (menuItemElement && - (menuItemElement._isSeparator || menuItemElement._isCustom || - menuItemElement.classList.contains('soft-context-menu-disabled'))) + (menuItemElement._isSeparator || menuItemElement.classList.contains('soft-context-menu-disabled'))) menuItemElement = menuItemElement.previousSibling; if (menuItemElement) this._highlightMenuItem(menuItemElement, false); @@ -301,8 +303,7 @@ let menuItemElement = this._highlightedMenuItemElement ? this._highlightedMenuItemElement.nextSibling : this._contextMenuElement.firstChild; while (menuItemElement && - (menuItemElement._isSeparator || menuItemElement._isCustom || - menuItemElement.classList.contains('soft-context-menu-disabled'))) + (menuItemElement._isSeparator || menuItemElement.classList.contains('soft-context-menu-disabled'))) menuItemElement = menuItemElement.nextSibling; if (menuItemElement) this._highlightMenuItem(menuItemElement, false); @@ -335,11 +336,12 @@ break; case 'Enter': if (!isEnterKey(event)) - break; + return; // Fall through case ' ': // Space - if (this._highlightedMenuItemElement) - this._triggerAction(this._highlightedMenuItemElement, event); + if (!this._highlightedMenuItemElement || this._highlightedMenuItemElement._customElement) + return; + this._triggerAction(this._highlightedMenuItemElement, event); if (this._highlightedMenuItemElement._subItems) this._subMenu._highlightNext(); break;
diff --git a/third_party/blink/renderer/devtools/front_end/ui/Toolbar.js b/third_party/blink/renderer/devtools/front_end/ui/Toolbar.js index 3495310..664588a 100644 --- a/third_party/blink/renderer/devtools/front_end/ui/Toolbar.js +++ b/third_party/blink/renderer/devtools/front_end/ui/Toolbar.js
@@ -452,7 +452,6 @@ super(createElementWithClass('button', 'toolbar-button')); this.element.addEventListener('click', this._clicked.bind(this), false); this.element.addEventListener('mousedown', this._mouseDown.bind(this), false); - this.element.addEventListener('mouseup', this._mouseUp.bind(this), false); this._glyphElement = UI.Icon.create('', 'toolbar-glyph hidden'); this.element.appendChild(this._glyphElement); @@ -528,21 +527,11 @@ return; this.dispatchEventToListeners(UI.ToolbarButton.Events.MouseDown, event); } - - /** - * @param {!Event} event - */ - _mouseUp(event) { - if (!this._enabled) - return; - this.dispatchEventToListeners(UI.ToolbarButton.Events.MouseUp, event); - } }; UI.ToolbarButton.Events = { Click: Symbol('Click'), - MouseDown: Symbol('MouseDown'), - MouseUp: Symbol('MouseUp') + MouseDown: Symbol('MouseDown') }; UI.ToolbarInput = class extends UI.ToolbarItem {
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn index 39cd2f2..db4b2a3 100644 --- a/third_party/blink/renderer/modules/BUILD.gn +++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -321,7 +321,6 @@ "peerconnection/rtc_quic_transport_test.cc", "peerconnection/rtc_quic_transport_test.h", "picture_in_picture/html_video_element_picture_in_picture_test.cc", - "picture_in_picture/picture_in_picture_controller_test.cc", "presentation/mock_presentation_service.h", "presentation/presentation_availability_state_test.cc", "presentation/presentation_availability_test.cc", @@ -351,6 +350,8 @@ "websockets/dom_websocket_test.cc", "websockets/websocket_channel_impl_test.cc", "worklet/animation_and_paint_worklet_thread_test.cc", + "worklet/worklet_thread_test_common.cc", + "worklet/worklet_thread_test_common.h", ] configs += [
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope_test.cc b/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope_test.cc index a91df9a5..4c36697a 100644 --- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope_test.cc +++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_global_scope_test.cc
@@ -13,18 +13,15 @@ #include "third_party/blink/renderer/bindings/core/v8/v8_cache_options.h" #include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h" #include "third_party/blink/renderer/core/dom/document.h" -#include "third_party/blink/renderer/core/inspector/worker_devtools_params.h" -#include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h" #include "third_party/blink/renderer/core/script/script.h" #include "third_party/blink/renderer/core/testing/page_test_base.h" -#include "third_party/blink/renderer/core/workers/global_scope_creation_params.h" #include "third_party/blink/renderer/core/workers/worker_reporting_proxy.h" #include "third_party/blink/renderer/core/workers/worklet_module_responses_map.h" #include "third_party/blink/renderer/modules/animationworklet/animation_worklet.h" #include "third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h" #include "third_party/blink/renderer/modules/animationworklet/animator.h" #include "third_party/blink/renderer/modules/animationworklet/animator_definition.h" -#include "third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread.h" +#include "third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/cross_thread_functional.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h" @@ -76,42 +73,14 @@ reporting_proxy_ = std::make_unique<WorkerReportingProxy>(); } - std::unique_ptr<AnimationAndPaintWorkletThread> - CreateAnimationAndPaintWorkletThread( - AnimationWorkletProxyClient* proxy_client) { - std::unique_ptr<AnimationAndPaintWorkletThread> thread = - AnimationAndPaintWorkletThread::CreateForAnimationWorklet( - *reporting_proxy_); - - WorkerClients* clients = WorkerClients::Create(); - if (proxy_client) - ProvideAnimationWorkletProxyClientTo(clients, proxy_client); - - Document* document = &GetDocument(); - thread->Start( - std::make_unique<GlobalScopeCreationParams>( - document->Url(), mojom::ScriptType::kModule, - OffMainThreadWorkerScriptFetchOption::kEnabled, - document->UserAgent(), nullptr /* web_worker_fetch_context */, - Vector<CSPHeaderAndType>(), document->GetReferrerPolicy(), - document->GetSecurityOrigin(), document->IsSecureContext(), - document->GetHttpsState(), clients, document->AddressSpace(), - OriginTrialContext::GetTokens(document).get(), - base::UnguessableToken::Create(), nullptr /* worker_settings */, - kV8CacheOptionsDefault, - MakeGarbageCollected<WorkletModuleResponsesMap>()), - base::nullopt, std::make_unique<WorkerDevToolsParams>(), - ParentExecutionContextTaskRunners::Create()); - return thread; - } - using TestCalback = void (AnimationWorkletGlobalScopeTest::*)(WorkerThread*, WaitableEvent*); // Create a new animation worklet and run the callback task on it. Terminate // the worklet once the task completion is signaled. void RunTestOnWorkletThread(TestCalback callback) { std::unique_ptr<WorkerThread> worklet = - CreateAnimationAndPaintWorkletThread(nullptr); + CreateAnimationAndPaintWorkletThread(&GetDocument(), + reporting_proxy_.get()); WaitableEvent waitable_event; PostCrossThreadTask( *worklet->GetTaskRunner(TaskType::kInternalTest), FROM_HERE, @@ -410,13 +379,7 @@ waitable_event->Signal(); } - void AddGlobalScopeForTesting(WorkerThread* thread, - AnimationWorkletProxyClient* proxy_client, - WaitableEvent* waitable_event) { - proxy_client->AddGlobalScopeForTesting( - To<WorkletGlobalScope>(thread->GlobalScope())); - waitable_event->Signal(); - } + std::unique_ptr<WorkerReportingProxy> reporting_proxy_; private: // Returns false when a script evaluation error happens. @@ -436,8 +399,6 @@ ScriptValue value = module.Evaluate(script_state); return value.IsEmpty(); } - - std::unique_ptr<WorkerReportingProxy> reporting_proxy_; }; TEST_F(AnimationWorkletGlobalScopeTest, BasicParsing) { @@ -469,8 +430,8 @@ ShouldRegisterItselfAfterFirstAnimatorRegistration) { MockAnimationWorkletProxyClient* proxy_client = MakeGarbageCollected<MockAnimationWorkletProxyClient>(); - std::unique_ptr<WorkerThread> worklet = - CreateAnimationAndPaintWorkletThread(proxy_client); + std::unique_ptr<WorkerThread> worklet = CreateAnimationAndPaintWorkletThread( + &GetDocument(), reporting_proxy_.get(), proxy_client); // Animation worklet global scope (AWGS) should not register itself upon // creation. EXPECT_FALSE(proxy_client->did_add_global_scope()); @@ -499,78 +460,4 @@ worklet->WaitForShutdownForTesting(); } -TEST_F(AnimationWorkletGlobalScopeTest, SelectGlobalScope) { - AnimationWorkletProxyClient* proxy_client = - MakeGarbageCollected<MockAnimationWorkletProxyClient>(); - - // Global scopes must be created on worker threads. - std::unique_ptr<WorkerThread> first_worklet = - CreateAnimationAndPaintWorkletThread(proxy_client); - std::unique_ptr<WorkerThread> second_worklet = - CreateAnimationAndPaintWorkletThread(proxy_client); - - ASSERT_NE(first_worklet, second_worklet); - - // Register global scopes with proxy client. This step must be performed on - // the worker threads. - WaitableEvent waitable_event; - PostCrossThreadTask( - *first_worklet->GetTaskRunner(TaskType::kInternalTest), FROM_HERE, - CrossThreadBind( - &AnimationWorkletGlobalScopeTest::AddGlobalScopeForTesting, - CrossThreadUnretained(this), - CrossThreadUnretained(first_worklet.get()), - CrossThreadPersistent<AnimationWorkletProxyClient>(proxy_client), - CrossThreadUnretained(&waitable_event))); - waitable_event.Wait(); - - waitable_event.Reset(); - PostCrossThreadTask( - *second_worklet->GetTaskRunner(TaskType::kInternalTest), FROM_HERE, - CrossThreadBind( - &AnimationWorkletGlobalScopeTest::AddGlobalScopeForTesting, - CrossThreadUnretained(this), - CrossThreadUnretained(second_worklet.get()), - CrossThreadPersistent<AnimationWorkletProxyClient>(proxy_client), - CrossThreadUnretained(&waitable_event))); - waitable_event.Wait(); - - AnimationWorkletGlobalScope* stateful_global_scope = - proxy_client->global_scopes_[0]; - AnimationWorkletGlobalScope* first_stateless_global_scope = - proxy_client->global_scopes_[0]; - AnimationWorkletGlobalScope* second_stateless_global_scope = - proxy_client->global_scopes_[1]; - - // Initialize switch countdown to 1, to force a switch in the stateless - // global scope on the second call. - proxy_client->next_global_scope_switch_countdown_ = 1; - EXPECT_EQ(proxy_client->SelectStatefulGlobalScope(), stateful_global_scope); - EXPECT_EQ(proxy_client->SelectStatelessGlobalScope(), - first_stateless_global_scope); - EXPECT_EQ(proxy_client->SelectStatefulGlobalScope(), stateful_global_scope); - EXPECT_EQ(proxy_client->SelectStatelessGlobalScope(), - second_stateless_global_scope); - - // Increase countdown and verify that the switchover adjusts as expected. - proxy_client->next_global_scope_switch_countdown_ = 3; - EXPECT_EQ(proxy_client->SelectStatefulGlobalScope(), stateful_global_scope); - EXPECT_EQ(proxy_client->SelectStatelessGlobalScope(), - second_stateless_global_scope); - EXPECT_EQ(proxy_client->SelectStatefulGlobalScope(), stateful_global_scope); - EXPECT_EQ(proxy_client->SelectStatelessGlobalScope(), - second_stateless_global_scope); - EXPECT_EQ(proxy_client->SelectStatefulGlobalScope(), stateful_global_scope); - EXPECT_EQ(proxy_client->SelectStatelessGlobalScope(), - second_stateless_global_scope); - EXPECT_EQ(proxy_client->SelectStatefulGlobalScope(), stateful_global_scope); - EXPECT_EQ(proxy_client->SelectStatelessGlobalScope(), - first_stateless_global_scope); - - first_worklet->Terminate(); - first_worklet->WaitForShutdownForTesting(); - second_worklet->Terminate(); - second_worklet->WaitForShutdownForTesting(); -} - } // namespace blink
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h index d24f52e6..5e7f9af 100644 --- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h +++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h
@@ -62,11 +62,11 @@ static AnimationWorkletProxyClient* From(WorkerClients*); private: - FRIEND_TEST_ALL_PREFIXES(AnimationWorkletGlobalScopeTest, SelectGlobalScope); FRIEND_TEST_ALL_PREFIXES(AnimationWorkletProxyClientTest, AnimationWorkletProxyClientConstruction); FRIEND_TEST_ALL_PREFIXES(AnimationWorkletProxyClientTest, RegisteredAnimatorNameShouldSyncOnce); + FRIEND_TEST_ALL_PREFIXES(AnimationWorkletProxyClientTest, SelectGlobalScope); // Separate global scope selectors are used instead of overriding // Worklet::SelectGlobalScope since two different selection mechanisms are
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc index 7c6a721..ea58bea 100644 --- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc +++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client_test.cc
@@ -11,6 +11,8 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/renderer/core/testing/core_unit_test_helper.h" +#include "third_party/blink/renderer/core/workers/worker_reporting_proxy.h" +#include "third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h" #include "third_party/blink/renderer/platform/graphics/animation_worklet_mutator_dispatcher_impl.h" namespace blink { @@ -47,11 +49,21 @@ proxy_client_ = MakeGarbageCollected<AnimationWorkletProxyClient>( 1, nullptr, nullptr, mutator->GetWeakPtr(), mutator_task_runner_); mutator_client_ = std::make_unique<MockMutatorClient>(std::move(mutator)); + reporting_proxy_ = std::make_unique<WorkerReportingProxy>(); + } + + void AddGlobalScopeForTesting(WorkerThread* thread, + AnimationWorkletProxyClient* proxy_client, + WaitableEvent* waitable_event) { + proxy_client->AddGlobalScopeForTesting( + To<WorkletGlobalScope>(thread->GlobalScope())); + waitable_event->Signal(); } Persistent<AnimationWorkletProxyClient> proxy_client_; std::unique_ptr<MockMutatorClient> mutator_client_; scoped_refptr<base::TestSimpleTaskRunner> mutator_task_runner_; + std::unique_ptr<WorkerReportingProxy> reporting_proxy_; }; TEST_F(AnimationWorkletProxyClientTest, @@ -94,4 +106,77 @@ mutator_task_runner_->RunUntilIdle(); } +TEST_F(AnimationWorkletProxyClientTest, SelectGlobalScope) { + // Global scopes must be created on worker threads. + std::unique_ptr<WorkerThread> first_worklet = + CreateAnimationAndPaintWorkletThread( + &GetDocument(), reporting_proxy_.get(), proxy_client_); + std::unique_ptr<WorkerThread> second_worklet = + CreateAnimationAndPaintWorkletThread( + &GetDocument(), reporting_proxy_.get(), proxy_client_); + + ASSERT_NE(first_worklet, second_worklet); + + // Register global scopes with proxy client. This step must be performed on + // the worker threads. + WaitableEvent waitable_event; + PostCrossThreadTask( + *first_worklet->GetTaskRunner(TaskType::kInternalTest), FROM_HERE, + CrossThreadBind( + &AnimationWorkletProxyClientTest::AddGlobalScopeForTesting, + CrossThreadUnretained(this), + CrossThreadUnretained(first_worklet.get()), + CrossThreadPersistent<AnimationWorkletProxyClient>(proxy_client_), + CrossThreadUnretained(&waitable_event))); + waitable_event.Wait(); + + waitable_event.Reset(); + PostCrossThreadTask( + *second_worklet->GetTaskRunner(TaskType::kInternalTest), FROM_HERE, + CrossThreadBind( + &AnimationWorkletProxyClientTest::AddGlobalScopeForTesting, + CrossThreadUnretained(this), + CrossThreadUnretained(second_worklet.get()), + CrossThreadPersistent<AnimationWorkletProxyClient>(proxy_client_), + CrossThreadUnretained(&waitable_event))); + waitable_event.Wait(); + + AnimationWorkletGlobalScope* stateful_global_scope = + proxy_client_->global_scopes_[0]; + AnimationWorkletGlobalScope* first_stateless_global_scope = + proxy_client_->global_scopes_[0]; + AnimationWorkletGlobalScope* second_stateless_global_scope = + proxy_client_->global_scopes_[1]; + + // Initialize switch countdown to 1, to force a switch in the stateless + // global scope on the second call. + proxy_client_->next_global_scope_switch_countdown_ = 1; + EXPECT_EQ(proxy_client_->SelectStatefulGlobalScope(), stateful_global_scope); + EXPECT_EQ(proxy_client_->SelectStatelessGlobalScope(), + first_stateless_global_scope); + EXPECT_EQ(proxy_client_->SelectStatefulGlobalScope(), stateful_global_scope); + EXPECT_EQ(proxy_client_->SelectStatelessGlobalScope(), + second_stateless_global_scope); + + // Increase countdown and verify that the switchover adjusts as expected. + proxy_client_->next_global_scope_switch_countdown_ = 3; + EXPECT_EQ(proxy_client_->SelectStatefulGlobalScope(), stateful_global_scope); + EXPECT_EQ(proxy_client_->SelectStatelessGlobalScope(), + second_stateless_global_scope); + EXPECT_EQ(proxy_client_->SelectStatefulGlobalScope(), stateful_global_scope); + EXPECT_EQ(proxy_client_->SelectStatelessGlobalScope(), + second_stateless_global_scope); + EXPECT_EQ(proxy_client_->SelectStatefulGlobalScope(), stateful_global_scope); + EXPECT_EQ(proxy_client_->SelectStatelessGlobalScope(), + second_stateless_global_scope); + EXPECT_EQ(proxy_client_->SelectStatefulGlobalScope(), stateful_global_scope); + EXPECT_EQ(proxy_client_->SelectStatelessGlobalScope(), + first_stateless_global_scope); + + first_worklet->Terminate(); + first_worklet->WaitForShutdownForTesting(); + second_worklet->Terminate(); + second_worklet->WaitForShutdownForTesting(); +} + } // namespace blink
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc b/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc index 10c8aa8..b4f9162 100644 --- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc +++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
@@ -162,6 +162,33 @@ : std::numeric_limits<double>::quiet_NaN(); } +// Calculates start time backwards from the current time and +// timeline.currentTime. +// +// If this is a scroll-linked animation, we always consider start time to be +// zero (i.e., scroll origin). This means the computed start time post this +// calculation may not match the expected current time that was given as input. +// +// Changing this is under consideration here: +// https://github.com/w3c/csswg-drafts/issues/2075 +base::Optional<base::TimeDelta> CalculateStartTime( + base::TimeDelta current_time, + double playback_rate, + AnimationTimeline& timeline) { + if (timeline.IsScrollTimeline()) + return base::TimeDelta(); + + bool is_null; + double time_ms = timeline.currentTime(is_null); + // TODO(majidvp): Make it so that inactive timelines do not reach here + // i.e., we should instead "hold" when timeline is inactive. + // https://crbug.com/924159 + if (is_null) + return base::nullopt; + auto timeline_time = base::TimeDelta::FromMillisecondsD(time_ms); + return timeline_time - (current_time / playback_rate); +} + } // namespace WorkletAnimation* WorkletAnimation::Create( @@ -269,6 +296,17 @@ if (play_state_ == Animation::kPending) return; + if (play_state_ == Animation::kPaused) { + // If we have ever started before then just unpause otherwise we need to + // start the animation. + if (has_started_) { + SetPlayState(Animation::kPending); + SetCurrentTime(CurrentTime()); + InvalidateCompositingState(); + return; + } + } + String failure_message; if (!CheckCanStart(&failure_message)) { exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError, @@ -277,7 +315,11 @@ } document_->GetWorkletAnimationController().AttachAnimation(*this); + // While animation is pending, it hold time at Zero, see: + // https://drafts.csswg.org/web-animations-1/#playing-an-animation-section SetPlayState(Animation::kPending); + SetCurrentTime(base::TimeDelta()); + has_started_ = true; for (auto& effect : effects_) { Element* target = effect->target(); @@ -298,19 +340,42 @@ return ToMilliseconds(current_time); } +double WorkletAnimation::startTime(bool& is_null) { + is_null = !start_time_.has_value(); + return ToMilliseconds(start_time_); +} + +void WorkletAnimation::pause(ExceptionState& exception_state) { + DCHECK(IsMainThread()); + if (play_state_ == Animation::kPaused) + return; + + // If animation is pending it means we have not sent an update to + // compositor. Since we are pausing, immediately start the animation + // which updates start time and marks animation as main thread. + // This ensures we have a valid current time to hold. + if (play_state_ == Animation::kPending) + StartOnMain(); + + // If animation is playing then we should hold the current time + // otherwise hold zero. + base::TimeDelta new_current_time = + Playing() ? CurrentTime().value() : base::TimeDelta(); + SetPlayState(Animation::kPaused); + SetCurrentTime(new_current_time); +} + void WorkletAnimation::cancel() { DCHECK(IsMainThread()); if (play_state_ == Animation::kIdle) return; document_->GetWorkletAnimationController().DetachAnimation(*this); - if (compositor_animation_) { GetEffect()->CancelAnimationOnCompositor(compositor_animation_.get()); DestroyCompositorAnimation(); } - + has_started_ = false; local_times_.Fill(base::nullopt); - start_time_ = base::nullopt; running_on_main_thread_ = false; // TODO(yigu): Because this animation has been detached and will not receive // updates anymore, we have to update its value upon cancel. Similar to @@ -321,6 +386,7 @@ effect->UpdateInheritedTime(NullValue(), kTimingUpdateOnDemand); } SetPlayState(Animation::kIdle); + SetCurrentTime(base::nullopt); for (auto& effect : effects_) { Element* target = effect->target(); @@ -386,23 +452,12 @@ DCHECK(playback_rate); DCHECK(!timeline_->IsScrollTimeline()); - if (start_time_) { - base::Optional<base::TimeDelta> current_time = CurrentTime(); - // TODO(gerchiko): support unresolved current time. - // Blocked by ability to change timeline. - if (current_time) { - // Update startTime in order to maintain previous currentTime and, as a - // result, prevent the animation from jumping. - // See currentTime calculation in CurrentTime(). - bool is_null; - double timeline_time_ms = timeline_->currentTime(is_null); - DCHECK(!is_null); - - start_time_ = base::TimeDelta::FromMillisecondsD(timeline_time_ms) - - current_time.value() / playback_rate; - } - } + base::Optional<base::TimeDelta> previous_current_time = CurrentTime(); playback_rate_ = playback_rate; + // Update startTime in order to maintain previous currentTime and, as a + // result, prevent the animation from jumping. + if (previous_current_time) + SetCurrentTime(previous_current_time); if (Playing()) document_->GetWorkletAnimationController().InvalidateAnimation(*this); @@ -413,11 +468,7 @@ } void WorkletAnimation::Update(TimingUpdateReason reason) { - if (play_state_ != Animation::kRunning) - return; - - // ScrollTimeline animation doesn't require start_time_ to be set. - if (!start_time_ && !timeline_->IsScrollTimeline()) + if (play_state_ != Animation::kRunning && play_state_ != Animation::kPaused) return; DCHECK_EQ(effects_.size(), local_times_.size()); @@ -440,12 +491,25 @@ return true; } -void WorkletAnimation::SetStartTimeToNow() { - DCHECK(!start_time_); - bool is_null; - double time_ms = timeline_->currentTime(is_null); - if (!is_null) - start_time_ = base::TimeDelta::FromMillisecondsD(time_ms); +void WorkletAnimation::SetCurrentTime( + base::Optional<base::TimeDelta> seek_time) { + DCHECK(timeline_); + // The procedure either: + // 1) updates the hold time (for paused animations, non-existent timeline) + // 2) updates the start time (for playing animations) + bool should_hold = play_state_ == Animation::kPaused || !seek_time; + if (should_hold) { + start_time_ = base::nullopt; + hold_time_ = seek_time; + } else { + // TODO(majidvp): Currently when timeline is inactive (e.g., scroll timeline + // whose source is not scrolling), we will end up here but probably we + // should not. In those cases we should hold instead. + // https://crbug.com/924159 + start_time_ = + CalculateStartTime(seek_time.value(), playback_rate_, *timeline_); + hold_time_ = base::nullopt; + } } void WorkletAnimation::UpdateCompositingState() { @@ -478,8 +542,10 @@ void WorkletAnimation::StartOnMain() { running_on_main_thread_ = true; - SetStartTimeToNow(); + // Start from existing current time in case one exists or zero. + base::TimeDelta current_time = CurrentTime().value_or(base::TimeDelta()); SetPlayState(Animation::kRunning); + SetCurrentTime(current_time); } bool WorkletAnimation::StartOnCompositor() { @@ -508,7 +574,6 @@ base::Optional<CompositorElementIdSet>(), playback_rate); if (!failure_code.Ok()) { - SetPlayState(Animation::kIdle); return false; } @@ -539,12 +604,7 @@ // TODO(smcgruer): We need to start all of the effects, not just the first. StartEffectOnCompositor(compositor_animation_.get(), GetEffect()); SetPlayState(Animation::kRunning); - - bool is_null; - double time_ms = timeline_->currentTime(is_null); - if (!is_null) - start_time_ = base::TimeDelta::FromMillisecondsD(time_ms); - + SetCurrentTime(base::TimeDelta()); return true; } @@ -612,11 +672,8 @@ if (play_state_ == Animation::kIdle || play_state_ == Animation::kUnset) return base::nullopt; - // TODO(majidvp): Animation has a hold time while it waits for animation - // to truly start and returns that instead. Replace with with hold time - // once pause logic is implemented. - if (play_state_ == Animation::kPending) - return base::TimeDelta(); + if (hold_time_) + return hold_time_.value(); bool is_null; double timeline_time_ms = timeline_->currentTime(is_null); @@ -625,8 +682,6 @@ base::TimeDelta timeline_time = base::TimeDelta::FromMillisecondsD(timeline_time_ms); - if (timeline_->IsScrollTimeline()) - return timeline_time; DCHECK(start_time_); return (timeline_time - start_time_.value()) * playback_rate_; } @@ -664,8 +719,6 @@ bool was_active = IsActive(last_play_state_); bool is_active = IsActive(play_state_); - // ScrollTimeline animation doesn't require start_time_ to be set. - DCHECK(start_time_ || timeline_->IsScrollTimeline()); base::Optional<base::TimeDelta> current_time = CurrentTime(); double current_time_ms = ToMilliseconds(current_time);
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.h b/third_party/blink/renderer/modules/animationworklet/worklet_animation.h index 6527d08c..b47adc9f 100644 --- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.h +++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.h
@@ -73,9 +73,12 @@ AnimationTimeline* timeline() { return timeline_; } String playState(); double currentTime(bool& is_null); + double startTime(bool& is_null); + double playbackRate(ScriptState* script_state) const; void setPlaybackRate(ScriptState* script_state, double playback_rate); void play(ExceptionState& exception_state); + void pause(ExceptionState& exception_state); void cancel(); // AnimationEffectOwner implementation: @@ -142,7 +145,28 @@ bool StartOnCompositor(); void StartOnMain(); bool CheckCanStart(String* failure_message); - void SetStartTimeToNow(); + + // Sets the current time for the animation. + // + // Note that the current time of the animation is a computed value that + // depends on either the start time (for playing animations) or the hold time + // (for pending, paused, or idle animations). So this procedure updates either + // the start time or the hold time so that the computed current time is + // matched. + // + // The exception to this are scroll-linked animations whose start time is not + // modifiable (always zero) in which case the post setting the current time, + // the computed current time may not match it. + // + // Generally, when an animation play state transitions, we expect to see the + // current time is set. Here are some interesting examples of this: + // - when transitioning to play, the current time is either set to + // zero (first time) or the last current time (when resuming from pause). + // - when transitioning to idle or cancel, the current time is set to + // "null". + // - when transitioning to pause, the current time is set to the last + // current time for holding. + void SetCurrentTime(base::Optional<base::TimeDelta> current_time); // For DocumentTimeline animations, adjusts start_time_ according to playback // rate change to preserve current time and avoid the animation output from @@ -158,6 +182,7 @@ return options_ ? options_->Clone() : nullptr; } + Animation::AnimationPlayState PlayState() const { return play_state_; } void SetPlayState(const Animation::AnimationPlayState& state) { play_state_ = state; } @@ -175,6 +200,9 @@ double playback_rate_; base::Optional<base::TimeDelta> start_time_; Vector<base::Optional<base::TimeDelta>> local_times_; + // Hold time is used when animation is paused. + // TODO(majidvp): Replace base::TimeDelta usage with AnimationTimeDelta. + base::Optional<base::TimeDelta> hold_time_; // We use this to skip updating if current time has not changed since last // update. base::Optional<base::TimeDelta> last_current_time_; @@ -189,12 +217,14 @@ std::unique_ptr<CompositorAnimation> compositor_animation_; bool running_on_main_thread_; - + bool has_started_; // Tracks whether any KeyframeEffect associated with this WorkletAnimation has // been invalidated and needs to be restarted. Used to avoid unnecessarily // restarting the effect on the compositor. When true, a call to // |UpdateOnCompositor| will update the effect on the compositor. bool effect_needs_restart_; + + FRIEND_TEST_ALL_PREFIXES(WorkletAnimationTest, PausePlay); }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl b/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl index 951dbf9..33a09a91 100644 --- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl +++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.idl
@@ -19,7 +19,10 @@ readonly attribute AnimationTimeline? timeline; readonly attribute AnimationPlayState playState; readonly attribute double? currentTime; + readonly attribute double? startTime; + [CallWith=ScriptState] attribute double playbackRate; [RaisesException] void play(); + [RaisesException] void pause(); void cancel(); };
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation_test.cc b/third_party/blink/renderer/modules/animationworklet/worklet_animation_test.cc index bb9ff5e..3e43f039 100644 --- a/third_party/blink/renderer/modules/animationworklet/worklet_animation_test.cc +++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation_test.cc
@@ -57,10 +57,13 @@ scoped_refptr<SerializedScriptValue> options; ScriptState::Scope scope(script_state); - DummyExceptionStateForTesting exception_state; return WorkletAnimation::Create(script_state, animator_name, effects, timeline, std::move(options), - exception_state); + ASSERT_NO_EXCEPTION); +} + +base::TimeDelta ToTimeDelta(double milliseconds) { + return base::TimeDelta::FromMillisecondsD(milliseconds); } } // namespace @@ -83,6 +86,14 @@ CreateWorkletAnimation(GetScriptState(), element_, animator_name_); } + void SimulateFrame(double milliseconds) { + base::TimeTicks tick = base::TimeTicks() + ToTimeDelta(milliseconds); + GetDocument().GetAnimationClock().ResetTimeForTesting(tick); + GetDocument().GetWorkletAnimationController().UpdateAnimationStates(); + GetDocument().GetWorkletAnimationController().UpdateAnimationTimings( + kTimingUpdateForAnimationFrame); + } + ScriptState* GetScriptState() { return ToScriptStateForMainWorld(&GetFrame()); } @@ -93,8 +104,7 @@ }; TEST_F(WorkletAnimationTest, WorkletAnimationInElementAnimations) { - DummyExceptionStateForTesting exception_state; - worklet_animation_->play(exception_state); + worklet_animation_->play(ASSERT_NO_EXCEPTION); EXPECT_EQ(1u, element_->EnsureElementAnimations().GetWorkletAnimations().size()); worklet_animation_->cancel(); @@ -106,8 +116,7 @@ scoped_refptr<ComputedStyle> style = GetDocument().EnsureStyleResolver().StyleForElement(element_).get(); EXPECT_EQ(false, style->HasCurrentOpacityAnimation()); - DummyExceptionStateForTesting exception_state; - worklet_animation_->play(exception_state); + worklet_animation_->play(ASSERT_NO_EXCEPTION); element_->EnsureElementAnimations().UpdateAnimationFlags(*style); EXPECT_EQ(true, style->HasCurrentOpacityAnimation()); } @@ -126,8 +135,7 @@ base::TimeTicks() + base::TimeDelta::FromMillisecondsD(111 + 123.4); GetDocument().GetAnimationClock().ResetTimeForTesting(first_ticks); - DummyExceptionStateForTesting exception_state; - worklet_animation_->play(exception_state); + worklet_animation_->play(ASSERT_NO_EXCEPTION); worklet_animation_->UpdateCompositingState(); std::unique_ptr<AnimationWorkletDispatcherInput> state = @@ -174,8 +182,7 @@ GetScriptState(), element_, animator_name_, scroll_timeline); WorkletAnimationId id = worklet_animation->GetWorkletAnimationId(); - DummyExceptionStateForTesting exception_state; - worklet_animation->play(exception_state); + worklet_animation->play(ASSERT_NO_EXCEPTION); worklet_animation->UpdateCompositingState(); // Only expect precision up to 1 microsecond with an additional smaller @@ -206,8 +213,7 @@ base::TimeTicks() + base::TimeDelta::FromMillisecondsD(111 + 123.4); GetDocument().GetAnimationClock().ResetTimeForTesting(first_ticks); - DummyExceptionStateForTesting exception_state; - worklet_animation_->play(exception_state); + worklet_animation_->play(ASSERT_NO_EXCEPTION); worklet_animation_->UpdateCompositingState(); // Only peek if animation is running on compositor. @@ -340,4 +346,40 @@ EXPECT_NEAR(123.4 + 200.0 * playback_rate, input->updated_animations[0].current_time, error); } + +TEST_F(WorkletAnimationTest, PausePlay) { + double error = + base::TimeDelta::FromMicrosecondsD(1).InMillisecondsF() + 1e-13; + + SimulateFrame(0); + worklet_animation_->play(ASSERT_NO_EXCEPTION); + EXPECT_EQ(Animation::kPending, worklet_animation_->PlayState()); + SimulateFrame(0); + EXPECT_EQ(Animation::kRunning, worklet_animation_->PlayState()); + EXPECT_TRUE(worklet_animation_->Playing()); + EXPECT_NEAR(0, worklet_animation_->CurrentTime().value().InMillisecondsF(), + error); + SimulateFrame(10); + worklet_animation_->pause(ASSERT_NO_EXCEPTION); + EXPECT_EQ(Animation::kPaused, worklet_animation_->PlayState()); + EXPECT_FALSE(worklet_animation_->Playing()); + EXPECT_NEAR(10, worklet_animation_->CurrentTime().value().InMillisecondsF(), + error); + SimulateFrame(20); + EXPECT_EQ(Animation::kPaused, worklet_animation_->PlayState()); + EXPECT_NEAR(10, worklet_animation_->CurrentTime().value().InMillisecondsF(), + error); + worklet_animation_->play(ASSERT_NO_EXCEPTION); + EXPECT_EQ(Animation::kPending, worklet_animation_->PlayState()); + SimulateFrame(20); + EXPECT_EQ(Animation::kRunning, worklet_animation_->PlayState()); + EXPECT_TRUE(worklet_animation_->Playing()); + EXPECT_NEAR(10, worklet_animation_->CurrentTime().value().InMillisecondsF(), + error); + SimulateFrame(30); + EXPECT_EQ(Animation::kRunning, worklet_animation_->PlayState()); + EXPECT_NEAR(20, worklet_animation_->CurrentTime().value().InMillisecondsF(), + error); +} + } // namespace blink
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc index efae8f56..4f62842 100644 --- a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc +++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc
@@ -21,8 +21,8 @@ #include "third_party/blink/renderer/platform/image-decoders/segment_reader.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_request.h" -#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" +#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h" #include "third_party/blink/renderer/platform/weborigin/kurl.h" #include "third_party/blink/renderer/platform/wtf/text/string_impl.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" @@ -164,7 +164,7 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner = Thread::Current()->GetTaskRunner(); - background_scheduler::PostOnBackgroundThread( + worker_pool::PostTask( FROM_HERE, CrossThreadBind( &BackgroundFetchIconLoader::DecodeAndResizeImageOnBackgroundThread,
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc b/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc index de0e7bfb..50dd2f7b 100644 --- a/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc +++ b/third_party/blink/renderer/modules/clipboard/clipboard_promise.cc
@@ -21,9 +21,9 @@ #include "third_party/blink/renderer/platform/cross_thread_functional.h" #include "third_party/blink/renderer/platform/image-decoders/image_decoder.h" #include "third_party/blink/renderer/platform/image-encoders/image_encoder.h" -#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" #include "third_party/blink/renderer/platform/scheduler/public/thread.h" +#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h" #include "third_party/blink/renderer/platform/wtf/functional.h" // And now, a brief note about clipboard permissions. @@ -259,13 +259,13 @@ file_reader_.reset(); if (blob_type == kMimeTypeImagePng) { - background_scheduler::PostOnBackgroundThread( + worker_pool::PostTask( FROM_HERE, CrossThreadBind(&ClipboardPromise::DecodeImageOnBackgroundThread, WrapCrossThreadPersistent(this), GetTaskRunner(), WrapCrossThreadPersistent(array_buffer))); } else if (blob_type == kMimeTypeTextPlain) { - background_scheduler::PostOnBackgroundThread( + worker_pool::PostTask( FROM_HERE, CrossThreadBind(&ClipboardPromise::DecodeTextOnBackgroundThread, WrapCrossThreadPersistent(this), GetTaskRunner(),
diff --git a/third_party/blink/renderer/modules/picture_in_picture/DEPS b/third_party/blink/renderer/modules/picture_in_picture/DEPS index c3389f6..03fe8e3 100644 --- a/third_party/blink/renderer/modules/picture_in_picture/DEPS +++ b/third_party/blink/renderer/modules/picture_in_picture/DEPS
@@ -2,6 +2,5 @@ "-third_party/blink/renderer/modules", "+third_party/blink/renderer/modules/event_modules.h", "+third_party/blink/renderer/modules/event_target_modules.h", - "+third_party/blink/renderer/modules/modules_export.h", "+third_party/blink/renderer/modules/picture_in_picture", ] \ No newline at end of file
diff --git a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.cc b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.cc index 3b96446..3039b1c 100644 --- a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.cc +++ b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.cc
@@ -4,11 +4,7 @@ #include "third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h" -#include <limits> -#include <utility> - #include "base/bind_helpers.h" -#include "services/service_manager/public/cpp/interface_provider.h" #include "third_party/blink/public/common/manifest/web_display_mode.h" #include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom-blink.h" #include "third_party/blink/renderer/core/dom/document.h" @@ -24,14 +20,7 @@ namespace blink { -namespace { - -bool ShouldShowPlayPauseButton(const HTMLVideoElement& element) { - return element.GetLoadType() != WebMediaPlayer::kLoadTypeMediaStream && - element.duration() != std::numeric_limits<double>::infinity(); -} - -} // namespace +PictureInPictureControllerImpl::~PictureInPictureControllerImpl() = default; // static PictureInPictureControllerImpl* PictureInPictureControllerImpl::Create( @@ -99,32 +88,19 @@ void PictureInPictureControllerImpl::EnterPictureInPicture( HTMLVideoElement* element, ScriptPromiseResolver* resolver) { - if (picture_in_picture_element_ == element) { - if (resolver) - resolver->Resolve(picture_in_picture_window_); - + if (picture_in_picture_element_ != element) { + element->enterPictureInPicture( + WTF::Bind(&PictureInPictureControllerImpl::OnEnteredPictureInPicture, + WrapPersistent(this), WrapPersistent(element), + WrapPersistent(resolver))); + // If the media element has already been given custom controls, this will + // ensure that they get set. Otherwise, this will do nothing. + element->SendCustomControlsToPipWindow(); return; } - element->enterPictureInPicture(); - - DCHECK(element->GetWebMediaPlayer()); - - if (!EnsureService()) - return; - - picture_in_picture_service_->StartSession( - element->GetWebMediaPlayer()->GetDelegateId(), - element->GetWebMediaPlayer()->GetSurfaceId(), - element->GetWebMediaPlayer()->NaturalSize(), - ShouldShowPlayPauseButton(*element), - WTF::Bind(&PictureInPictureControllerImpl::OnEnteredPictureInPicture, - WrapPersistent(this), WrapPersistent(element), - WrapPersistent(resolver))); - - // If the media element has already been given custom controls, this will - // ensure that they get set. Otherwise, this will do nothing. - element->SendCustomControlsToPipWindow(); + if (resolver) + resolver->Resolve(picture_in_picture_window_); } void PictureInPictureControllerImpl::OnEnteredPictureInPicture( @@ -136,7 +112,7 @@ resolver->Reject( DOMException::Create(DOMExceptionCode::kInvalidStateError, "")); } - ExitPictureInPicture(element, nullptr); + element->exitPictureInPicture(base::DoNothing()); return; } @@ -156,15 +132,11 @@ event_type_names::kEnterpictureinpicture, WrapPersistent(picture_in_picture_window_.Get()))); - if (!EnsureService()) - return; - - if (delegate_binding_.is_bound()) - delegate_binding_.Close(); - - mojom::blink::PictureInPictureDelegatePtr delegate; - delegate_binding_.Bind(mojo::MakeRequest(&delegate)); - picture_in_picture_service_->SetDelegate(std::move(delegate)); + if (element->GetWebMediaPlayer()) { + element->GetWebMediaPlayer()->RegisterPictureInPictureWindowResizeCallback( + WTF::BindRepeating(&PictureInPictureWindow::OnResize, + WrapPersistent(picture_in_picture_window_.Get()))); + } if (resolver) resolver->Resolve(picture_in_picture_window_); @@ -173,16 +145,9 @@ void PictureInPictureControllerImpl::ExitPictureInPicture( HTMLVideoElement* element, ScriptPromiseResolver* resolver) { - if (element->GetWebMediaPlayer()) - element->GetWebMediaPlayer()->ExitPictureInPicture(); - - if (!EnsureService()) - return; - - picture_in_picture_service_->EndSession( + element->exitPictureInPicture( WTF::Bind(&PictureInPictureControllerImpl::OnExitedPictureInPicture, WrapPersistent(this), WrapPersistent(resolver))); - delegate_binding_.Close(); } void PictureInPictureControllerImpl::SetPictureInPictureCustomControls( @@ -278,6 +243,7 @@ // Auto Picture-in-Picture is allowed only in a PWA window. if (!GetSupplementable()->GetFrame() || + !GetSupplementable()->GetFrame()->View() || GetSupplementable()->GetFrame()->View()->DisplayMode() == WebDisplayMode::kWebDisplayModeBrowser) { return; @@ -308,53 +274,17 @@ } } -void PictureInPictureControllerImpl::ContextDestroyed(Document*) { - picture_in_picture_service_.reset(); - delegate_binding_.Close(); -} - -void PictureInPictureControllerImpl::OnPictureInPictureStateChange() { - DCHECK(picture_in_picture_element_); - DCHECK(picture_in_picture_element_->GetWebMediaPlayer()); - - picture_in_picture_service_->UpdateSession( - picture_in_picture_element_->GetWebMediaPlayer()->GetDelegateId(), - picture_in_picture_element_->GetWebMediaPlayer()->GetSurfaceId(), - picture_in_picture_element_->GetWebMediaPlayer()->NaturalSize(), - ShouldShowPlayPauseButton(*picture_in_picture_element_)); -} - -void PictureInPictureControllerImpl::PictureInPictureWindowSizeChanged( - const blink::WebSize& size) { - if (picture_in_picture_window_) - picture_in_picture_window_->OnResize(size); -} - void PictureInPictureControllerImpl::Trace(blink::Visitor* visitor) { visitor->Trace(picture_in_picture_element_); visitor->Trace(auto_picture_in_picture_elements_); visitor->Trace(picture_in_picture_window_); PictureInPictureController::Trace(visitor); PageVisibilityObserver::Trace(visitor); - DocumentShutdownObserver::Trace(visitor); } PictureInPictureControllerImpl::PictureInPictureControllerImpl( Document& document) : PictureInPictureController(document), - PageVisibilityObserver(document.GetPage()), - delegate_binding_(this) {} - -bool PictureInPictureControllerImpl::EnsureService() { - if (picture_in_picture_service_) - return true; - - if (!GetSupplementable()->GetFrame()) - return false; - - GetSupplementable()->GetFrame()->GetInterfaceProvider().GetInterface( - mojo::MakeRequest(&picture_in_picture_service_)); - return true; -} + PageVisibilityObserver(document.GetPage()) {} } // namespace blink
diff --git a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h index f0e16f1f..af8a3f9 100644 --- a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h +++ b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h
@@ -5,11 +5,8 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PICTURE_IN_PICTURE_PICTURE_IN_PICTURE_CONTROLLER_IMPL_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_PICTURE_IN_PICTURE_PICTURE_IN_PICTURE_CONTROLLER_IMPL_H_ -#include "third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom-blink.h" -#include "third_party/blink/renderer/core/dom/document_shutdown_observer.h" #include "third_party/blink/renderer/core/frame/picture_in_picture_controller.h" #include "third_party/blink/renderer/core/page/page_visibility_observer.h" -#include "third_party/blink/renderer/modules/modules_export.h" namespace blink { @@ -26,17 +23,14 @@ // PictureInPictureControllerImpl instance is associated to a Document. It is // supplement and therefore can be lazy-initiated. Callers should consider // whether they want to instantiate an object when they make a call. -class MODULES_EXPORT PictureInPictureControllerImpl - : public PictureInPictureController, - public PageVisibilityObserver, - public DocumentShutdownObserver, - public blink::mojom::blink::PictureInPictureDelegate { +class PictureInPictureControllerImpl : public PictureInPictureController, + public PageVisibilityObserver { USING_GARBAGE_COLLECTED_MIXIN(PictureInPictureControllerImpl); WTF_MAKE_NONCOPYABLE(PictureInPictureControllerImpl); public: explicit PictureInPictureControllerImpl(Document&); - ~PictureInPictureControllerImpl() override = default; + ~PictureInPictureControllerImpl() override; // Meant to be called internally by PictureInPictureController::From() // through ModulesInitializer. @@ -73,24 +67,12 @@ const std::vector<PictureInPictureControlInfo>&) override; Status IsElementAllowed(const HTMLVideoElement&) const override; bool IsPictureInPictureElement(const Element*) const override; - void OnPictureInPictureStateChange() override; - // Implementation of PictureInPictureDelegate. - void PictureInPictureWindowSizeChanged(const blink::WebSize&) override; - - // Implementation of PageVisibilityObserver. + // PageVisibilityObserver implementation. void PageVisibilityChanged() override; - // Implementation of DocumentShutdownObserver. - void ContextDestroyed(Document*) override; - void Trace(blink::Visitor*) override; - mojo::Binding<mojom::blink::PictureInPictureDelegate>& - GetDelegateBindingForTesting() { - return delegate_binding_; - } - private: void OnEnteredPictureInPicture(HTMLVideoElement*, ScriptPromiseResolver*, @@ -98,10 +80,6 @@ void OnExitedPictureInPicture(ScriptPromiseResolver*) override; void OnPictureInPictureControlClicked(const WebString& control_id) override; - // Makes sure the `picture_in_picture_service_` is set. Returns whether it was - // initialized successfully. - bool EnsureService(); - // The Picture-in-Picture element for the associated document. Member<HTMLVideoElement> picture_in_picture_element_; @@ -111,12 +89,6 @@ // The Picture-in-Picture window for the associated document. Member<PictureInPictureWindow> picture_in_picture_window_; - - // Mojo bindings for the delegate interface implemented by |this|. - mojo::Binding<mojom::blink::PictureInPictureDelegate> delegate_binding_; - - // Picture-in-Picture service living in the browser process. - mojom::blink::PictureInPictureServicePtr picture_in_picture_service_; }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_test.cc b/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_test.cc deleted file mode 100644 index 05239c5..0000000 --- a/third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_test.cc +++ /dev/null
@@ -1,321 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_controller_impl.h" - -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom-blink.h" -#include "third_party/blink/public/platform/web_media_stream.h" -#include "third_party/blink/public/platform/web_media_stream_track.h" -#include "third_party/blink/renderer/core/dom/events/event.h" -#include "third_party/blink/renderer/core/dom/events/native_event_listener.h" -#include "third_party/blink/renderer/core/html/media/html_media_test_helper.h" -#include "third_party/blink/renderer/core/html/media/html_video_element.h" -#include "third_party/blink/renderer/core/testing/page_test_base.h" -#include "third_party/blink/renderer/platform/testing/empty_web_media_player.h" -#include "third_party/blink/renderer/platform/testing/unit_test_helpers.h" - -using ::testing::_; - -namespace blink { - -// The MockPictureInPictureService implements the PictureInPicture service in -// the same process as the test and guarantees that the callbacks are called in -// order for the events to be fired. -class MockPictureInPictureService - : public mojom::blink::PictureInPictureService { - public: - MockPictureInPictureService() : binding_(this) { - // Setup default implementations. - ON_CALL(*this, StartSession(_, _, _, _, _)) - .WillByDefault([](uint32_t, const base::Optional<viz::SurfaceId>&, - const blink::WebSize&, bool, - StartSessionCallback callback) { - std::move(callback).Run(WebSize()); - }); - ON_CALL(*this, EndSession(_)) - .WillByDefault( - [](EndSessionCallback callback) { std::move(callback).Run(); }); - } - ~MockPictureInPictureService() override = default; - - void Bind(mojo::ScopedMessagePipeHandle handle) { - binding_.Bind( - mojom::blink::PictureInPictureServiceRequest(std::move(handle))); - } - - MOCK_METHOD5(StartSession, - void(uint32_t, - const base::Optional<viz::SurfaceId>&, - const blink::WebSize&, - bool, - StartSessionCallback)); - MOCK_METHOD1(EndSession, void(EndSessionCallback)); - MOCK_METHOD4(UpdateSession, - void(uint32_t, - const base::Optional<viz::SurfaceId>&, - const blink::WebSize&, - bool)); - MOCK_METHOD1(SetDelegate, void(mojom::blink::PictureInPictureDelegatePtr)); - - private: - mojo::Binding<mojom::blink::PictureInPictureService> binding_; - - DISALLOW_COPY_AND_ASSIGN(MockPictureInPictureService); -}; - -// Helper class that will block running the test until the given event is fired -// on the given element. -class WaitForEvent : public NativeEventListener { - public: - static WaitForEvent* Create(Element* element, const AtomicString& name) { - return MakeGarbageCollected<WaitForEvent>(element, name); - } - - WaitForEvent(Element* element, const AtomicString& name) - : element_(element), name_(name) { - element_->addEventListener(name_, this); - run_loop_.Run(); - } - - void Invoke(ExecutionContext*, Event*) final { - run_loop_.Quit(); - element_->removeEventListener(name_, this); - } - - void Trace(Visitor* visitor) final { - NativeEventListener::Trace(visitor); - visitor->Trace(element_); - } - - private: - base::RunLoop run_loop_; - Member<Element> element_; - AtomicString name_; -}; - -class PictureInPictureControllerFrameClient - : public test::MediaStubLocalFrameClient { - public: - static PictureInPictureControllerFrameClient* Create( - std::unique_ptr<WebMediaPlayer> player) { - return MakeGarbageCollected<PictureInPictureControllerFrameClient>( - std::move(player)); - } - - explicit PictureInPictureControllerFrameClient( - std::unique_ptr<WebMediaPlayer> player) - : test::MediaStubLocalFrameClient(std::move(player)), - interface_provider_(new service_manager::InterfaceProvider()) {} - - service_manager::InterfaceProvider* GetInterfaceProvider() override { - return interface_provider_.get(); - } - - private: - std::unique_ptr<service_manager::InterfaceProvider> interface_provider_; - - DISALLOW_COPY_AND_ASSIGN(PictureInPictureControllerFrameClient); -}; - -// TODO: can probably be removed. -class PictureInPictureControllerPlayer : public EmptyWebMediaPlayer { - public: - PictureInPictureControllerPlayer() = default; - ~PictureInPictureControllerPlayer() final = default; - - double Duration() const final { - if (infinity_duration_) - return std::numeric_limits<double>::infinity(); - return EmptyWebMediaPlayer::Duration(); - } - - void set_infinity_duration(bool value) { infinity_duration_ = value; } - - private: - bool infinity_duration_ = false; - - DISALLOW_COPY_AND_ASSIGN(PictureInPictureControllerPlayer); -}; - -class PictureInPictureControllerTest : public PageTestBase { - public: - void SetUp() override { - PageTestBase::SetupPageWithClients( - nullptr, PictureInPictureControllerFrameClient::Create( - std::make_unique<PictureInPictureControllerPlayer>())); - - service_manager::InterfaceProvider::TestApi test_api( - GetFrame().Client()->GetInterfaceProvider()); - test_api.SetBinderForName( - mojom::blink::PictureInPictureService::Name_, - WTF::BindRepeating(&MockPictureInPictureService::Bind, - WTF::Unretained(&mock_service_))); - - video_ = HTMLVideoElement::Create(GetDocument()); - layer_ = cc::Layer::Create(); - video_->SetCcLayerForTesting(layer_.get()); - - std::string test_name = - testing::UnitTest::GetInstance()->current_test_info()->name(); - if (test_name.find("MediaSource") != std::string::npos) { - blink::WebMediaStream web_media_stream; - blink::WebVector<blink::WebMediaStreamTrack> dummy_tracks; - web_media_stream.Initialize(dummy_tracks, dummy_tracks); - Video()->SetSrcObject(web_media_stream); - } else { - video_->SetSrc("http://example.com/foo.mp4"); - } - - test::RunPendingTasks(); - } - - HTMLVideoElement* Video() const { return video_.Get(); } - MockPictureInPictureService& Service() { return mock_service_; } - - private: - Persistent<HTMLVideoElement> video_; - MockPictureInPictureService mock_service_; - scoped_refptr<cc::Layer> layer_; -}; - -TEST_F(PictureInPictureControllerTest, EnterPictureInPictureFiresEvent) { - EXPECT_EQ(nullptr, PictureInPictureControllerImpl::From(GetDocument()) - .PictureInPictureElement()); - - WebMediaPlayer* player = Video()->GetWebMediaPlayer(); - EXPECT_CALL(Service(), - StartSession(player->GetDelegateId(), player->GetSurfaceId(), - player->NaturalSize(), true, _)); - EXPECT_CALL(Service(), SetDelegate(_)); - - PictureInPictureControllerImpl::From(GetDocument()) - .EnterPictureInPicture(Video(), nullptr); - - WaitForEvent::Create(Video(), event_type_names::kEnterpictureinpicture); - - EXPECT_NE(nullptr, PictureInPictureControllerImpl::From(GetDocument()) - .PictureInPictureElement()); - - // `SetDelegate()` may or may not have been called yet. Waiting a bit for it. - test::RunPendingTasks(); -} - -TEST_F(PictureInPictureControllerTest, ExitPictureInPictureFiresEvent) { - EXPECT_EQ(nullptr, PictureInPictureControllerImpl::From(GetDocument()) - .PictureInPictureElement()); - - WebMediaPlayer* player = Video()->GetWebMediaPlayer(); - EXPECT_CALL(Service(), - StartSession(player->GetDelegateId(), player->GetSurfaceId(), - player->NaturalSize(), true, _)); - EXPECT_CALL(Service(), EndSession(_)); - EXPECT_CALL(Service(), SetDelegate(_)); - - PictureInPictureControllerImpl::From(GetDocument()) - .EnterPictureInPicture(Video(), nullptr); - WaitForEvent::Create(Video(), event_type_names::kEnterpictureinpicture); - - PictureInPictureControllerImpl::From(GetDocument()) - .ExitPictureInPicture(Video(), nullptr); - WaitForEvent::Create(Video(), event_type_names::kLeavepictureinpicture); - - EXPECT_EQ(nullptr, PictureInPictureControllerImpl::From(GetDocument()) - .PictureInPictureElement()); -} - -TEST_F(PictureInPictureControllerTest, StartObserving) { - EXPECT_FALSE(PictureInPictureControllerImpl::From(GetDocument()) - .GetDelegateBindingForTesting() - .is_bound()); - - WebMediaPlayer* player = Video()->GetWebMediaPlayer(); - EXPECT_CALL(Service(), - StartSession(player->GetDelegateId(), player->GetSurfaceId(), - player->NaturalSize(), true, _)); - EXPECT_CALL(Service(), SetDelegate(_)); - - PictureInPictureControllerImpl::From(GetDocument()) - .EnterPictureInPicture(Video(), nullptr); - - WaitForEvent::Create(Video(), event_type_names::kEnterpictureinpicture); - - EXPECT_TRUE(PictureInPictureControllerImpl::From(GetDocument()) - .GetDelegateBindingForTesting() - .is_bound()); - - // `SetDelegate()` may or may not have been called yet. Waiting a bit for it. - test::RunPendingTasks(); -} - -TEST_F(PictureInPictureControllerTest, StopObserving) { - EXPECT_FALSE(PictureInPictureControllerImpl::From(GetDocument()) - .GetDelegateBindingForTesting() - .is_bound()); - - WebMediaPlayer* player = Video()->GetWebMediaPlayer(); - EXPECT_CALL(Service(), - StartSession(player->GetDelegateId(), player->GetSurfaceId(), - player->NaturalSize(), true, _)); - EXPECT_CALL(Service(), EndSession(_)); - EXPECT_CALL(Service(), SetDelegate(_)); - - PictureInPictureControllerImpl::From(GetDocument()) - .EnterPictureInPicture(Video(), nullptr); - WaitForEvent::Create(Video(), event_type_names::kEnterpictureinpicture); - - PictureInPictureControllerImpl::From(GetDocument()) - .ExitPictureInPicture(Video(), nullptr); - WaitForEvent::Create(Video(), event_type_names::kLeavepictureinpicture); - - EXPECT_FALSE(PictureInPictureControllerImpl::From(GetDocument()) - .GetDelegateBindingForTesting() - .is_bound()); -} - -TEST_F(PictureInPictureControllerTest, PlayPauseButton_InfiniteDuration) { - EXPECT_EQ(nullptr, PictureInPictureControllerImpl::From(GetDocument()) - .PictureInPictureElement()); - - Video()->DurationChanged(std::numeric_limits<double>::infinity(), false); - - WebMediaPlayer* player = Video()->GetWebMediaPlayer(); - EXPECT_CALL(Service(), - StartSession(player->GetDelegateId(), player->GetSurfaceId(), - player->NaturalSize(), false, _)); - EXPECT_CALL(Service(), SetDelegate(_)); - - PictureInPictureControllerImpl::From(GetDocument()) - .EnterPictureInPicture(Video(), nullptr); - - WaitForEvent::Create(Video(), event_type_names::kEnterpictureinpicture); - - // `SetDelegate()` may or may not have been called yet. Waiting a bit for it. - test::RunPendingTasks(); -} - -TEST_F(PictureInPictureControllerTest, PlayPauseButton_MediaSource) { - EXPECT_EQ(nullptr, PictureInPictureControllerImpl::From(GetDocument()) - .PictureInPictureElement()); - - // The test automatically setup the WebMediaPlayer with a MediaSource based on - // the test name. - - WebMediaPlayer* player = Video()->GetWebMediaPlayer(); - EXPECT_CALL(Service(), - StartSession(player->GetDelegateId(), player->GetSurfaceId(), - player->NaturalSize(), false, _)); - EXPECT_CALL(Service(), SetDelegate(_)); - - PictureInPictureControllerImpl::From(GetDocument()) - .EnterPictureInPicture(Video(), nullptr); - - WaitForEvent::Create(Video(), event_type_names::kEnterpictureinpicture); - - // `SetDelegate()` may or may not have been called yet. Waiting a bit for it. - test::RunPendingTasks(); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc b/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc index 08554e4..54aa151 100644 --- a/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc +++ b/third_party/blink/renderer/modules/webaudio/async_audio_decoder.cc
@@ -33,9 +33,9 @@ #include "third_party/blink/renderer/platform/audio/audio_bus.h" #include "third_party/blink/renderer/platform/audio/audio_file_reader.h" #include "third_party/blink/renderer/platform/cross_thread_functional.h" -#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" #include "third_party/blink/renderer/platform/scheduler/public/thread.h" +#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h" namespace blink { @@ -55,7 +55,7 @@ context->GetExecutionContext()->GetTaskRunner( blink::TaskType::kInternalMedia); - background_scheduler::PostOnBackgroundThread( + worker_pool::PostTask( FROM_HERE, CrossThreadBind(&AsyncAudioDecoder::DecodeOnBackgroundThread, WrapCrossThreadPersistent(audio_data), sample_rate,
diff --git a/third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread_test.cc b/third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread_test.cc index 1c54add..e692189 100644 --- a/third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread_test.cc +++ b/third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread_test.cc
@@ -14,11 +14,8 @@ #include "third_party/blink/renderer/bindings/core/v8/v8_gc_controller.h" #include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h" #include "third_party/blink/renderer/core/inspector/console_message.h" -#include "third_party/blink/renderer/core/inspector/worker_devtools_params.h" -#include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h" #include "third_party/blink/renderer/core/script/script.h" #include "third_party/blink/renderer/core/testing/page_test_base.h" -#include "third_party/blink/renderer/core/workers/global_scope_creation_params.h" #include "third_party/blink/renderer/core/workers/parent_execution_context_task_runners.h" #include "third_party/blink/renderer/core/workers/worker_backing_thread.h" #include "third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.h" @@ -26,6 +23,7 @@ #include "third_party/blink/renderer/core/workers/worklet_module_responses_map.h" #include "third_party/blink/renderer/core/workers/worklet_thread_holder.h" #include "third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h" +#include "third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h" #include "third_party/blink/renderer/platform/cross_thread_functional.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h" #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h" @@ -55,33 +53,6 @@ reporting_proxy_ = std::make_unique<WorkerReportingProxy>(); } - std::unique_ptr<AnimationAndPaintWorkletThread> - CreateAnimationAndPaintWorkletThread() { - WorkerClients* clients = WorkerClients::Create(); - ProvideAnimationWorkletProxyClientTo( - clients, MakeGarbageCollected<TestAnimationWorkletProxyClient>()); - - std::unique_ptr<AnimationAndPaintWorkletThread> thread = - AnimationAndPaintWorkletThread::CreateForAnimationWorklet( - *reporting_proxy_); - Document* document = &GetDocument(); - thread->Start( - std::make_unique<GlobalScopeCreationParams>( - document->Url(), mojom::ScriptType::kModule, - OffMainThreadWorkerScriptFetchOption::kEnabled, - document->UserAgent(), nullptr /* web_worker_fetch_context */, - Vector<CSPHeaderAndType>(), document->GetReferrerPolicy(), - document->GetSecurityOrigin(), document->IsSecureContext(), - document->GetHttpsState(), clients, document->AddressSpace(), - OriginTrialContext::GetTokens(document).get(), - base::UnguessableToken::Create(), nullptr /* worker_settings */, - kV8CacheOptionsDefault, - MakeGarbageCollected<WorkletModuleResponsesMap>()), - base::nullopt, std::make_unique<WorkerDevToolsParams>(), - ParentExecutionContextTaskRunners::Create()); - return thread; - } - // Attempts to run some simple script for |thread|. void CheckWorkletCanExecuteScript(WorkerThread* thread) { std::unique_ptr<WaitableEvent> wait_event = @@ -95,6 +66,8 @@ wait_event->Wait(); } + std::unique_ptr<WorkerReportingProxy> reporting_proxy_; + private: void ExecuteScriptInWorklet(WorkerThread* thread, WaitableEvent* wait_event) { ScriptState* script_state = @@ -113,13 +86,12 @@ EXPECT_TRUE(value.IsEmpty()); wait_event->Signal(); } - - std::unique_ptr<WorkerReportingProxy> reporting_proxy_; }; TEST_F(AnimationAndPaintWorkletThreadTest, Basic) { std::unique_ptr<AnimationAndPaintWorkletThread> worklet = - CreateAnimationAndPaintWorkletThread(); + CreateAnimationAndPaintWorkletThread(&GetDocument(), + reporting_proxy_.get()); CheckWorkletCanExecuteScript(worklet.get()); worklet->Terminate(); worklet->WaitForShutdownForTesting(); @@ -130,7 +102,8 @@ TEST_F(AnimationAndPaintWorkletThreadTest, CreateSecondAndTerminateFirst) { // Create the first worklet and wait until it is initialized. std::unique_ptr<AnimationAndPaintWorkletThread> first_worklet = - CreateAnimationAndPaintWorkletThread(); + CreateAnimationAndPaintWorkletThread(&GetDocument(), + reporting_proxy_.get()); WebThreadSupportingGC* first_thread = &first_worklet->GetWorkerBackingThread().BackingThread(); CheckWorkletCanExecuteScript(first_worklet.get()); @@ -139,7 +112,8 @@ // Create the second worklet and immediately destroy the first worklet. std::unique_ptr<AnimationAndPaintWorkletThread> second_worklet = - CreateAnimationAndPaintWorkletThread(); + CreateAnimationAndPaintWorkletThread(&GetDocument(), + reporting_proxy_.get()); // We don't use terminateAndWait here to avoid forcible termination. first_worklet->Terminate(); first_worklet->WaitForShutdownForTesting(); @@ -166,7 +140,8 @@ TEST_F(AnimationAndPaintWorkletThreadTest, TerminateFirstAndCreateSecond) { // Create the first worklet, wait until it is initialized, and terminate it. std::unique_ptr<AnimationAndPaintWorkletThread> worklet = - CreateAnimationAndPaintWorkletThread(); + CreateAnimationAndPaintWorkletThread(&GetDocument(), + reporting_proxy_.get()); WebThreadSupportingGC* first_thread = &worklet->GetWorkerBackingThread().BackingThread(); CheckWorkletCanExecuteScript(worklet.get()); @@ -176,7 +151,8 @@ worklet->WaitForShutdownForTesting(); // Create the second worklet. The backing thread is same. - worklet = CreateAnimationAndPaintWorkletThread(); + worklet = CreateAnimationAndPaintWorkletThread(&GetDocument(), + reporting_proxy_.get()); WebThreadSupportingGC* second_thread = &worklet->GetWorkerBackingThread().BackingThread(); EXPECT_EQ(first_thread, second_thread); @@ -191,7 +167,8 @@ TEST_F(AnimationAndPaintWorkletThreadTest, CreatingSecondDuringTerminationOfFirst) { std::unique_ptr<AnimationAndPaintWorkletThread> first_worklet = - CreateAnimationAndPaintWorkletThread(); + CreateAnimationAndPaintWorkletThread(&GetDocument(), + reporting_proxy_.get()); CheckWorkletCanExecuteScript(first_worklet.get()); v8::Isolate* first_isolate = first_worklet->GetIsolate(); ASSERT_TRUE(first_isolate); @@ -204,7 +181,8 @@ // on the worklet thread so quickly. This could be a source of flakiness. std::unique_ptr<AnimationAndPaintWorkletThread> second_worklet = - CreateAnimationAndPaintWorkletThread(); + CreateAnimationAndPaintWorkletThread(&GetDocument(), + reporting_proxy_.get()); v8::Isolate* second_isolate = second_worklet->GetIsolate(); ASSERT_TRUE(second_isolate); @@ -225,14 +203,16 @@ AnimationAndPaintWorkletThread::GetWorkletThreadHolderForTesting()); std::unique_ptr<AnimationAndPaintWorkletThread> worklet = - CreateAnimationAndPaintWorkletThread(); + CreateAnimationAndPaintWorkletThread(&GetDocument(), + reporting_proxy_.get()); ASSERT_TRUE(worklet.get()); WorkletThreadHolder<AnimationAndPaintWorkletThread>* holder = AnimationAndPaintWorkletThread::GetWorkletThreadHolderForTesting(); EXPECT_TRUE(holder); std::unique_ptr<AnimationAndPaintWorkletThread> worklet2 = - CreateAnimationAndPaintWorkletThread(); + CreateAnimationAndPaintWorkletThread(&GetDocument(), + reporting_proxy_.get()); ASSERT_TRUE(worklet2.get()); WorkletThreadHolder<AnimationAndPaintWorkletThread>* holder2 = AnimationAndPaintWorkletThread::GetWorkletThreadHolderForTesting(); @@ -251,7 +231,8 @@ AnimationAndPaintWorkletThread::GetWorkletThreadHolderForTesting()); std::unique_ptr<AnimationAndPaintWorkletThread> worklet3 = - CreateAnimationAndPaintWorkletThread(); + CreateAnimationAndPaintWorkletThread(&GetDocument(), + reporting_proxy_.get()); ASSERT_TRUE(worklet3.get()); EXPECT_TRUE( AnimationAndPaintWorkletThread::GetWorkletThreadHolderForTesting());
diff --git a/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.cc b/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.cc new file mode 100644 index 0000000..c83a2234 --- /dev/null +++ b/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.cc
@@ -0,0 +1,55 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h" + +#include "third_party/blink/public/mojom/script/script_type.mojom-blink.h" +#include "third_party/blink/renderer/core/dom/document.h" +#include "third_party/blink/renderer/core/inspector/worker_devtools_params.h" +#include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h" +#include "third_party/blink/renderer/core/testing/page_test_base.h" +#include "third_party/blink/renderer/core/workers/global_scope_creation_params.h" +#include "third_party/blink/renderer/core/workers/worker_reporting_proxy.h" +#include "third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.h" + +namespace blink { + +std::unique_ptr<AnimationAndPaintWorkletThread> +CreateAnimationAndPaintWorkletThread( + Document* document, + WorkerReportingProxy* reporting_proxy, + AnimationWorkletProxyClient* proxy_client) { + std::unique_ptr<AnimationAndPaintWorkletThread> thread = + AnimationAndPaintWorkletThread::CreateForAnimationWorklet( + *reporting_proxy); + + if (!proxy_client) { + proxy_client = MakeGarbageCollected<AnimationWorkletProxyClient>( + 1, nullptr, /* mutator_dispatcher */ + nullptr, /* mutator_runner */ + nullptr, /* mutator_dispatcher */ + nullptr /* mutator_runner */ + ); + } + WorkerClients* clients = WorkerClients::Create(); + ProvideAnimationWorkletProxyClientTo(clients, proxy_client); + + thread->Start( + std::make_unique<GlobalScopeCreationParams>( + document->Url(), mojom::ScriptType::kModule, + OffMainThreadWorkerScriptFetchOption::kEnabled, document->UserAgent(), + nullptr /* web_worker_fetch_context */, Vector<CSPHeaderAndType>(), + document->GetReferrerPolicy(), document->GetSecurityOrigin(), + document->IsSecureContext(), document->GetHttpsState(), clients, + document->AddressSpace(), + OriginTrialContext::GetTokens(document).get(), + base::UnguessableToken::Create(), nullptr /* worker_settings */, + kV8CacheOptionsDefault, + MakeGarbageCollected<WorkletModuleResponsesMap>()), + base::nullopt, std::make_unique<WorkerDevToolsParams>(), + ParentExecutionContextTaskRunners::Create()); + return thread; +} + +} // namespace blink
diff --git a/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h b/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h new file mode 100644 index 0000000..4b50361 --- /dev/null +++ b/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.h
@@ -0,0 +1,25 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WORKLET_WORKLET_THREAD_TEST_COMMON_H_ +#define THIRD_PARTY_BLINK_RENDERER_MODULES_WORKLET_WORKLET_THREAD_TEST_COMMON_H_ + +#include <memory> + +#include "third_party/blink/renderer/modules/worklet/animation_and_paint_worklet_thread.h" + +namespace blink { + +class AnimationWorkletProxyClient; +class Document; +class WorkerReportingProxy; + +std::unique_ptr<AnimationAndPaintWorkletThread> +CreateAnimationAndPaintWorkletThread(Document*, + WorkerReportingProxy*, + AnimationWorkletProxyClient* = nullptr); + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_WORKLET_WORKLET_THREAD_TEST_COMMON_H_
diff --git a/third_party/blink/renderer/platform/bindings/parkable_string.cc b/third_party/blink/renderer/platform/bindings/parkable_string.cc index 976b5d4..1bac8ed 100644 --- a/third_party/blink/renderer/platform/bindings/parkable_string.cc +++ b/third_party/blink/renderer/platform/bindings/parkable_string.cc
@@ -16,9 +16,9 @@ #include "third_party/blink/renderer/platform/bindings/parkable_string_manager.h" #include "third_party/blink/renderer/platform/cross_thread_functional.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/web_process_memory_dump.h" -#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" #include "third_party/blink/renderer/platform/scheduler/public/thread.h" +#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h" #include "third_party/blink/renderer/platform/wtf/address_sanitizer.h" #include "third_party/blink/renderer/platform/wtf/allocator/partitions.h" #include "third_party/blink/renderer/platform/wtf/thread_specific.h" @@ -345,7 +345,7 @@ auto params = std::make_unique<CompressionTaskParams>( this, string_.Bytes(), string_.CharactersSizeInBytes(), Thread::Current()->GetTaskRunner()); - background_scheduler::PostOnBackgroundThread( + worker_pool::PostTask( FROM_HERE, CrossThreadBind(&ParkableStringImpl::CompressInBackground, WTF::Passed(std::move(params)))); state_ = State::kParkingInProgress;
diff --git a/third_party/blink/renderer/platform/scheduler/BUILD.gn b/third_party/blink/renderer/platform/scheduler/BUILD.gn index 71b4d17..f6c0510 100644 --- a/third_party/blink/renderer/platform/scheduler/BUILD.gn +++ b/third_party/blink/renderer/platform/scheduler/BUILD.gn
@@ -9,7 +9,6 @@ blink_platform_sources("scheduler") { sources = [ - "common/background_scheduler.cc", "common/cancelable_closure_holder.cc", "common/cancelable_closure_holder.h", "common/features.cc", @@ -56,6 +55,7 @@ "common/unprioritized_resource_loading_task_runner_handle.h", "common/web_resource_loading_task_runner_handle.cc", "common/web_thread_scheduler.cc", + "common/worker_pool.cc", "main_thread/auto_advancing_virtual_time_domain.cc", "main_thread/auto_advancing_virtual_time_domain.h", "main_thread/deadline_task_runner.cc", @@ -101,7 +101,6 @@ "main_thread/web_render_widget_scheduling_state.cc", "main_thread/web_scoped_virtual_time_pauser.cc", "public/aggregated_metric_reporter.h", - "public/background_scheduler.h", "public/frame_or_worker_scheduler.h", "public/frame_scheduler.h", "public/frame_status.h", @@ -114,6 +113,7 @@ "public/thread.h", "public/thread_cpu_throttler.h", "public/thread_scheduler.h", + "public/worker_pool.h", "public/worker_scheduler.h", "worker/compositor_metrics_helper.cc", "worker/compositor_metrics_helper.h", @@ -178,7 +178,6 @@ testonly = true sources = [ - "common/background_scheduler_unittest.cc", "common/idle_helper_unittest.cc", "common/idle_memory_reclaimer_unittest.cc", "common/metrics_helper_unittest.cc", @@ -188,6 +187,7 @@ "common/throttling/budget_pool_unittest.cc", "common/throttling/task_queue_throttler_unittest.cc", "common/tracing_helper_unittest.cc", + "common/worker_pool_unittest.cc", "main_thread/auto_advancing_virtual_time_domain_unittest.cc", "main_thread/deadline_task_runner_unittest.cc", "main_thread/frame_scheduler_impl_unittest.cc",
diff --git a/third_party/blink/renderer/platform/scheduler/TaskSchedulingInBlink.md b/third_party/blink/renderer/platform/scheduler/TaskSchedulingInBlink.md index f97d2a4..c46763c 100644 --- a/third_party/blink/renderer/platform/scheduler/TaskSchedulingInBlink.md +++ b/third_party/blink/renderer/platform/scheduler/TaskSchedulingInBlink.md
@@ -151,13 +151,15 @@ ## Off-main thread scheduling If your task doesn’t have to run on the main thread, use -BackgroundScheduler::PostOnBackgroundThread, which uses a thread pool +worker_pool::PostTask, which uses a thread pool behind the scenes. Do not create your own dedicated thread if you need ordering for your tasks, -use BackgroundScheduler::CreateBackgroundTaskRunnerWithTraits instead — +use worker_pool::CreateTaskRunnerWithTraits instead — this creates a sequence (virtual thread which can run tasks in order on any of the threads in the thread pool). +(Note: this doesn't exist yet because we haven't encountered a use case in Blink +which needs it. If you need one, please task to scheduler-dev@ and we'll add it). See [threading and tasks](../../../../../docs/threading_and_tasks.md) for more details.
diff --git a/third_party/blink/renderer/platform/scheduler/common/background_scheduler.cc b/third_party/blink/renderer/platform/scheduler/common/background_scheduler.cc deleted file mode 100644 index 0085fd2..0000000 --- a/third_party/blink/renderer/platform/scheduler/common/background_scheduler.cc +++ /dev/null
@@ -1,30 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h" - -#include "base/location.h" -#include "base/task/post_task.h" - -namespace blink { - -namespace background_scheduler { - -void PostOnBackgroundThread(const base::Location& location, - CrossThreadClosure closure) { - PostOnBackgroundThreadWithTraits( - location, {base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, - std::move(closure)); -} - -void PostOnBackgroundThreadWithTraits(const base::Location& location, - const base::TaskTraits& traits, - CrossThreadClosure closure) { - base::PostTaskWithTraits(location, traits, - ConvertToBaseCallback(std::move(closure))); -} - -} // namespace background_scheduler - -} // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc b/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc new file mode 100644 index 0000000..f272ee6 --- /dev/null +++ b/third_party/blink/renderer/platform/scheduler/common/worker_pool.cc
@@ -0,0 +1,29 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h" + +#include "base/location.h" +#include "base/task/post_task.h" + +namespace blink { + +namespace worker_pool { + +void PostTask(const base::Location& location, CrossThreadClosure closure) { + PostTaskWithTraits(location, + {base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, + std::move(closure)); +} + +void PostTaskWithTraits(const base::Location& location, + const base::TaskTraits& traits, + CrossThreadClosure closure) { + base::PostTaskWithTraits(location, traits, + ConvertToBaseCallback(std::move(closure))); +} + +} // namespace worker_pool + +} // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/common/background_scheduler_unittest.cc b/third_party/blink/renderer/platform/scheduler/common/worker_pool_unittest.cc similarity index 87% rename from third_party/blink/renderer/platform/scheduler/common/background_scheduler_unittest.cc rename to third_party/blink/renderer/platform/scheduler/common/worker_pool_unittest.cc index bcd2372cd..e3fe93f 100644 --- a/third_party/blink/renderer/platform/scheduler/common/background_scheduler_unittest.cc +++ b/third_party/blink/renderer/platform/scheduler/common/worker_pool_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h" +#include "third_party/blink/renderer/platform/scheduler/public/worker_pool.h" #include <memory> #include "base/location.h" @@ -24,7 +24,7 @@ TEST(BackgroundSchedulerTest, RunOnBackgroundThread) { base::test::ScopedTaskEnvironment scoped_task_environment; std::unique_ptr<WaitableEvent> done_event = std::make_unique<WaitableEvent>(); - background_scheduler::PostOnBackgroundThread( + worker_pool::PostTask( FROM_HERE, CrossThreadBind(&PingPongTask, CrossThreadUnretained(done_event.get()))); // Test passes by not hanging on the following wait().
diff --git a/third_party/blink/renderer/platform/scheduler/public/background_scheduler.h b/third_party/blink/renderer/platform/scheduler/public/background_scheduler.h deleted file mode 100644 index f11c9446..0000000 --- a/third_party/blink/renderer/platform/scheduler/public/background_scheduler.h +++ /dev/null
@@ -1,38 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_BACKGROUND_SCHEDULER_H_ -#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_BACKGROUND_SCHEDULER_H_ - -#include "base/location.h" -#include "base/sequenced_task_runner.h" -#include "base/task/task_traits.h" -#include "third_party/blink/renderer/platform/platform_export.h" -#include "third_party/blink/renderer/platform/wtf/functional.h" - -namespace blink { - -namespace background_scheduler { - -// These are a thin wrapper around base::TaskScheduler to accomodate -// Blink's CrossThreadClosure, which only allows background tasks -// (i.e. tasks which are run off the main thread). -// -// Non-background tasks should be posted using another scheduler, e.g. -// FrameShceduler. -PLATFORM_EXPORT void PostOnBackgroundThread(const base::Location&, - CrossThreadClosure); - -PLATFORM_EXPORT void PostOnBackgroundThreadWithTraits(const base::Location&, - const base::TaskTraits&, - CrossThreadClosure); - -// TODO(altimin): Expose CreateBackgroundTaskRunnerWithTraits when the -// need arises. - -} // namespace background_scheduler - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_BACKGROUND_SCHEDULER_H_
diff --git a/third_party/blink/renderer/platform/scheduler/public/worker_pool.h b/third_party/blink/renderer/platform/scheduler/public/worker_pool.h new file mode 100644 index 0000000..ba16648 --- /dev/null +++ b/third_party/blink/renderer/platform/scheduler/public/worker_pool.h
@@ -0,0 +1,41 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_WORKER_POOL_H_ +#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_WORKER_POOL_H_ + +#include "base/location.h" +#include "base/sequenced_task_runner.h" +#include "base/task/task_traits.h" +#include "third_party/blink/renderer/platform/platform_export.h" +#include "third_party/blink/renderer/platform/wtf/functional.h" + +namespace blink { + +namespace worker_pool { + +// These are a thin wrapper around base::TaskScheduler to ensure that all +// callers use WTF::CrossThreadBind instead of base::Bind to ensure that +// all non-thread-safe objects are copied properly. +// +// All tasks that do not care about which thread they are running on +// (e.g. compressing/uncompressing tasks) use this API. +// +// Tasks that have to run on a specific thread (e.g. main thread, compositor +// thread, dedicated worker thread) should be posted via other means +// (e.g. FrameScheduler for main thread tasks). +PLATFORM_EXPORT void PostTask(const base::Location&, CrossThreadClosure); + +PLATFORM_EXPORT void PostTaskWithTraits(const base::Location&, + const base::TaskTraits&, + CrossThreadClosure); + +// TODO(altimin): Expose CreateSequencedTaskRunnerWithTraits when the +// need arises. + +} // namespace worker_pool + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_WORKER_POOL_H_
diff --git a/third_party/blink/renderer/platform/testing/empty_web_media_player.h b/third_party/blink/renderer/platform/testing/empty_web_media_player.h index fea2a40..205fde99 100644 --- a/third_party/blink/renderer/platform/testing/empty_web_media_player.h +++ b/third_party/blink/renderer/platform/testing/empty_web_media_player.h
@@ -28,10 +28,12 @@ void Seek(double seconds) override {} void SetRate(double) override {} void SetVolume(double) override {} - void EnterPictureInPicture() override {} - void ExitPictureInPicture() override {} + void EnterPictureInPicture(PipWindowOpenedCallback) override {} + void ExitPictureInPicture(PipWindowClosedCallback) override {} void SetPictureInPictureCustomControls( const std::vector<PictureInPictureControlInfo>&) override {} + void RegisterPictureInPictureWindowResizeCallback( + PipWindowResizedCallback) override {} SurfaceLayerMode GetVideoSurfaceLayerMode() const override { return SurfaceLayerMode::kNever; }
diff --git a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py index 298ff6fd8..27a70b2 100755 --- a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py +++ b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
@@ -236,7 +236,6 @@ 'url::.+', # Nested namespaces under the blink namespace - 'background_scheduler::.+', 'canvas_heuristic_parameters::.+', 'compositor_target_property::.+', 'cors::.+', @@ -264,11 +263,12 @@ 'style_change_extra_data::.+', 'style_change_reason::.+', 'svg_path_parser::.+', - 'trace_event::.+', 'touch_action_util::.+', + 'trace_event::.+', 'unicode::.+', 'vector_math::.+', 'web_core_test_support::.+', + 'worker_pool::.+', 'xpath::.+', '[a-z_]+_names::.+',
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests index d3c46ea..df7caf2 100644 --- a/third_party/blink/web_tests/NeverFixTests +++ b/third_party/blink/web_tests/NeverFixTests
@@ -2019,6 +2019,7 @@ external/wpt/payment-request/change-shipping-option-select-last-manual.https.html [ WontFix ] external/wpt/payment-request/payment-request-abort-method-manual.https.html [ WontFix ] external/wpt/payment-request/payment-request-canmakepayment-method-manual.https.html [ WontFix ] +external/wpt/payment-request/payment-request-hasenrolledinstrument-method-manual.https.html [ WontFix ] external/wpt/payment-request/payment-request-multiple-show-manual.https.html [ WontFix ] external/wpt/payment-request/payment-request-show-method-manual.https.html [ WontFix ] external/wpt/payment-request/payment-response/complete-method-manual.https.html [ WontFix ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 2fde11a..aacc204 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -1784,6 +1784,7 @@ crbug.com/875235 virtual/layout_ng_experimental/fast/forms/fieldset/legend-small-after-margin-before-border-horizontal-mode.html [ Failure ] ### virtual/bidi-caret-affinity/editing/selection/modify_move/ +crbug.com/923087 virtual/bidi-caret-affinity/editing/selection/modify_move/css-pseudo-element.html [ Failure ] crbug.com/894651 virtual/bidi-caret-affinity/editing/selection/modify_move/move-by-word-visually-crash-test-3.html [ Crash ] crbug.com/894651 virtual/bidi-caret-affinity/editing/selection/modify_move/move-by-word-visually-crash-test-5.html [ Pass Timeout Crash ] crbug.com/894651 virtual/bidi-caret-affinity/editing/selection/modify_move/move-by-word-visually-inline-block-positioned-element.html [ Crash Failure ] @@ -3074,15 +3075,15 @@ # ====== New tests from wpt-importer added here ====== crbug.com/626703 external/wpt/webrtc/RTCIceConnectionState-candidate-pair.https.html [ Timeout ] -crbug.com/626703 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html [ Timeout ] +crbug.com/626703 crbug.com/930297 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html [ Timeout Pass Failure ] crbug.com/626703 [ Win7 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html [ Failure Timeout ] crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-intrinsic-ratio-007v.html [ Failure ] crbug.com/626703 [ Mac10.11 ] external/wpt/mimesniff/mime-types/parsing.any.html [ Timeout ] -crbug.com/626703 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html [ Timeout ] +crbug.com/626703 crbug.com/930297 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html [ Timeout Pass Failure ] crbug.com/626703 [ Win7 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html [ Failure Timeout ] crbug.com/626703 external/wpt/css/css-writing-modes/baseline-with-orthogonal-flow-001.html [ Failure ] crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-intrinsic-ratio-007.html [ Failure ] -crbug.com/626703 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Timeout ] +crbug.com/626703 crbug.com/930297 [ Linux ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Timeout Pass Failure ] crbug.com/626703 [ Win10 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Failure Timeout ] crbug.com/626703 [ Win7 ] external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html [ Failure Timeout ] crbug.com/626703 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=windows-1252 [ Timeout ]
diff --git a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-keyframes-expected.html b/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-keyframes-expected.html deleted file mode 100644 index 0712e04..0000000 --- a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-keyframes-expected.html +++ /dev/null
@@ -1,13 +0,0 @@ -<!DOCTYPE html> -<style> -.box { - width: 100px; - height: 100px; - transform: translateX(100px); - background-color: #00ff00; - opacity: 0.8; - will-change: transform; -} -</style> - -<div class="box"></div>
diff --git a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-keyframes.html b/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-keyframes.html deleted file mode 100644 index b14abf6..0000000 --- a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-keyframes.html +++ /dev/null
@@ -1,57 +0,0 @@ -<!DOCTYPE html> -<style> -#box { - width: 100px; - height: 100px; - background-color: #00ff00; -} -</style> - -<div id="box"></div> - -<script id="visual_update" type="text/worklet"> -registerAnimator("test_animator", class { - animate(currentTime, effect) { - effect.localTime = 500; - } -}); -</script> - -<script src="resources/animation-worklet-tests.js"></script> -<script> -if (window.testRunner) { - testRunner.waitUntilDone(); -} - -runInAnimationWorklet( - document.getElementById('visual_update').textContent -).then(()=>{ - const keyframes_before = [ - { transform: 'translateY(0)' }, - { transform: 'translateY(200px)' } - ]; - const keyframes_after = [ - { transform: 'translateX(0)' }, - { transform: 'translateX(200px)' } - ]; - - const box = document.getElementById('box'); - const effect = new KeyframeEffect(box, keyframes_before, {duration: 1000}); - const animation = new WorkletAnimation('test_animator', effect, document.timeline, {}); - animation.play(); - - waitTwoAnimationFrames(_ => { - effect.setKeyframes(keyframes_after); - waitTwoAnimationFrames(_ => { - // TODO(crbug.com/829926): The same issue that is affecting - // worklet-animation-cancel test is at play here. Change opacity to force - // a new animation frame and commit to get updated result. - box.style.opacity = 0.8; - waitTwoAnimationFrames(_ => { - if (window.testRunner) - testRunner.notifyDone(); - }); - }); - }); -}); -</script>
diff --git a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-timing-expected.html b/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-timing-expected.html deleted file mode 100644 index 478d791..0000000 --- a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-timing-expected.html +++ /dev/null
@@ -1,13 +0,0 @@ -<!DOCTYPE html> -<style> -.box { - width: 100px; - height: 100px; - transform: translateX(50px); - opacity: 0.8; - background-color: #00ff00; - will-change: transform; -} -</style> - -<div class="box"></div>
diff --git a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-timing.html b/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-timing.html deleted file mode 100644 index 591fc272..0000000 --- a/third_party/blink/web_tests/animations/animationworklet/worklet-animation-set-timing.html +++ /dev/null
@@ -1,60 +0,0 @@ -<!DOCTYPE html> -<style> -#box { - width: 100px; - height: 100px; - background-color: #00ff00; -} -</style> - -<div id="box"></div> - -<script id="visual_update" type="text/worklet"> -registerAnimator("test_animator", class { - animate(currentTime, effect) { - effect.localTime = 500; - } -}); -</script> - -<script src="resources/animation-worklet-tests.js"></script> -<script> -if (window.testRunner) - testRunner.waitUntilDone(); - -runInAnimationWorklet( - document.getElementById('visual_update').textContent -).then(()=>{ - const keyframes = [ - { transform: 'translateX(0)' }, - { transform: 'translateX(200px)' } - ]; - - const options_before = { - duration: 1000 - }; - - const options_after = { - duration: 2000 - }; - - const box = document.getElementById('box'); - const effect = new KeyframeEffect(box, keyframes, options_before); - const animation = new WorkletAnimation('test_animator', effect, document.timeline, {}); - animation.play(); - - waitTwoAnimationFrames(_ => { - effect.updateTiming(options_after); - waitTwoAnimationFrames(_ => { - box.style.opacity = 0.8; - // TODO(crbug.com/829926): The same issue that is affecting - // worklet-animation-cancel is at play here. Change opacity to force a - // new animation frame and commit to get updated result. - waitTwoAnimationFrames(_ => { - if (window.testRunner) - testRunner.notifyDone(); - }); - }); - }); -}); -</script>
diff --git a/third_party/blink/web_tests/editing/selection/css-pseudo-element-expected.txt b/third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-expected.txt similarity index 100% rename from third_party/blink/web_tests/editing/selection/css-pseudo-element-expected.txt rename to third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-expected.txt
diff --git a/third_party/blink/web_tests/editing/selection/css-pseudo-element-hang-expected.txt b/third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-hang-expected.txt similarity index 100% rename from third_party/blink/web_tests/editing/selection/css-pseudo-element-hang-expected.txt rename to third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-hang-expected.txt
diff --git a/third_party/blink/web_tests/editing/selection/css-pseudo-element-hang.html b/third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-hang.html similarity index 96% rename from third_party/blink/web_tests/editing/selection/css-pseudo-element-hang.html rename to third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-hang.html index 53446fe..8162f5b 100644 --- a/third_party/blink/web_tests/editing/selection/css-pseudo-element-hang.html +++ b/third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element-hang.html
@@ -9,7 +9,7 @@ .bidi:before { content: "aפb"; } .bidi:after { content: "aפb"; } </style> -<script src="../../resources/js-test.js"></script> +<script src="../../../resources/js-test.js"></script> <title></title> </head> <body>
diff --git a/third_party/blink/web_tests/editing/selection/css-pseudo-element.html b/third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element.html similarity index 98% rename from third_party/blink/web_tests/editing/selection/css-pseudo-element.html rename to third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element.html index 828b072..6620d17 100644 --- a/third_party/blink/web_tests/editing/selection/css-pseudo-element.html +++ b/third_party/blink/web_tests/editing/selection/modify_move/css-pseudo-element.html
@@ -9,7 +9,7 @@ .bidi:before { content: "aפb"; } .bidi:after { content: "aפb"; } </style> -<script src="../../resources/js-test.js"></script> +<script src="../../../resources/js-test.js"></script> <title></title> </head> <body>
diff --git a/third_party/blink/web_tests/editing/selection/modify_move/move_crossing_inline_block_boundary.html b/third_party/blink/web_tests/editing/selection/modify_move/move_crossing_inline_block_boundary.html index 17556164..6ce7473c 100644 --- a/third_party/blink/web_tests/editing/selection/modify_move/move_crossing_inline_block_boundary.html +++ b/third_party/blink/web_tests/editing/selection/modify_move/move_crossing_inline_block_boundary.html
@@ -26,4 +26,29 @@ selection => selection.modify('move', 'right', 'character'), '<div contenteditable>foo<span style="display:inline-block">bar</span>b|az</div>', 'Move right out of inline block'); + +selection_test( + '<div contenteditable>foo|<span style="display:inline-block;width:1em;height:1em;"></span>bar</div>', + selection => selection.modify('move', 'right', 'character'), + '<div contenteditable>foo<span style="display:inline-block;width:1em;height:1em;">|</span>bar</div>', + 'Move right into empty inline block'); + +// TODO(xiaochengh): Note that the left and right movements are asymmetric, which might be a bug. +selection_test( + '<div contenteditable>foo<span style="display:inline-block;width:1em;height:1em;">|</span>bar</div>', + selection => selection.modify('move', 'left', 'character'), + '<div contenteditable>fo|o<span style="display:inline-block;width:1em;height:1em;"></span>bar</div>', + 'Move left out of empty inline block'); + +selection_test( + '<div contenteditable>foo<span style="display:inline-block;width:1em;height:1em;"></span>|bar</div>', + selection => selection.modify('move', 'left', 'character'), + '<div contenteditable>foo<span style="display:inline-block;width:1em;height:1em;">|</span>bar</div>', + 'Move left into empty inline block'); + +selection_test( + '<div contenteditable>foo<span style="display:inline-block;width:1em;height:1em;">|</span>bar</div>', + selection => selection.modify('move', 'right', 'character'), + '<div contenteditable>foo<span style="display:inline-block;width:1em;height:1em;"></span>|bar</div>', + 'Move right out of empty inline block'); </script>
diff --git a/third_party/blink/web_tests/editing/selection/modify_move/move_over_ignored_contents.html b/third_party/blink/web_tests/editing/selection/modify_move/move_over_ignored_contents.html new file mode 100644 index 0000000..bcb8366d --- /dev/null +++ b/third_party/blink/web_tests/editing/selection/modify_move/move_over_ignored_contents.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<script src="../../../resources/testharness.js"></script> +<script src="../../../resources/testharnessreport.js"></script> +<script src="../../assert_selection.js"></script> +<script> +selection_test( + '<div contenteditable>foo|<div style="float:right">float</div>bar</div>', + selection => selection.modify('move', 'right', 'character'), + '<div contenteditable>foo<div style="float:right">float</div>b|ar</div>', + 'Move right over float'); + +selection_test( + '<div contenteditable>foo<div style="float:right">float</div>|bar</div>', + selection => selection.modify('move', 'left', 'character'), + '<div contenteditable>fo|o<div style="float:right">float</div>bar</div>', + 'Move left over float'); + +selection_test( + '<div contenteditable>foo|<div style="position:absolute">positioned</div>bar</div>', + selection => selection.modify('move', 'right', 'character'), + '<div contenteditable>foo<div style="position:absolute">positioned</div>b|ar</div>', + 'Move right over out-of-flow positioned'); + +selection_test( + '<div contenteditable>foo<div style="position:absolute">positioned</div>|bar</div>', + selection => selection.modify('move', 'left', 'character'), + '<div contenteditable>fo|o<div style="position:absolute">positioned</div>bar</div>', + 'Move left over out-of-flow positioned'); + +selection_test( + '<div contenteditable>foo|<wbr>bar</div>', + selection => selection.modify('move', 'right', 'character'), + '<div contenteditable>foo<wbr>b|ar</div>', + 'Move right over wbr'); + +selection_test( + '<div contenteditable>foo<wbr>|bar</div>', + selection => selection.modify('move', 'left', 'character'), + '<div contenteditable>fo|o<wbr>bar</div>', + 'Move left over wbr'); + +selection_test( + `<style>span::before{content:'xxx'}</style> + <div contenteditable>foo|<span>bar</span></div>`, + selection => selection.modify('move', 'right', 'character'), + `<style>span::before{content:'xxx'}</style> + <div contenteditable>foo<span>b|ar</span></div>`, + 'Move right over generated content'); + +selection_test( + `<style>span::before{content:'xxx'}</style> + <div contenteditable>foo<span>|bar</span></div>`, + selection => selection.modify('move', 'left', 'character'), + `<style>span::before{content:'xxx'}</style> + <div contenteditable>fo|o<span>bar</span></div>`, + 'Move left over generated content'); +</script>
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json index 9b37617..bdbcb31 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_5.json
@@ -5533,6 +5533,12 @@ {} ] ], + "payment-request/payment-request-canmakepayment-method-manual.https.html": [ + [ + "/payment-request/payment-request-canmakepayment-method-manual.https.html", + {} + ] + ], "payment-request/payment-request-multiple-show-manual.https.html": [ [ "/payment-request/payment-request-multiple-show-manual.https.html", @@ -307867,7 +307873,7 @@ "testharness" ], "background-fetch/idlharness.https.any.js": [ - "f2c8a56590aedc52051e7ad8f51b3725091821dc", + "f9744c8f944fcefe5a6a21e9a7644cf88644c173", "testharness" ], "background-fetch/idlharness.https.any.serviceworker-expected.txt": [ @@ -421791,47 +421797,47 @@ "support" ], "mathml/presentation-markup/fractions/frac-1.html": [ - "748fbdf1f40182ea6e785110ab05c32639218c6f", + "848eb5b144cef3740b794475f699229243c1287e", "testharness" ], "mathml/presentation-markup/fractions/frac-parameters-1.html": [ - "1c20b9d75b3dd3c034e49af4e349c3c63fb54664", + "543017e19006377cac0c1a434bd43400467fac3b", "testharness" ], "mathml/presentation-markup/fractions/frac-parameters-2.html": [ - "bc9fb36412fb6553a7f42969a4694d281ab30a82", + "75074875c9e6b1fa205fe76b85c4a0b36fadf274", "testharness" ], "mathml/presentation-markup/operators/mo-axis-height-1.html": [ - "e409f982aeb3189e6da5c08d0f97a2fb688a3e68", + "7b0031ac1ed63219130b69113ebbfdc28eec10d6", "testharness" ], "mathml/presentation-markup/radicals/root-parameters-1.html": [ - "4fc6e6f869ce20ae307ec11b5ddd7a07ccafe3b3", + "8ffcbe4a22d1225e4494d91437200ca8361a27bf", "testharness" ], "mathml/presentation-markup/scripts/subsup-1.html": [ - "026cfa35c54adb63cbb82f04a67ce0bdc4d4f2fd", + "39768315e72d13b5952e3bc743617a8d29b223ca", "testharness" ], "mathml/presentation-markup/scripts/subsup-2.html": [ - "8f62d9257cb9d8ab320c1b04720c056031e8af26", + "26fa5de780b086a777fb6494cfb6f163b7813e02", "testharness" ], "mathml/presentation-markup/scripts/subsup-3.html": [ - "18ede4004235ba56234570eee63336f5c21f52b0", + "231f65ab4f46bbe64a20a7db170ffb42deef460f", "testharness" ], "mathml/presentation-markup/scripts/subsup-4.html": [ - "44a2ff41fb1079ebb200c612dd23e39634079984", + "c4bf4382f8ed51849d396cd313ff851fe70248e4", "testharness" ], "mathml/presentation-markup/scripts/subsup-5.html": [ - "a1fd0c0fb2323eec5bf3c7feb48215e37728b7e7", + "005ceea4019918f47606e25a91654a841b1e437a", "testharness" ], "mathml/presentation-markup/scripts/subsup-parameters-1.html": [ - "23e65c12dce57ee5a5e62373cff5a3649dbaf7a3", + "b0ebaceb4355b4ddafff11febb41e36a5afe854c", "testharness" ], "mathml/presentation-markup/scripts/subsup-parameters-2.html": [ @@ -421839,27 +421845,27 @@ "testharness" ], "mathml/presentation-markup/scripts/underover-1.html": [ - "d355f1186783500771cb993239f8401f79aea47b", + "6dcdbb7b388b6955e744f5d9eb9e1e27e9abef34", "testharness" ], "mathml/presentation-markup/scripts/underover-parameters-1.html": [ - "bd6c5f13c4211e5748ffd28517773de513f33bf9", + "802293829fd8de194ae6a12b0aea458689770ae1", "testharness" ], "mathml/presentation-markup/scripts/underover-parameters-2.html": [ - "73a7c5b236390132f36d84eca6ad7cd18b73541d", + "e9d6af4901e16602dd7a54a7c74f3594e26402c9", "testharness" ], "mathml/presentation-markup/scripts/underover-parameters-3.html": [ - "3fb57c01dde3c5dea258678f5607385a8b892471", + "373d6d4d06ecc0593dfda27164fe26a4d55dc1d1", "testharness" ], "mathml/presentation-markup/scripts/underover-parameters-4.html": [ - "6dee35ca6f0b6f8c2c23abb65c3c52e69686b707", + "3b1fa575f72473443271ebbd193bfc7b866dfc1a", "testharness" ], "mathml/presentation-markup/spaces/space-1.html": [ - "dc2622db9a309091ac225f8e8151f6921fe6721f", + "cb9dd9e9acbddd54c3729962f4efa4eeb56d8452", "testharness" ], "mathml/presentation-markup/spaces/space-2-ref.html": [ @@ -421871,7 +421877,7 @@ "reftest" ], "mathml/presentation-markup/tables/table-axis-height.html": [ - "4d2b4462dba6f428ad72eb8f741dd28607452151", + "024bdd29b116de1c3112e9482a2f4ce286126a91", "testharness" ], "mathml/relations/css-styling/color-1-ref.html": [ @@ -421891,7 +421897,7 @@ "reftest" ], "mathml/relations/css-styling/displaystyle-1.html": [ - "2749e09c48a759c02f1f2148387c8586c207b9e5", + "3143343da7e39ff931f552af942e62882062bc77", "testharness" ], "mathml/relations/css-styling/lengths-1-ref.html": [ @@ -421911,7 +421917,7 @@ "reftest" ], "mathml/relations/css-styling/lengths-3.html": [ - "a7133f89ecf4eed567c2d44bbb8d585be474c17d", + "68a144aca69c4fac862073029d8479369773e25a", "testharness" ], "mathml/relations/css-styling/mathvariant-bold-fraktur-ref.html": [ @@ -422067,7 +422073,7 @@ "reftest" ], "mathml/relations/html5-tree/class-2.html": [ - "9dbede840199c32fe89eb7800abd08bf811ecdf1", + "707500de37fc117bf6174bd9aa7aaba298a705da", "testharness" ], "mathml/relations/html5-tree/color-attributes-1-ref.html": [ @@ -422079,7 +422085,7 @@ "reftest" ], "mathml/relations/html5-tree/display-1.html": [ - "4eb302c3ee821a015e76c561b46eb528ce78a93d", + "64d862cf7614f29435a08a6ac66d45f84575a053", "testharness" ], "mathml/relations/html5-tree/dynamic-1-ref.html": [ @@ -422163,7 +422169,7 @@ "reftest" ], "mathml/relations/html5-tree/unique-identifier-2.html": [ - "b3226c293b5f1394f5245644d1630bfef4f86b36", + "97e04a91ef13e650757fc2fe01ef068932e31b16", "testharness" ], "mathml/relations/html5-tree/unique-identifier-3-ref.html": [ @@ -433455,7 +433461,7 @@ "testharness" ], "payment-handler/idlharness.https.any.js": [ - "6fbba53515eba4db995624cecaff1512fbace056", + "878114ec7ed878d3e754341cbffa138092fee129", "testharness" ], "payment-handler/idlharness.https.any.serviceworker-expected.txt": [ @@ -433802,6 +433808,10 @@ "cf16401d0b0d3e97f3ab14c337880a4ec0d9ea7f", "testharness" ], + "payment-request/payment-request-canmakepayment-method-manual.https.html": [ + "fea45500b18b35eadf144389e86d444d53366fce", + "manual" + ], "payment-request/payment-request-canmakepayment-method-protection.https-expected.txt": [ "0f09114186bb4b3c975473f189a79237b7901944", "support" @@ -433811,11 +433821,11 @@ "testharness" ], "payment-request/payment-request-canmakepayment-method.https-expected.txt": [ - "0f09114186bb4b3c975473f189a79237b7901944", + "29f5282d7826bc82c3914bff51a8db23daf7c77f", "support" ], "payment-request/payment-request-canmakepayment-method.https.html": [ - "672e5ce1571435e9f16b8010456e859f12d2c9c4", + "cc8349a42239ca1a459d59f016611f6e564f4690", "testharness" ], "payment-request/payment-request-constructor-crash.https.html": [ @@ -455423,7 +455433,7 @@ "testharness" ], "webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html": [ - "386614ff2e20e7abd4e511bf5e9d7d492cddfeb3", + "0b09edd4a7007e54721c4e1d8fb1112e71e5cb1a", "testharness" ], "webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html": [ @@ -455739,7 +455749,7 @@ "testharness" ], "webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-disconnect.html": [ - "5fb18c8aee41034f75e36959040e2d23e840ddca", + "ad74d5e00457e6ccd1b165940ecad140a423d247", "testharness" ], "webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-input-non-default.html": [
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/common.js b/third_party/blink/web_tests/external/wpt/animation-worklet/common.js index eb114f2..983c224 100644 --- a/third_party/blink/web_tests/external/wpt/animation-worklet/common.js +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/common.js
@@ -30,3 +30,16 @@ // AnimationWorklet. return waitForAnimationFrames(count + 1); } + +async function waitForAnimationFrameWithCondition(condition) { + do { + await new Promise(window.requestAnimationFrame); + } while (!condition()) +}; + +async function waitForDocumentTimelineAdvance() { + const timeAtStart = document.timeline.currentTime; + do { + await new Promise(window.requestAnimationFrame); + } while (timeAtStart === document.timeline.currentTime) +}
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/references/translated-box-ref.html b/third_party/blink/web_tests/external/wpt/animation-worklet/references/translated-box-ref.html new file mode 100644 index 0000000..c73f5a1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/references/translated-box-ref.html
@@ -0,0 +1,11 @@ +<!DOCTYPE html> +<style> +#box { + width: 100px; + height: 100px; + transform: translateY(100px); + background-color: green; +} +</style> + +<div id="box"></div>
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause-immediately.https.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause-immediately.https.html new file mode 100644 index 0000000..f9dcf30 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause-immediately.https.html
@@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>Verify that calling pause immediately after playing works as expected</title> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> +<link rel="match" href="references/translated-box-ref.html"> + +<script src="/common/reftest-wait.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="common.js"></script> +<style> +#box { + width: 100px; + height: 100px; + background-color: green; +} +</style> + +<div id="box"></div> + +<script> +registerPassthroughAnimator().then(async _ => { + const box = document.getElementById('box'); + const effect = new KeyframeEffect(box, + { transform: ['translateY(100px)', 'translateY(200px)'] }, + { duration: 100, iterations: 1 } + ); + + const animation = new WorkletAnimation('passthrough', effect); + animation.play(); + // Immediately pausing animation should freeze the current time at 0. + animation.pause(); + // Wait at least one frame to ensure a paused animation actually freezes. + await waitForAsyncAnimationFrames(1); + takeScreenshot(); +}); +</script> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause-resume.https.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause-resume.https.html new file mode 100644 index 0000000..f26a934 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause-resume.https.html
@@ -0,0 +1,40 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>Verify that calling pause immediately after playing works as expected</title> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> +<link rel="match" href="references/translated-box-ref.html"> + +<script src="/common/reftest-wait.js"></script> +<script src="common.js"></script> +<style> +#box { + width: 100px; + height: 100px; + background-color: green; +} +</style> + +<div id="box"></div> + +<script> +registerPassthroughAnimator().then(async _ => { + const duration = 18; // a bit longer than a frame + const box = document.getElementById('box'); + const effect = new KeyframeEffect(box, + { transform: ['translateY(0px)', 'translateY(100px)'] }, + { duration: duration, iterations: 1, fill: 'forwards'} + ); + + const animation = new WorkletAnimation('passthrough', effect); + // Immediately pausing animation should freeze the current time at 0. + animation.pause(); + // Playing should cause animation to resume. + animation.play(); + // Wait until we ensure animation has reached completion. + await waitForAnimationFrameWithCondition( _ => { + return animation.currentTime >= duration; + }); + takeScreenshot(); +}); +</script> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause.https.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause.https.html new file mode 100644 index 0000000..417db9e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-pause.https.html
@@ -0,0 +1,60 @@ +<!DOCTYPE html> +<title>Verify that currentTime and playState are correct when animation is paused</title> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="common.js"></script> + +<div id="box"></div> + +<script> + +setup(setupAndRegisterTests, {explicit_done: true}); + +function createAnimation() { + const box = document.getElementById('box'); + const effect = new KeyframeEffect(box, + { transform: ['translateY(100px)', 'translateY(200px)'] }, + { duration: 100, iterations: 1 } + ); + + return new WorkletAnimation('passthrough', effect); +} + +async function setupAndRegisterTests() { + await registerPassthroughAnimator(); + + promise_test(async t => { + const animation = createAnimation(); + animation.play(); + // Immediately pausing animation should freeze the current time at 0. + animation.pause(); + assert_equals(animation.currentTime, 0); + assert_equals(animation.playState, "paused"); + // Wait some time to ensure a paused animation actually freezes. + await waitForNextFrame(); + assert_equals(animation.currentTime, 0); + assert_equals(animation.playState, "paused"); + }, 'pausing an animation freezes its current time'); + + promise_test(async t => { + const animation = createAnimation(); + animation.pause(); + animation.play(); + // Allow one async animation frame to pass so that animation is running. + await waitForAsyncAnimationFrames(1); + assert_equals(animation.playState, "running"); + // Allow time to advance so that we have a non-zero current time. + await waitForDocumentTimelineAdvance(); + const timelineTime = document.timeline.currentTime; + assert_greater_than(animation.currentTime, 0); + assert_times_equal(animation.currentTime, (timelineTime - animation.startTime)); + }, 'playing a paused animation should resume it'); + + done(); +} + +</script> +
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-keyframes-ref.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-keyframes-ref.html new file mode 100644 index 0000000..26bf33f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-keyframes-ref.html
@@ -0,0 +1,12 @@ +<!DOCTYPE html> +<title>Reference for Worklet Animation sets keyframes</title> +<style> +#box { + width: 100px; + height: 100px; + transform: translateX(100px); + background-color: green; +} +</style> + +<div id="box"></div> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-keyframes.https.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-keyframes.https.html new file mode 100644 index 0000000..01740849 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-keyframes.https.html
@@ -0,0 +1,44 @@ +<html class="reftest-wait"> +<title>Worklet Animation sets keyframes</title> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> +<meta name="assert" content="Can update the keyframes for an effect while the animation is running"> +<link rel="match" href="worklet-animation-set-keyframes-ref.html"> + +<script src="/web-animations/testcommon.js"></script> +<script src="/common/reftest-wait.js"></script> +<script src="common.js"></script> + +<style> + #box { + width: 100px; + height: 100px; + background-color: green; + } +</style> + +<div id="box"></div> + +<script> + registerConstantLocalTimeAnimator(500).then(()=>{ + const keyframes_before = [ + { transform: 'translateY(0)' }, + { transform: 'translateY(200px)' } + ]; + const keyframes_after = [ + { transform: 'translateX(0)' }, + { transform: 'translateX(200px)' } + ]; + + const box = document.getElementById('box'); + const effect = new KeyframeEffect(box, keyframes_before, {duration: 1000}); + const animation = new WorkletAnimation('constant_time', effect); + animation.play(); + + waitForAsyncAnimationFrames(1).then(_ => { + effect.setKeyframes(keyframes_after); + waitForAsyncAnimationFrames(1).then(_ => { + takeScreenshot(); + }); + }); + }); +</script> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-timing-ref.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-timing-ref.html new file mode 100644 index 0000000..8c354a8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-timing-ref.html
@@ -0,0 +1,12 @@ +<!DOCTYPE html> +<title>Reference for Worklet Animation sets timing</title> +<style> +#box { + width: 100px; + height: 100px; + transform: translateX(50px); + background-color: green; +} +</style> + +<div id="box"></div> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-timing.https.html b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-timing.https.html new file mode 100644 index 0000000..ac3f05f4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/worklet-animation-set-timing.https.html
@@ -0,0 +1,46 @@ +<html class="reftest-wait"> +<title>Worklet Animation sets timing</title> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> +<meta name="assert" content="Can update the timing for an effect while the animation is running"> +<link rel="match" href="worklet-animation-set-timing-ref.html"> + +<script src="/web-animations/testcommon.js"></script> +<script src="/common/reftest-wait.js"></script> +<script src="common.js"></script> + +<style> + #box { + width: 100px; + height: 100px; + background-color: green; + } +</style> + +<div id="box"></div> + +<script> + registerConstantLocalTimeAnimator(500).then(()=>{ + const keyframes = [ + { transform: 'translateX(0)' }, + { transform: 'translateX(200px)' } + ]; + const options_before = { + duration: 1000 + }; + const options_after = { + duration: 2000 + }; + + const box = document.getElementById('box'); + const effect = new KeyframeEffect(box, keyframes, options_before); + const animation = new WorkletAnimation('constant_time', effect); + animation.play(); + + waitForAsyncAnimationFrames(1).then(_ => { + effect.updateTiming(options_after); + waitForAsyncAnimationFrames(1).then(_ => { + takeScreenshot(); + }); + }); + }); +</script> \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/background-fetch/idlharness.https.any.js b/third_party/blink/web_tests/external/wpt/background-fetch/idlharness.https.any.js index f2c8a565..f9744c8f 100644 --- a/third_party/blink/web_tests/external/wpt/background-fetch/idlharness.https.any.js +++ b/third_party/blink/web_tests/external/wpt/background-fetch/idlharness.https.any.js
@@ -8,7 +8,7 @@ idl_test( ['background-fetch'], - ['service-workers', 'dedicated-workers', 'dom'], + ['service-workers', 'html', 'dom'], idl_array => { const isServiceWorker = location.pathname.includes('.serviceworker.'); if (isServiceWorker) {
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-1.html index 748fbdf..848eb5b 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-1.html
@@ -79,6 +79,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math> <mo id="axis">−</mo> @@ -124,6 +125,5 @@ </mfrac> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html index 1c20b9d..543017e 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html
@@ -133,6 +133,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math style="font-family: axisheight7000-rulethickness1000;"> <mspace id="ref0001" depth="1em" width="3em" style="background: green"/> @@ -237,6 +238,5 @@ </mfrac> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html index bc9fb364..75074875 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html
@@ -102,6 +102,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math style="font-family: axisheight7000;"> <mspace id="ref0001" depth="1em" width="3em" style="background: green"/> @@ -169,6 +170,5 @@ </mfrac> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-axis-height-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-axis-height-1.html index e409f98..7b0031a 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-axis-height-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/operators/mo-axis-height-1.html
@@ -55,6 +55,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math style="font-family: axisheight5000-verticalarrow14000;"> <mrow> @@ -72,6 +73,5 @@ <mspace id="target2" style="background: gray" width="10px" height="200px"/> </mrow> </math> - </p> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/root-parameters-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/root-parameters-1.html index 4fc6e6f..8ffcbe4 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/root-parameters-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/radicals/root-parameters-1.html
@@ -129,6 +129,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math style="font-family: degreebottomraisepercent25-rulethickness1000;"> <mspace id="ref001" width="3em" depth="1em" style="background: green"/> @@ -204,6 +205,5 @@ </mroot> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-1.html index 026cfa3..3976831 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-1.html
@@ -81,6 +81,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math> <mspace id="baseline" width="30px" height="2px" depth="0px" style="background: blue"/> @@ -99,6 +100,5 @@ </msubsup> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-2.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-2.html index 8f62d92..26fa5de78 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-2.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-2.html
@@ -120,6 +120,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math> <mspace id="baseline" width="30px" height="2px" depth="0px" style="background: blue"/> @@ -158,6 +159,5 @@ </mmultiscripts> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-3.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-3.html index 18ede400..231f65a 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-3.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-3.html
@@ -107,6 +107,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math> <mspace id="baseline" width="30px" height="2px" depth="0px" style="background: blue"/> @@ -175,6 +176,5 @@ </mmultiscripts> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-4.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-4.html index 44a2ff4..c4bf438 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-4.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-4.html
@@ -51,6 +51,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math> <mspace id="baseline" width="30px" height="2px" depth="0px" style="background: blue"/> @@ -119,6 +120,5 @@ </mmultiscripts> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-5.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-5.html index a1fd0c0..005ceea 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-5.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-5.html
@@ -59,6 +59,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math> <mspace id="baseline" width="30px" height="2px" depth="0px" style="background: blue"/> @@ -85,6 +86,5 @@ </mmultiscripts> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-parameters-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-parameters-1.html index 23e65c1..b0ebaceb 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-parameters-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/subsup-parameters-1.html
@@ -143,6 +143,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math style="font-family: spaceafterscript3000;"> <msub> @@ -330,6 +331,5 @@ </msup> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-1.html index d355f11..6dcdbb7 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-1.html
@@ -89,6 +89,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math> <mspace id="baseline" width="30px" height="2px" depth="0px" style="background: blue"/> @@ -156,6 +157,5 @@ </munderover> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-1.html index bd6c5f1..8022938 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-1.html
@@ -80,6 +80,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math style="font-family: lowerlimitbaselinedropmin3000;"> <mspace id="ref0001" height="1em" width="3em" style="background: green"/> @@ -139,6 +140,5 @@ </munderover> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-2.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-2.html index 73a7c5b..e9d6af49 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-2.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-2.html
@@ -80,6 +80,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math style="font-family: bottomshiftdown3000;"> <mspace id="ref0001" height="1em" width="3em" style="background: green"/> @@ -139,6 +140,5 @@ </munderover> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-3.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-3.html index 3fb57c0..373d6d4 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-3.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-3.html
@@ -187,6 +187,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math style="font-family: accentbaseheight4000underbarextradescender5000;"> <mspace id="ref001" height="1em" width="3em" style="background: green"/> @@ -318,6 +319,5 @@ </munderover> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-4.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-4.html index 6dee35ca..3b1fa575 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-4.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/scripts/underover-parameters-4.html
@@ -187,6 +187,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math style="font-family: accentbaseheight4000underbarextradescender5000;"> <mspace id="ref001" height="1em" width="3em" style="background: green"/> @@ -318,6 +319,5 @@ </munderover> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/spaces/space-1.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/spaces/space-1.html index dc2622d..cb9dd9e 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/spaces/space-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/spaces/space-1.html
@@ -68,6 +68,7 @@ </script> </head> <body> + <div id="log"></div> <p> <span id="baseline" style="display: inline-block; width: 30px; height: 5px; background: blue"></span> <math> @@ -86,6 +87,5 @@ <mspace id="mspace2" width="75px" height="25px" depth="50px" style="background: green"/> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/tables/table-axis-height.html b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/tables/table-axis-height.html index 4d2b446..024bdd2 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/tables/table-axis-height.html +++ b/third_party/blink/web_tests/external/wpt/mathml/presentation-markup/tables/table-axis-height.html
@@ -43,6 +43,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math style="font-family: axisheight5000-verticalarrow14000"> <mspace id="baseline" style="background: green" width="50px" height="1px"/>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-1.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-1.html index 2749e09c..3143343 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/displaystyle-1.html
@@ -92,6 +92,7 @@ </script> </head> <body> + <div id="log"></div> <math><mo id="math_default">⫿</mo></math> <math display="inline"><mo id="math_inline">⫿</mo></math> <math display="block"><mo id="math_block">⫿</mo></math>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/lengths-3.html b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/lengths-3.html index a7133f8..68a144a 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/lengths-3.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/css-styling/lengths-3.html
@@ -93,6 +93,7 @@ </script> </head> <body> + <div id="log"></div> <p> <math> <mspace id="unitCm" width="2.54cm"/> @@ -154,6 +155,5 @@ <mpadded voffset="-012.345em"><mspace id="N10"/></mpadded> </math> </p> - <hr/> </body> </html>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/class-2.html b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/class-2.html index 9dbede8..707500d 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/class-2.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/class-2.html
@@ -13,7 +13,7 @@ var mtext = document.getElementsByClassName("cl"); test(function() { assert_equals(mtext.length, 3); - var mtext_ref = document.body.firstElementChild.firstElementChild; + var mtext_ref = document.body.lastElementChild.firstElementChild; mtext_ref = mtext_ref.nextElementSibling.nextElementSibling assert_equals(mtext[0], mtext_ref); mtext_ref = mtext_ref.nextElementSibling.nextElementSibling; @@ -26,6 +26,7 @@ </script> </head> <body> + <div id="log"></div> <math> <mtext class="cl_"></mtext> <mtext class="c"></mtext>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1.html b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1.html index 4eb302c..64d862cf 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/display-1.html
@@ -70,6 +70,7 @@ </style> </head> <body> + <div id="log"></div> <div id="content"> <span id="before_block" class="square"></span> <math display="block"><mspace id="mspace_block" width="50px" height="50px"/></math>
diff --git a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/unique-identifier-2.html b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/unique-identifier-2.html index b3226c29..97e04a9 100644 --- a/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/unique-identifier-2.html +++ b/third_party/blink/web_tests/external/wpt/mathml/relations/html5-tree/unique-identifier-2.html
@@ -12,13 +12,14 @@ window.addEventListener("DOMContentLoaded", function() { var mtext = document.getElementById("MTEXT"); test(function() { - assert_equals(mtext, document.body.firstElementChild.lastElementChild); + assert_equals(mtext, document.body.lastElementChild.lastElementChild); }, "getElementById()"); done(); }); </script> </head> <body> + <div id="log"></div> <math> <mtext id="MTEXT_"></mtext> <mtext id="MTEX"></mtext>
diff --git a/third_party/blink/web_tests/external/wpt/payment-handler/idlharness.https.any.js b/third_party/blink/web_tests/external/wpt/payment-handler/idlharness.https.any.js index 6fbba53..878114ec 100644 --- a/third_party/blink/web_tests/external/wpt/payment-handler/idlharness.https.any.js +++ b/third_party/blink/web_tests/external/wpt/payment-handler/idlharness.https.any.js
@@ -9,7 +9,7 @@ idl_test( ['payment-handler'], - ['service-workers', 'dedicated-workers', 'dom'], + ['service-workers', 'html', 'dom'], async (idl_array, t) => { const isWindow = self.GLOBAL.isWindow(); const isServiceWorker = 'ServiceWorkerGlobalScope' in self;
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-manual.https.html b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-manual.https.html new file mode 100644 index 0000000..a4e8028 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-manual.https.html
@@ -0,0 +1,146 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Manual tests for PaymentRequest.hasEnrolledInstrument() method</title> +<link rel="help" href="https://w3c.github.io/payment-request/#hasenrolledinstrument-method"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +setup({ + explicit_done: true, + explicit_timeout: true, +}); + +const defaultMethods = Object.freeze([ + { + supportedMethods: "basic-card", + data: { + supportedNetworks: [ 'visa' ], + }, + } +]); +const defaultDetails = Object.freeze({ + total: { + label: "Total", + amount: { + currency: "USD", + value: "1.00", + }, + }, +}); + +function testHasNoEnrolledInstrument() { + promise_test(async t => { + const request = new PaymentRequest(defaultMethods, defaultDetails); + assert_false( + await request.hasEnrolledInstrument(), + "No test enrolled in the test profile." + ); + }, `hasEnrolledInstrument() resolves to false when user has no enrolled instrument.`); +} + +function testHasEnrolledInstrument() { + promise_test(async t => { + const request = new PaymentRequest(defaultMethods, defaultDetails); + assert_true( + await request.hasEnrolledInstrument(), + "A card is enrolled in the test profile." + ); + }, `hasEnrolledInstrument() resolves to true when user has an enrolled instrument.`); +} + +function testHasEnrolledInstrumentAgain() { + promise_test(async t => { + const request = new PaymentRequest(defaultMethods, defaultDetails); + assert_true( + await request.hasEnrolledInstrument(), + "A card is enrolled in the test profile." + ); + }, `hasEnrolledInstrument() can be called multiple times if the payment method details are identical.`); +} + +function testInteractiveState() { + promise_test(async t => { + const request = new PaymentRequest(defaultMethods, defaultDetails); + const acceptPromise = request.show(); // Sets state to "interactive" + const hasEnrolledInstrumentPromise = request.hasEnrolledInstrument(); + try { + const result = await hasEnrolledInstrumentPromise; + assert_true( + false, + "hasEnrolledInstrument() should have thrown InvalidStateError" + ); + } catch(err) { + await promise_rejects(t, "InvalidStateError", hasEnrolledInstrumentPromise); + } finally { + request.abort(); + await promise_rejects(t, "AbortError", acceptPromise); + } + }, `If request.[[state]] is "interactive", then return a promise rejected with an "InvalidStateError" DOMException.`); +} + +function testClosedState() { + promise_test(async t => { + const request = new PaymentRequest(defaultMethods, defaultDetails); + const acceptPromise = request.show(); // Sets state to "interactive" + acceptPromise.catch(() => {}); // no-op, just to handle unhandled rejection in devtools. + await request.abort(); // Sets state to "closed" + const hasEnrolledInstrumentPromise = request.hasEnrolledInstrument(); + try { + const result = await hasEnrolledInstrumentPromise; + assert_true( + false, + "hasEnrolledInstrument() should have thrown InvalidStateError" + ); + } catch(err) { + await promise_rejects(t, "InvalidStateError", hasEnrolledInstrumentPromise); + } + }, `If request.[[state]] is "closed", then return a promise rejected with an "InvalidStateError" DOMException.`); +} +</script> + +<h2>Manual tests for hasEnrolledInstrument() method</h2> +<p> + Follow the instructions from top to bottom. Click on each button in sequence + without refreshing the page. Some of the tests will bring up the Payment + Request UI and close them automatically. If a payment sheet stays open, the + test has failed. +</p> +<ol> + <li>Follow browser-specific instructions to remove all cards from the test profile.</li> + <li> + <button onclick="testHasNoEnrolledInstrument()"> + hasEnrolledInstrument() resolves to false when user has no enrolled instrument. + </button> + </li> + <li>Add a test Visa card to your test profile, e.g. 4012888888881881.</li> + <li> + <button onclick="testHasEnrolledInstrument()"> + hasEnrolledInstrument() resolves to true when user has an enrolled instrument. + </button> + </li> + <li> + <button onclick="testHasEnrolledInstrumentAgain()"> + hasEnrolledInstrument() can be called multiple times if the payment method + details are identical. + </button> + </li> + <li> + <button onclick="testInteractiveState()"> + If request.[[state]] is "interactive", then return a promise rejected with + an "InvalidStateError" DOMException. + </button> + </li> + <li> + <button onclick="testClosedState()"> + If request.[[state]] is "closed", then return a promise rejected with an + "InvalidStateError" DOMException. + </button> + </li> + <li> + <button onclick="done()">Done!</button> + </li> +</ol> +<small> + If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a> + and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">suggested reviewers</a>. +</small>
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.https-expected.txt b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.https-expected.txt new file mode 100644 index 0000000..6718c1b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.https-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Optionally, at the user agent's discretion, return a promise rejected with a "NotAllowedError" DOMException. assert_equals: If it throws, then it must be a NotAllowedError. expected "NotAllowedError" but got "TypeError" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.https.html b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.https.html new file mode 100644 index 0000000..4da1130 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.https.html
@@ -0,0 +1,68 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Tests for PaymentRequest.hasEnrolledInstrument() method</title> +<link rel="help" href="https://w3c.github.io/payment-request/#hasenrolledinstrument-method"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src='/resources/testdriver-vendor.js'></script> +<script> +const visaMethod = Object.freeze({ + supportedMethods: "basic-card", + data: { + supportedNetworks: ['visa'] + } +}); +const mastercardMethod = Object.freeze({ + supportedMethods: "basic-card", + data: { + supportedNetworks: ['mastercard'] + } +}); +const defaultDetails = Object.freeze({ + total: { + label: "Total", + amount: { + currency: "USD", + value: "1.00", + }, + }, +}); + +promise_test(async t => { + // This test may never actually hit its assertion, but that's allowed. + const request = new PaymentRequest([visaMethod], defaultDetails); + for (let i = 0; i < 1000; i++) { + try { + await request.hasEnrolledInstrument(); + } catch (err) { + assert_equals( + err.name, + "NotAllowedError", + "If it throws, then it must be a NotAllowedError." + ); + break; + } + } + + for (let i = 0; i < 1000; i++) { + try { + const request2 = new PaymentRequest([mastercardMethod], defaultDetails); + await request2.hasEnrolledInstrument(); + } catch (err) { + assert_equals( + err.name, + "NotAllowedError", + "If it throws, then it must be a NotAllowedError." + ); + break; + } + } +}, `Optionally, at the user agent's discretion, return a promise rejected with a "NotAllowedError" DOMException.`); + +</script> + +<small> + If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a> + and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">suggested reviewers</a>. +</small>
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method.https-expected.txt b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method.https-expected.txt new file mode 100644 index 0000000..6ce53be --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method.https-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL hasEnrolledInstrument() resolves to false for unsupported payment methods. promise_test: Unhandled rejection with value: object "TypeError: request.hasEnrolledInstrument is not a function" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method.https.html b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method.https.html new file mode 100644 index 0000000..c513995 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/payment-request/payment-request-hasenrolledinstrument-method.https.html
@@ -0,0 +1,36 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Tests for PaymentRequest.hasEnrolledInstrument() method</title> +<link rel="help" href="https://w3c.github.io/payment-request/#hasenrolledinstrument-method"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src='/resources/testdriver-vendor.js'></script> +<script> +const unsupportedMethods = [ + { supportedMethods: "this-is-not-supported" }, + { supportedMethods: "https://not.supported" }, +]; +const defaultDetails = Object.freeze({ + total: { + label: "Total", + amount: { + currency: "USD", + value: "1.00", + }, + }, +}); + +promise_test(async t => { + const request = new PaymentRequest(unsupportedMethods, defaultDetails); + assert_false( + await request.hasEnrolledInstrument(), + "Payment method is supported." + ); +}, `hasEnrolledInstrument() resolves to false for unsupported payment methods.`); +</script> + +<small> + If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a> + and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">suggested reviewers</a>. +</small>
diff --git a/third_party/blink/web_tests/fast/events/scroll-in-scaled-page-with-overflow-hidden.html b/third_party/blink/web_tests/fast/events/scroll-in-scaled-page-with-overflow-hidden.html index 3112599..29611aeb 100644 --- a/third_party/blink/web_tests/fast/events/scroll-in-scaled-page-with-overflow-hidden.html +++ b/third_party/blink/web_tests/fast/events/scroll-in-scaled-page-with-overflow-hidden.html
@@ -17,7 +17,7 @@ </div> <script> - const MOUSE_INPUT = 2; // Gesture source type from synthetic_gesture_params. + const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT; async function runTest() { promise_test( async () => { assert_true(typeof(window.internals) !== "undefined",
diff --git a/third_party/blink/web_tests/fast/scrolling/listbox-wheel-event.html b/third_party/blink/web_tests/fast/scrolling/listbox-wheel-event.html index 27777b8..64b8380 100644 --- a/third_party/blink/web_tests/fast/scrolling/listbox-wheel-event.html +++ b/third_party/blink/web_tests/fast/scrolling/listbox-wheel-event.html
@@ -13,7 +13,7 @@ <select multiple id='sel'></select> <script> - const MOUSE_INPUT = 2; // Gesture source type from synthetic_gesture_params.h + const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT; internals.settings.setScrollAnimatorEnabled(false); let sel = document.getElementById('sel');
diff --git a/third_party/blink/web_tests/http/tests/devtools/console-completions-expected.txt b/third_party/blink/web_tests/http/tests/devtools/console-completions-expected.txt index e901c0b..4a5bf0fc 100644 --- a/third_party/blink/web_tests/http/tests/devtools/console-completions-expected.txt +++ b/third_party/blink/web_tests/http/tests/devtools/console-completions-expected.txt
@@ -3,7 +3,6 @@ Completions for objectC.: { priority : 2 - subtitle : "C" text : "instanceMember" } { @@ -12,6 +11,7 @@ } { priority : 3 + subtitle : "C" text : "EPriorityMember" } { @@ -39,7 +39,6 @@ Completions for prefix: { priority : 4 - subtitle : "Window" text : "prefixA" } {
diff --git a/third_party/blink/web_tests/inspector-protocol/debugger/domdebugger-set-instrumentation-breakpoint-expected.txt b/third_party/blink/web_tests/inspector-protocol/debugger/domdebugger-set-instrumentation-breakpoint-expected.txt new file mode 100644 index 0000000..83d8ad5 --- /dev/null +++ b/third_party/blink/web_tests/inspector-protocol/debugger/domdebugger-set-instrumentation-breakpoint-expected.txt
@@ -0,0 +1,32 @@ +Tests the DOMDebugger.setInstrumentationBreakpoint API. + +Running test: testScriptFirstStatement +{ + eventName : instrumentation:scriptFirstStatement +} + +Running test: testRemoveScriptFirstStatement + +Running test: testInvalidEventName +{ + id : <number> + result : { + } + sessionId : <string> +} + +Running test: testScriptFirstStatementAndPause +{ + reasons : [ + [0] : { + reason : other + } + [1] : { + auxData : { + eventName : instrumentation:scriptFirstStatement + } + reason : EventListener + } + ] +} +
diff --git a/third_party/blink/web_tests/inspector-protocol/debugger/domdebugger-set-instrumentation-breakpoint.js b/third_party/blink/web_tests/inspector-protocol/debugger/domdebugger-set-instrumentation-breakpoint.js new file mode 100644 index 0000000..5d9d7ae --- /dev/null +++ b/third_party/blink/web_tests/inspector-protocol/debugger/domdebugger-set-instrumentation-breakpoint.js
@@ -0,0 +1,36 @@ +(async function testDomDebuggerInstrumentationBreakpoint(testRunner) { + const targetPage = 'resources/debugger-basic-page.html'; + const { dp } = await testRunner.startBlank('Tests the DOMDebugger.setInstrumentationBreakpoint API.'); + + await dp.Page.enable(); + await dp.Runtime.enable(); + await dp.Debugger.enable(); + const targetPageUrl = testRunner.url(targetPage); + + testRunner.runTestSuite([ + async function testScriptFirstStatement() { + await dp.DOMDebugger.setInstrumentationBreakpoint({ eventName: 'scriptFirstStatement' }); + dp.Page.navigate({ url: targetPageUrl }); + const pauseMessage = await dp.Debugger.oncePaused(); + testRunner.log(pauseMessage.params.data); + }, + async function testRemoveScriptFirstStatement() { + await dp.DOMDebugger.removeInstrumentationBreakpoint({ eventName: 'scriptFirstStatement' }); + dp.Page.navigate({ url: targetPageUrl }); + await dp.Runtime.evaluate({ expression: 'test();' }); // Will stall if bp still active + }, + async function testInvalidEventName() { + const setResponse = await dp.DOMDebugger.setInstrumentationBreakpoint({ eventName: 'badEventName' }); + testRunner.log(setResponse); + }, + async function testScriptFirstStatementAndPause() { + await dp.DOMDebugger.setInstrumentationBreakpoint({ eventName: 'scriptFirstStatement' }); + await dp.Debugger.pause(); + dp.Page.navigate({ url: targetPageUrl }); + const pauseMessage = await dp.Debugger.oncePaused(); + testRunner.log(pauseMessage.params.data); + await dp.DOMDebugger.removeInstrumentationBreakpoint({ eventName: 'scriptFirstStatement' }); + await dp.Debugger.resume(); + } + ]); +}) \ No newline at end of file
diff --git a/third_party/blink/web_tests/inspector-protocol/debugger/resources/debugger-basic-page.html b/third_party/blink/web_tests/inspector-protocol/debugger/resources/debugger-basic-page.html new file mode 100644 index 0000000..3f22099d --- /dev/null +++ b/third_party/blink/web_tests/inspector-protocol/debugger/resources/debugger-basic-page.html
@@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> + <script> + function test() { + return null; + } + var num = 5; + var obj = {a: 3}; + var bool = true; + </script> +</head> +</html> \ No newline at end of file
diff --git a/third_party/blink/web_tests/resources/gesture-util.js b/third_party/blink/web_tests/resources/gesture-util.js index de1c310..e4399c7 100644 --- a/third_party/blink/web_tests/resources/gesture-util.js +++ b/third_party/blink/web_tests/resources/gesture-util.js
@@ -76,22 +76,32 @@ // Enums for gesture_source_type parameters in gpuBenchmarking synthetic // gesture methods. Must match C++ side enums in synthetic_gesture_params.h -const GestureSourceType = { - DEFAULT_INPUT: 0, - TOUCH_INPUT: 1, - MOUSE_INPUT: 2, - TOUCHPAD_INPUT:2, - PEN_INPUT: 3, - ToString: function(value) { - switch(value) { - case 0: return "DefaultInput"; - case 1: return "Touchscreen"; - case 2: return "MouseWheel/Touchpad"; - case 3: return "Pen"; - default: return "Invalid"; +const GestureSourceType = (function() { + var isDefined = (window.chrome && chrome.gpuBenchmarking); + return { + DEFAULT_INPUT: isDefined && chrome.gpuBenchmarking.DEFAULT_INPUT, + TOUCH_INPUT: isDefined && chrome.gpuBenchmarking.TOUCH_INPUT, + MOUSE_INPUT: isDefined && chrome.gpuBenchmarking.MOUSE_INPUT, + TOUCHPAD_INPUT: isDefined && chrome.gpuBenchmarking.TOUCHPAD_INPUT, + PEN_INPUT: isDefined && chrome.gpuBenchmarking.PEN_INPUT, + ToString: function(value) { + if (!isDefined) + return 'Synthetic gestures unavailable'; + switch (value) { + case chrome.gpuBenchmarking.DEFAULT_INPUT: + return 'DefaultInput'; + case chrome.gpuBenchmarking.TOUCH_INPUT: + return 'Touchscreen'; + case chrome.gpuBenchmarking.MOUSE_INPUT: + return 'MouseWheel/Touchpad'; + case chrome.gpuBenchmarking.PEN_INPUT: + return 'Pen'; + default: + return 'Invalid'; + } } } -}; +})(); // Use this for speed to make gestures (effectively) instant. That is, finish // entirely within one Begin|Update|End triplet. This is in physical
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt index 827521e..44b5356 100644 --- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -4536,13 +4536,6 @@ getter startTime method constructor method toJSON -interface PerformanceEventTiming : PerformanceEntry - attribute @@toStringTag - getter cancelable - getter processingEnd - getter processingStart - method constructor - method toJSON interface PerformanceLongTaskTiming : PerformanceEntry attribute @@toStringTag getter attribution
diff --git a/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-fake-mouse-wheel.html b/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-fake-mouse-wheel.html index aee6054..192bdbc 100644 --- a/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-fake-mouse-wheel.html +++ b/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-fake-mouse-wheel.html
@@ -9,7 +9,7 @@ var TEST_Y = 70; var TEST_SCALE = 0.5; var TOLERANCE = 0.001; -var MOUSE_INPUT = 2; // Gesture source type from synthetic_gesture_params.h +var MOUSE_INPUT = GestureSourceType.MOUSE_INPUT; var t = async_test("Touchpad pinch offers synthetic wheel events");
diff --git a/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-zoom-prevent-in-handler.html b/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-zoom-prevent-in-handler.html index 97d5cb9..9f57bd4 100644 --- a/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-zoom-prevent-in-handler.html +++ b/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/gesture-pinch-zoom-prevent-in-handler.html
@@ -15,7 +15,7 @@ var SCALE_OUTSIDE = 2.0; var TOLERANCE = 0.001; -var MOUSE_INPUT = 2; // Gesture source type from synthetic_gesture_params.h +var MOUSE_INPUT = GestureSourceType.MOUSE_INPUT; var t = async_test("Touchpad pinch can be prevented by wheel handlers");
diff --git a/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/scroll-visual-viewport-send-boundary-events.html b/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/scroll-visual-viewport-send-boundary-events.html index 57e73403..fee2650b 100644 --- a/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/scroll-visual-viewport-send-boundary-events.html +++ b/third_party/blink/web_tests/virtual/threaded/fast/events/pinch/scroll-visual-viewport-send-boundary-events.html
@@ -22,7 +22,7 @@ const TEST_SCALE = 2; const EPSILON = 0.001; const SCROLL_TOLERANCE = 10; -const MOUSE_INPUT = 2; // Gesture source type from synthetic_gesture_params.h +const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT; function waitForVisualViewportOffset(x, y) { return new Promise(function(resolve, reject) {
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-desktop.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-desktop.html index c63f1f71..07493bd 100644 --- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-desktop.html +++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-desktop.html
@@ -9,7 +9,7 @@ // This is a less strict version of synthetic-pinch-zoom-gesture-touchpad.html // See synthetic-pinch-zoom-gesture.js. - const MOUSE_INPUT = 2; // Gesture source type from synthetic_gesture_params.h + const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT; const t = async_test( "This tests that gpuBenchmarking.pinchBy is relatively accurate for quick touchpad pinch gestures.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow-desktop.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow-desktop.html index accbe61..7978e84 100644 --- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow-desktop.html +++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow-desktop.html
@@ -9,7 +9,7 @@ // This is a less strict version of synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow.html // See synthetic-pinch-zoom-gesture.js. - const MOUSE_INPUT = 2; // Gesture source type from synthetic_gesture_params.h + const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT; const t = async_test( "This tests that gpuBenchmarking.pinchBy is relatively accurate when zooming in slowly for touchpad pinch.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow.html index 8053c1bf..dd8fe22 100644 --- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow.html +++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-in-slow.html
@@ -6,7 +6,7 @@ <script src="synthetic-pinch-zoom-gesture.js"></script> <script> - const MOUSE_INPUT = 2; // Gesture source type from synthetic_gesture_params.h + const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT; const t = async_test( "This tests that gpuBenchmarking.pinchBy is relatively accurate when zooming in slowly for touchpad pinch.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-out-slow.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-out-slow.html index c9c6635b..cd1b6c0 100644 --- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-out-slow.html +++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad-zoom-out-slow.html
@@ -6,7 +6,7 @@ <script src="synthetic-pinch-zoom-gesture.js"></script> <script> - const MOUSE_INPUT = 2; // Gesture source type from synthetic_gesture_params.h + const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT; const t = async_test( "This tests that gpuBenchmarking.pinchBy is relatively accurate when zooming out slowly for touchpad pinch.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad.html index a273240..a9534d7 100644 --- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad.html +++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchpad.html
@@ -6,7 +6,7 @@ <script src="synthetic-pinch-zoom-gesture.js"></script> <script> - const MOUSE_INPUT = 2; // Gesture source type from synthetic_gesture_params.h + const MOUSE_INPUT = GestureSourceType.MOUSE_INPUT; const t = async_test( "This tests that gpuBenchmarking.pinchBy is relatively accurate for quick touchpad pinch gestures.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-desktop.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-desktop.html index 826bf557..f34c801 100644 --- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-desktop.html +++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-desktop.html
@@ -12,7 +12,7 @@ // the non -desktop.html version of the test is passing this test can be // removed. - const TOUCH_INPUT = 1; // Gesture source type from synthetic_gesture_params.h + const TOUCH_INPUT = GestureSourceType.TOUCH_INPUT; const t = async_test( "This tests that gpuBenchmarking.pinchBy is relatively accurate for quick touchscreen pinch gestures.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow-desktop.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow-desktop.html index 0360672..c090e0ed 100644 --- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow-desktop.html +++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow-desktop.html
@@ -12,7 +12,7 @@ // the non -desktop.html version of the test is passing this test can be // removed. - const TOUCH_INPUT = 1; // Gesture source type from synthetic_gesture_params.h + const TOUCH_INPUT = GestureSourceType.TOUCH_INPUT; const t = async_test( "This tests that gpuBenchmarking.pinchBy is relatively accurate when zooming in slowly for touchscreen pinch.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html index dd09888..754eccf7f 100644 --- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html +++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-in-slow.html
@@ -6,7 +6,7 @@ <script src="synthetic-pinch-zoom-gesture.js"></script> <script> - const TOUCH_INPUT = 1; // Gesture source type from synthetic_gesture_params.h + const TOUCH_INPUT = GestureSourceType.TOUCH_INPUT; const t = async_test( "This tests that gpuBenchmarking.pinchBy is relatively accurate when zooming in slowly for touchscreen pinch.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-out-slow.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-out-slow.html index 61d4b89..f611e15 100644 --- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-out-slow.html +++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-zoom-out-slow.html
@@ -6,7 +6,7 @@ <script src="synthetic-pinch-zoom-gesture.js"></script> <script> - const TOUCH_INPUT = 1; // Gesture source type from synthetic_gesture_params.h + const TOUCH_INPUT = GestureSourceType.TOUCH_INPUT; const t = async_test( "This tests that gpuBenchmarking.pinchBy is relatively accurate when zooming out slowly for touchscreen pinch.");
diff --git a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen.html b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen.html index 63a090c..61cd4f6 100644 --- a/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen.html +++ b/third_party/blink/web_tests/virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen.html
@@ -6,7 +6,7 @@ <script src="synthetic-pinch-zoom-gesture.js"></script> <script> - const TOUCH_INPUT = 1; // Gesture source type from synthetic_gesture_params.h + const TOUCH_INPUT = GestureSourceType.TOUCH_INPUT; const t = async_test( "This tests that gpuBenchmarking.pinchBy is relatively accurate for quick touchscreen pinch gestures.");
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt index a7687a8..cb6c474 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -10281,9 +10281,11 @@ getter currentTime getter playState getter playbackRate + getter startTime getter timeline method cancel method constructor + method pause method play setter playbackRate interface WritableStream
diff --git a/third_party/cacheinvalidation/overrides/google/cacheinvalidation/deps/string_util.h b/third_party/cacheinvalidation/overrides/google/cacheinvalidation/deps/string_util.h index 80e37e5..15e84870 100644 --- a/third_party/cacheinvalidation/overrides/google/cacheinvalidation/deps/string_util.h +++ b/third_party/cacheinvalidation/overrides/google/cacheinvalidation/deps/string_util.h
@@ -16,11 +16,11 @@ using base::StringPrintf; inline std::string SimpleItoa(int v) { - return base::IntToString(v); + return base::NumberToString(v); } inline std::string SimpleItoa(int64_t v) { - return base::Int64ToString(v); + return base::NumberToString(v); } } // namespace invalidation
diff --git a/third_party/iaccessible2/README.chromium b/third_party/iaccessible2/README.chromium index 5bc89b42..e53d14a 100644 --- a/third_party/iaccessible2/README.chromium +++ b/third_party/iaccessible2/README.chromium
@@ -13,14 +13,18 @@ ia2_api_all.idl Local modifications: - None. + Added the IAccessible2_4 interface to ia2_api_all.idl which extends the + IAccessible2_3 interface with a single method for setting the current + selection. Update recipe: 1. git clone the IAccessible2 project 2. Run concatidl.sh 3. Copy the resulting ia2_api_all.idl into this directory -4. Resave with Windows line-endings, so that the changes are easier to review -5. Update the compiled idl for each CPU, by building the target +4. Apply the set_selection_ranges.patch using: + git am set_selection_ranges.patch +5. Ensure that all files have Linux line-endings, so that the changes are easier to review +6. Update the compiled idl for each CPU, by building the target third_party\iaccessible2 with each of the following target_cpu options in args.gn: x86, arm64 and x64 For example:
diff --git a/third_party/iaccessible2/ia2_api_all.idl b/third_party/iaccessible2/ia2_api_all.idl index 97bf115..0712123 100644 --- a/third_party/iaccessible2/ia2_api_all.idl +++ b/third_party/iaccessible2/ia2_api_all.idl
@@ -1296,6 +1296,7 @@ IAccessible2\n IAccessible2_2\n IAccessible2_3\n + IAccessible2_4\n IAccessibleAction\n IAccessibleApplication\n IAccessibleComponent\n @@ -2104,6 +2105,36 @@ [out, retval] long *nRanges ); } + +/** + * @brief This interface is an extension of IAccessible2_3 which exposes a + * single method for setting the current selection given a number of selection + * ranges. + * + * This interface is preliminary as it has not been adopted by any standard yet. + */ +[object, uuid(610a7bec-91bb-444d-a336-a0daf13c4c29)] +interface IAccessible2_4 : IAccessible2_3 +{ + /** + * @brief Sets the current selection to the provided ranges. The provided + * ranges don't need to be contained within this accessible. + * @param [in] nRanges + * The length of the array containing the selection ranges. + * @param [in] ranges + * The array of selection ranges, allocated by the client with + * CoTaskMemAlloc and freed by the client with CoTaskMemFree. + * @retval S_OK Returned if the selection was made successfully. + * @retval S_FALSE Returned if the selection could not be made. + * @retval E_INVALIDARG Returned if any of the input arguments are invalid. + */ + HRESULT setSelectionRanges + ( + [in] long nRanges, + [in, size_is(nRanges)] IA2Range* ranges + ); +} + /************************************************************************* * * File Name (AccessibleComponent.idl)
diff --git a/third_party/iaccessible2/set_selection_ranges.patch b/third_party/iaccessible2/set_selection_ranges.patch new file mode 100644 index 0000000..1722941 --- /dev/null +++ b/third_party/iaccessible2/set_selection_ranges.patch
@@ -0,0 +1,49 @@ +diff --git a/third_party/iaccessible2/ia2_api_all.idl b/third_party/iaccessible2/ia2_api_all.idl +index 97bf11594646..07121230dc73 100644 +--- a/third_party/iaccessible2/ia2_api_all.idl ++++ b/third_party/iaccessible2/ia2_api_all.idl +@@ -1296,6 +1296,7 @@ IA2_STATE_PINNED = 0x80000 + IAccessible2\n + IAccessible2_2\n + IAccessible2_3\n ++ IAccessible2_4\n + IAccessibleAction\n + IAccessibleApplication\n + IAccessibleComponent\n +@@ -2104,6 +2105,36 @@ interface IAccessible2_3 : IAccessible2_2 + [out, retval] long *nRanges + ); + } ++ ++/** ++ * @brief This interface is an extension of IAccessible2_3 which exposes a ++ * single method for setting the current selection given a number of selection ++ * ranges. ++ * ++ * This interface is preliminary as it has not been adopted by any standard yet. ++ */ ++[object, uuid(610a7bec-91bb-444d-a336-a0daf13c4c29)] ++interface IAccessible2_4 : IAccessible2_3 ++{ ++ /** ++ * @brief Sets the current selection to the provided ranges. The provided ++ * ranges don't need to be contained within this accessible. ++ * @param [in] nRanges ++ * The length of the array containing the selection ranges. ++ * @param [in] ranges ++ * The array of selection ranges, allocated by the client with ++ * CoTaskMemAlloc and freed by the client with CoTaskMemFree. ++ * @retval S_OK Returned if the selection was made successfully. ++ * @retval S_FALSE Returned if the selection could not be made. ++ * @retval E_INVALIDARG Returned if any of the input arguments are invalid. ++ */ ++ HRESULT setSelectionRanges ++ ( ++ [in] long nRanges, ++ [in, size_is(nRanges)] IA2Range* ranges ++ ); ++} ++ + /************************************************************************* + * + * File Name (AccessibleComponent.idl)
diff --git a/third_party/inspector_protocol/README.chromium b/third_party/inspector_protocol/README.chromium index b7d510e..e1a51ff 100644 --- a/third_party/inspector_protocol/README.chromium +++ b/third_party/inspector_protocol/README.chromium
@@ -2,7 +2,7 @@ Short Name: inspector_protocol URL: https://chromium.googlesource.com/deps/inspector_protocol/ Version: 0 -Revision: dfaf19b7350529d9d454ae79b6747ee57cd1c6d4 +Revision: e1991e6a66f0519e48e9e2c93efff15d62c3b2ca License: BSD License File: LICENSE Security Critical: no
diff --git a/third_party/inspector_protocol/encoding/cbor.cc b/third_party/inspector_protocol/encoding/cbor.cc index 2f1efae..4daf11e 100644 --- a/third_party/inspector_protocol/encoding/cbor.cc +++ b/third_party/inspector_protocol/encoding/cbor.cc
@@ -245,12 +245,12 @@ // A double is encoded with a specific initial byte // (kInitialByteForDouble) plus the 64 bits of payload for its value. -constexpr int kEncodedDoubleSize = 1 + sizeof(uint64_t); +constexpr std::ptrdiff_t kEncodedDoubleSize = 1 + sizeof(uint64_t); // An envelope is encoded with a specific initial byte // (kInitialByteForEnvelope), plus the start byte for a BYTE_STRING with a 32 // bit wide length, plus a 32 bit length for that string. -constexpr int kEncodedEnvelopeHeaderSize = 1 + 1 + sizeof(uint32_t); +constexpr std::ptrdiff_t kEncodedEnvelopeHeaderSize = 1 + 1 + sizeof(uint32_t); void EncodeDouble(double value, std::vector<uint8_t>* out) { // The additional_info=27 indicates 64 bits for the double follow. @@ -606,23 +606,20 @@ span<uint8_t> CBORTokenizer::GetString8() const { assert(token_tag_ == CBORTokenTag::STRING8); - return bytes_.subspan( - status_.pos + (token_byte_length_ - token_start_internal_value_), - token_start_internal_value_); + auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_); + return bytes_.subspan(status_.pos + (token_byte_length_ - length), length); } span<uint8_t> CBORTokenizer::GetString16WireRep() const { assert(token_tag_ == CBORTokenTag::STRING16); - return bytes_.subspan( - status_.pos + (token_byte_length_ - token_start_internal_value_), - token_start_internal_value_); + auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_); + return bytes_.subspan(status_.pos + (token_byte_length_ - length), length); } span<uint8_t> CBORTokenizer::GetBinary() const { assert(token_tag_ == CBORTokenTag::BINARY); - return bytes_.subspan( - status_.pos + (token_byte_length_ - token_start_internal_value_), - token_start_internal_value_); + auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_); + return bytes_.subspan(status_.pos + (token_byte_length_ - length), length); } void CBORTokenizer::ReadNextToken(bool enter_envelope) { @@ -657,7 +654,7 @@ SetToken(CBORTokenTag::NULL_VALUE, 1); return; case kExpectedConversionToBase64Tag: { // BINARY - int64_t bytes_read = + int8_t bytes_read = ReadTokenStart(bytes_.subspan(status_.pos + 1), &token_start_type_, &token_start_internal_value_); int64_t token_byte_length = 1 + bytes_read + token_start_internal_value_; @@ -666,7 +663,7 @@ SetError(Error::CBOR_INVALID_BINARY); return; } - SetToken(CBORTokenTag::BINARY, token_byte_length); + SetToken(CBORTokenTag::BINARY, std::ptrdiff_t(token_byte_length)); return; } case kInitialByteForDouble: { // DOUBLE @@ -697,16 +694,17 @@ SetError(Error::CBOR_INVALID_ENVELOPE); return; } + auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_); SetToken(CBORTokenTag::ENVELOPE, - kEncodedEnvelopeHeaderSize + token_start_internal_value_); + kEncodedEnvelopeHeaderSize + length); return; } default: { span<uint8_t> remainder = bytes_.subspan(status_.pos, bytes_.size() - status_.pos); assert(!remainder.empty()); - int64_t token_start_length = ReadTokenStart(remainder, &token_start_type_, - &token_start_internal_value_); + int8_t token_start_length = ReadTokenStart(remainder, &token_start_type_, + &token_start_internal_value_); bool success = token_start_length != -1; switch (token_start_type_) { case MajorType::UNSIGNED: // INT32. @@ -726,16 +724,17 @@ } SetToken(CBORTokenTag::INT32, token_start_length); return; - case MajorType::STRING: // STRING8. + case MajorType::STRING: { // STRING8. if (!success || remainder.size() < int64_t(token_start_internal_value_)) { SetError(Error::CBOR_INVALID_STRING8); return; } - SetToken(CBORTokenTag::STRING8, - token_start_length + token_start_internal_value_); + auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_); + SetToken(CBORTokenTag::STRING8, token_start_length + length); return; - case MajorType::BYTE_STRING: // STRING16. + } + case MajorType::BYTE_STRING: { // STRING16. if (!success || remainder.size() < int64_t(token_start_internal_value_) || // Must be divisible by 2 since UTF16 is 2 bytes per character. @@ -743,9 +742,10 @@ SetError(Error::CBOR_INVALID_STRING16); return; } - SetToken(CBORTokenTag::STRING16, - token_start_length + token_start_internal_value_); + auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_); + SetToken(CBORTokenTag::STRING16, token_start_length + length); return; + } case MajorType::ARRAY: case MajorType::MAP: case MajorType::TAG: @@ -758,7 +758,7 @@ } void CBORTokenizer::SetToken(CBORTokenTag token_tag, - int64_t token_byte_length) { + std::ptrdiff_t token_byte_length) { token_tag_ = token_tag; token_byte_length_ = token_byte_length; }
diff --git a/third_party/inspector_protocol/encoding/cbor.h b/third_party/inspector_protocol/encoding/cbor.h index e0cf395..4cd567f 100644 --- a/third_party/inspector_protocol/encoding/cbor.h +++ b/third_party/inspector_protocol/encoding/cbor.h
@@ -82,7 +82,7 @@ bool EncodeStop(std::vector<uint8_t>* out); private: - uint64_t byte_size_pos_ = 0; + std::vector<uint8_t>::size_type byte_size_pos_ = 0; }; // This can be used to convert from JSON to CBOR, by passing the @@ -186,13 +186,13 @@ private: void ReadNextToken(bool enter_envelope); - void SetToken(CBORTokenTag token, int64_t token_byte_length); + void SetToken(CBORTokenTag token, std::ptrdiff_t token_byte_length); void SetError(Error error); span<uint8_t> bytes_; CBORTokenTag token_tag_; struct Status status_; - int64_t token_byte_length_; + std::ptrdiff_t token_byte_length_; cbor_internals::MajorType token_start_type_; uint64_t token_start_internal_value_; };
diff --git a/third_party/inspector_protocol/encoding/json_parser.cc b/third_party/inspector_protocol/encoding/json_parser.cc index 82bd184d..dca5ea2 100644 --- a/third_party/inspector_protocol/encoding/json_parser.cc +++ b/third_party/inspector_protocol/encoding/json_parser.cc
@@ -573,13 +573,13 @@ void ParseJSONChars(const Platform* platform, span<uint8_t> chars, JSONParserHandler* handler) { - JsonParser<uint8_t> parser(platform, handler); + JsonParser<uint8_t> parser(deps, handler); parser.Parse(chars.data(), chars.size()); } void ParseJSONChars(const Platform* platform, span<uint16_t> chars, JSONParserHandler* handler) { - JsonParser<uint16_t> parser(platform, handler); + JsonParser<uint16_t> parser(deps, handler); parser.Parse(chars.data(), chars.size()); } } // namespace inspector_protocol
diff --git a/third_party/inspector_protocol/encoding/json_parser.h b/third_party/inspector_protocol/encoding/json_parser.h index e5a8b03..55384be 100644 --- a/third_party/inspector_protocol/encoding/json_parser.h +++ b/third_party/inspector_protocol/encoding/json_parser.h
@@ -13,9 +13,9 @@ namespace inspector_protocol { // JSON parsing routines. -void ParseJSONChars(const Platform* deps, span<uint8_t> chars, +void ParseJSONChars(const Platform* platform, span<uint8_t> chars, JSONParserHandler* handler); -void ParseJSONChars(const Platform* deps, span<uint16_t> chars, +void ParseJSONChars(const Platform* platform, span<uint16_t> chars, JSONParserHandler* handler); } // namespace inspector_protocol
diff --git a/third_party/inspector_protocol/encoding/status.h b/third_party/inspector_protocol/encoding/status.h index bd20f4f..cc8460a 100644 --- a/third_party/inspector_protocol/encoding/status.h +++ b/third_party/inspector_protocol/encoding/status.h
@@ -48,12 +48,12 @@ // A status value with position that can be copied. The default status // is OK. Usually, error status values should come with a valid position. struct Status { - static constexpr int64_t npos() { return -1; } + static constexpr std::ptrdiff_t npos() { return -1; } bool ok() const { return error == Error::OK; } Error error = Error::OK; - int64_t pos = npos(); + std::ptrdiff_t pos = npos(); }; } // namespace inspector_protocol #endif // INSPECTOR_PROTOCOL_ENCODING_STATUS_H_
diff --git a/third_party/inspector_protocol/encoding/str_util.cc b/third_party/inspector_protocol/encoding/str_util.cc new file mode 100644 index 0000000..e4e2043 --- /dev/null +++ b/third_party/inspector_protocol/encoding/str_util.cc
@@ -0,0 +1,19 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "str_util.h" + +#include <cstring> + +namespace inspector_protocol { +bool StrEq(span<uint8_t> left, span<uint8_t> right) { + return left.size() == right.size() && + 0 == memcmp(left.data(), right.data(), left.size()); +} + +bool StrEq(span<uint8_t> left, const char* null_terminated_right) { + return size_t(left.size()) == strlen(null_terminated_right) && + 0 == memcmp(left.data(), null_terminated_right, left.size()); +} +} // namespace inspector_protocol
diff --git a/third_party/inspector_protocol/encoding/str_util.h b/third_party/inspector_protocol/encoding/str_util.h new file mode 100644 index 0000000..f377541 --- /dev/null +++ b/third_party/inspector_protocol/encoding/str_util.h
@@ -0,0 +1,17 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef INSPECTOR_PROTOCOL_ENCODING_STR_UTIL_H_ +#define INSPECTOR_PROTOCOL_ENCODING_STR_UTIL_H_ + +#include <cstdint> + +#include "span.h" + +namespace inspector_protocol { +// Returns true iff |left| and right have the same contents, byte for byte. +bool StrEq(span<uint8_t> left, span<uint8_t> right); +bool StrEq(span<uint8_t> left, const char* null_terminated_right); +} // namespace inspector_protocol +#endif // INSPECTOR_PROTOCOL_ENCODING_STR_UTIL_H_
diff --git a/third_party/inspector_protocol/inspector_protocol.gni b/third_party/inspector_protocol/inspector_protocol.gni index b4acdf0b..ecee942 100644 --- a/third_party/inspector_protocol/inspector_protocol.gni +++ b/third_party/inspector_protocol/inspector_protocol.gni
@@ -35,6 +35,8 @@ "$inspector_protocol_dir/lib/base_string_adapter_h.template", "$inspector_protocol_dir/lib/Allocator_h.template", "$inspector_protocol_dir/lib/Array_h.template", + "$inspector_protocol_dir/lib/CBOR_h.template", + "$inspector_protocol_dir/lib/CBOR_cpp.template", "$inspector_protocol_dir/lib/DispatcherBase_cpp.template", "$inspector_protocol_dir/lib/DispatcherBase_h.template", "$inspector_protocol_dir/lib/ErrorSupport_cpp.template",
diff --git a/third_party/inspector_protocol/inspector_protocol.gypi b/third_party/inspector_protocol/inspector_protocol.gypi index 1359e16..3d0a60e 100644 --- a/third_party/inspector_protocol/inspector_protocol.gypi +++ b/third_party/inspector_protocol/inspector_protocol.gypi
@@ -7,6 +7,8 @@ 'inspector_protocol_files': [ 'lib/Allocator_h.template', 'lib/Array_h.template', + 'lib/CBOR_h.template', + 'lib/CBOR_cpp.template', 'lib/DispatcherBase_cpp.template', 'lib/DispatcherBase_h.template', 'lib/ErrorSupport_cpp.template',
diff --git a/third_party/inspector_protocol/lib/CBOR_cpp.template b/third_party/inspector_protocol/lib/CBOR_cpp.template new file mode 100644 index 0000000..3fbdc551 --- /dev/null +++ b/third_party/inspector_protocol/lib/CBOR_cpp.template
@@ -0,0 +1,778 @@ +// This file is generated by CBOR_cpp.template. + +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +{% for namespace in config.protocol.namespace %} +namespace {{namespace}} { +{% endfor %} + +using cbor_internals::MajorType; +using cbor_internals::ReadTokenStart; +using cbor_internals::WriteTokenStart; + +// ==== cbor.cc ==== + +namespace { +using cbor_internals::MajorType; + +// Indicates the number of bits the "initial byte" needs to be shifted to the +// right after applying |kMajorTypeMask| to produce the major type in the +// lowermost bits. +static constexpr uint8_t kMajorTypeBitShift = 5u; +// Mask selecting the low-order 5 bits of the "initial byte", which is where +// the additional information is encoded. +static constexpr uint8_t kAdditionalInformationMask = 0x1f; +// Mask selecting the high-order 3 bits of the "initial byte", which indicates +// the major type of the encoded value. +static constexpr uint8_t kMajorTypeMask = 0xe0; +// Indicates the integer is in the following byte. +static constexpr uint8_t kAdditionalInformation1Byte = 24u; +// Indicates the integer is in the next 2 bytes. +static constexpr uint8_t kAdditionalInformation2Bytes = 25u; +// Indicates the integer is in the next 4 bytes. +static constexpr uint8_t kAdditionalInformation4Bytes = 26u; +// Indicates the integer is in the next 8 bytes. +static constexpr uint8_t kAdditionalInformation8Bytes = 27u; + +// Encodes the initial byte, consisting of the |type| in the first 3 bits +// followed by 5 bits of |additional_info|. +constexpr uint8_t EncodeInitialByte(MajorType type, uint8_t additional_info) { + return (uint8_t(type) << kMajorTypeBitShift) | + (additional_info & kAdditionalInformationMask); +} + +// See RFC 7049 Section 2.3, Table 2. +static constexpr uint8_t kEncodedTrue = + EncodeInitialByte(MajorType::SIMPLE_VALUE, 21); +static constexpr uint8_t kEncodedFalse = + EncodeInitialByte(MajorType::SIMPLE_VALUE, 20); +static constexpr uint8_t kEncodedNull = + EncodeInitialByte(MajorType::SIMPLE_VALUE, 22); +static constexpr uint8_t kInitialByteForDouble = + EncodeInitialByte(MajorType::SIMPLE_VALUE, 27); +} // namespace + +uint8_t EncodeTrue() { return kEncodedTrue; } +uint8_t EncodeFalse() { return kEncodedFalse; } +uint8_t EncodeNull() { return kEncodedNull; } + +namespace { +// TAG 24 indicates that what follows is a byte string which is +// encoded in CBOR format. We use this as a wrapper for +// maps and arrays, allowing us to skip them, because the +// byte string carries its size (byte length). +// https://tools.ietf.org/html/rfc7049#section-2.4.4.1 +static constexpr uint8_t kInitialByteForEnvelope = + EncodeInitialByte(MajorType::TAG, 24); +// The initial byte for a byte string with at most 2^32 bytes +// of payload. This is used for envelope encoding, even if +// the byte string is shorter. +static constexpr uint8_t kInitialByteFor32BitLengthByteString = + EncodeInitialByte(MajorType::BYTE_STRING, 26); + +// See RFC 7049 Section 2.2.1, indefinite length arrays / maps have additional +// info = 31. +static constexpr uint8_t kInitialByteIndefiniteLengthArray = + EncodeInitialByte(MajorType::ARRAY, 31); +static constexpr uint8_t kInitialByteIndefiniteLengthMap = + EncodeInitialByte(MajorType::MAP, 31); +// See RFC 7049 Section 2.3, Table 1; this is used for finishing indefinite +// length maps / arrays. +static constexpr uint8_t kStopByte = + EncodeInitialByte(MajorType::SIMPLE_VALUE, 31); +} // namespace + +uint8_t EncodeIndefiniteLengthArrayStart() { + return kInitialByteIndefiniteLengthArray; +} + +uint8_t EncodeIndefiniteLengthMapStart() { + return kInitialByteIndefiniteLengthMap; +} + +uint8_t EncodeStop() { return kStopByte; } + +namespace { +// See RFC 7049 Table 3 and Section 2.4.4.2. This is used as a prefix for +// arbitrary binary data encoded as BYTE_STRING. +static constexpr uint8_t kExpectedConversionToBase64Tag = + EncodeInitialByte(MajorType::TAG, 22); + +// When parsing CBOR, we limit recursion depth for objects and arrays +// to this constant. +static constexpr int kStackLimit = 1000; + +// Writes the bytes for |v| to |out|, starting with the most significant byte. +// See also: https://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html +template <typename T> +void WriteBytesMostSignificantByteFirst(T v, std::vector<uint8_t>* out) { + for (int shift_bytes = sizeof(T) - 1; shift_bytes >= 0; --shift_bytes) + out->push_back(0xff & (v >> (shift_bytes * 8))); +} +} // namespace + +namespace cbor_internals { +// Writes the start of a token with |type|. The |value| may indicate the size, +// or it may be the payload if the value is an unsigned integer. +void WriteTokenStart(MajorType type, uint64_t value, + std::vector<uint8_t>* encoded) { + if (value < 24) { + // Values 0-23 are encoded directly into the additional info of the + // initial byte. + encoded->push_back(EncodeInitialByte(type, /*additiona_info=*/value)); + return; + } + if (value <= std::numeric_limits<uint8_t>::max()) { + // Values 24-255 are encoded with one initial byte, followed by the value. + encoded->push_back(EncodeInitialByte(type, kAdditionalInformation1Byte)); + encoded->push_back(value); + return; + } + if (value <= std::numeric_limits<uint16_t>::max()) { + // Values 256-65535: 1 initial byte + 2 bytes payload. + encoded->push_back(EncodeInitialByte(type, kAdditionalInformation2Bytes)); + WriteBytesMostSignificantByteFirst<uint16_t>(value, encoded); + return; + } + if (value <= std::numeric_limits<uint32_t>::max()) { + // 32 bit uint: 1 initial byte + 4 bytes payload. + encoded->push_back(EncodeInitialByte(type, kAdditionalInformation4Bytes)); + WriteBytesMostSignificantByteFirst<uint32_t>(static_cast<uint32_t>(value), + encoded); + return; + } + // 64 bit uint: 1 initial byte + 8 bytes payload. + encoded->push_back(EncodeInitialByte(type, kAdditionalInformation8Bytes)); + WriteBytesMostSignificantByteFirst<uint64_t>(value, encoded); +} +} // namespace cbor_internals + +namespace { +// Extracts sizeof(T) bytes from |in| to extract a value of type T +// (e.g. uint64_t, uint32_t, ...), most significant byte first. +// See also: https://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html +template <typename T> +T ReadBytesMostSignificantByteFirst(span<uint8_t> in) { + assert(size_t(in.size()) >= sizeof(T)); + T result = 0; + for (size_t shift_bytes = 0; shift_bytes < sizeof(T); ++shift_bytes) + result |= T(in[sizeof(T) - 1 - shift_bytes]) << (shift_bytes * 8); + return result; +} +} // namespace + +namespace cbor_internals { +int8_t ReadTokenStart(span<uint8_t> bytes, MajorType* type, uint64_t* value) { + if (bytes.empty()) return -1; + uint8_t initial_byte = bytes[0]; + *type = MajorType((initial_byte & kMajorTypeMask) >> kMajorTypeBitShift); + + uint8_t additional_information = initial_byte & kAdditionalInformationMask; + if (additional_information < 24) { + // Values 0-23 are encoded directly into the additional info of the + // initial byte. + *value = additional_information; + return 1; + } + if (additional_information == kAdditionalInformation1Byte) { + // Values 24-255 are encoded with one initial byte, followed by the value. + if (bytes.size() < 2) return -1; + *value = ReadBytesMostSignificantByteFirst<uint8_t>(bytes.subspan(1)); + return 2; + } + if (additional_information == kAdditionalInformation2Bytes) { + // Values 256-65535: 1 initial byte + 2 bytes payload. + if (static_cast<size_t>(bytes.size()) < 1 + sizeof(uint16_t)) return -1; + *value = ReadBytesMostSignificantByteFirst<uint16_t>(bytes.subspan(1)); + return 3; + } + if (additional_information == kAdditionalInformation4Bytes) { + // 32 bit uint: 1 initial byte + 4 bytes payload. + if (static_cast<size_t>(bytes.size()) < 1 + sizeof(uint32_t)) return -1; + *value = ReadBytesMostSignificantByteFirst<uint32_t>(bytes.subspan(1)); + return 5; + } + if (additional_information == kAdditionalInformation8Bytes) { + // 64 bit uint: 1 initial byte + 8 bytes payload. + if (static_cast<size_t>(bytes.size()) < 1 + sizeof(uint64_t)) return -1; + *value = ReadBytesMostSignificantByteFirst<uint64_t>(bytes.subspan(1)); + return 9; + } + return -1; +} +} // namespace cbor_internals + +using cbor_internals::MajorType; +using cbor_internals::WriteTokenStart; +using cbor_internals::ReadTokenStart; + +void EncodeInt32(int32_t value, std::vector<uint8_t>* out) { + if (value >= 0) { + WriteTokenStart(MajorType::UNSIGNED, value, out); + } else { + uint64_t representation = static_cast<uint64_t>(-(value + 1)); + WriteTokenStart(MajorType::NEGATIVE, representation, out); + } +} + +void EncodeString16(span<uint16_t> in, std::vector<uint8_t>* out) { + uint64_t byte_length = static_cast<uint64_t>(in.size_bytes()); + WriteTokenStart(MajorType::BYTE_STRING, byte_length, out); + // When emitting UTF16 characters, we always write the least significant byte + // first; this is because it's the native representation for X86. + // TODO(johannes): Implement a more efficient thing here later, e.g. + // casting *iff* the machine has this byte order. + // The wire format for UTF16 chars will probably remain the same + // (least significant byte first) since this way we can have + // golden files, unittests, etc. that port easily and universally. + // See also: + // https://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html + for (const uint16_t two_bytes : in) { + out->push_back(two_bytes); + out->push_back(two_bytes >> 8); + } +} + +void EncodeString8(span<uint8_t> in, std::vector<uint8_t>* out) { + WriteTokenStart(MajorType::STRING, static_cast<uint64_t>(in.size_bytes()), + out); + out->insert(out->end(), in.begin(), in.end()); +} + +void EncodeBinary(span<uint8_t> in, std::vector<uint8_t>* out) { + out->push_back(kExpectedConversionToBase64Tag); + uint64_t byte_length = static_cast<uint64_t>(in.size_bytes()); + WriteTokenStart(MajorType::BYTE_STRING, byte_length, out); + out->insert(out->end(), in.begin(), in.end()); +} + +// A double is encoded with a specific initial byte +// (kInitialByteForDouble) plus the 64 bits of payload for its value. +constexpr std::ptrdiff_t kEncodedDoubleSize = 1 + sizeof(uint64_t); + +// An envelope is encoded with a specific initial byte +// (kInitialByteForEnvelope), plus the start byte for a BYTE_STRING with a 32 +// bit wide length, plus a 32 bit length for that string. +constexpr std::ptrdiff_t kEncodedEnvelopeHeaderSize = 1 + 1 + sizeof(uint32_t); + +void EncodeDouble(double value, std::vector<uint8_t>* out) { + // The additional_info=27 indicates 64 bits for the double follow. + // See RFC 7049 Section 2.3, Table 1. + out->push_back(kInitialByteForDouble); + union { + double from_double; + uint64_t to_uint64; + } reinterpret; + reinterpret.from_double = value; + WriteBytesMostSignificantByteFirst<uint64_t>(reinterpret.to_uint64, out); +} + +void EnvelopeEncoder::EncodeStart(std::vector<uint8_t>* out) { + assert(byte_size_pos_ == 0); + out->push_back(kInitialByteForEnvelope); + out->push_back(kInitialByteFor32BitLengthByteString); + byte_size_pos_ = out->size(); + out->resize(out->size() + sizeof(uint32_t)); +} + +bool EnvelopeEncoder::EncodeStop(std::vector<uint8_t>* out) { + assert(byte_size_pos_ != 0); + // The byte size is the size of the payload, that is, all the + // bytes that were written past the byte size position itself. + uint64_t byte_size = out->size() - (byte_size_pos_ + sizeof(uint32_t)); + // We store exactly 4 bytes, so at most INT32MAX, with most significant + // byte first. + if (byte_size > std::numeric_limits<uint32_t>::max()) return false; + for (int shift_bytes = sizeof(uint32_t) - 1; shift_bytes >= 0; + --shift_bytes) { + (*out)[byte_size_pos_++] = 0xff & (byte_size >> (shift_bytes * 8)); + } + return true; +} + +namespace { +class JSONToCBOREncoder : public JSONParserHandler { + public: + JSONToCBOREncoder(std::vector<uint8_t>* out, Status* status) + : out_(out), status_(status) { + *status_ = Status(); + } + + void HandleObjectBegin() override { + envelopes_.emplace_back(); + envelopes_.back().EncodeStart(out_); + out_->push_back(kInitialByteIndefiniteLengthMap); + } + + void HandleObjectEnd() override { + out_->push_back(kStopByte); + assert(!envelopes_.empty()); + envelopes_.back().EncodeStop(out_); + envelopes_.pop_back(); + }; + + void HandleArrayBegin() override { + envelopes_.emplace_back(); + envelopes_.back().EncodeStart(out_); + out_->push_back(kInitialByteIndefiniteLengthArray); + } + + void HandleArrayEnd() override { + out_->push_back(kStopByte); + assert(!envelopes_.empty()); + envelopes_.back().EncodeStop(out_); + envelopes_.pop_back(); + }; + + void HandleString16(std::vector<uint16_t> chars) override { + for (uint16_t ch : chars) { + if (ch >= 0x7f) { + // If there's at least one non-7bit character, we encode as UTF16. + EncodeString16(span<uint16_t>(chars.data(), chars.size()), out_); + return; + } + } + std::vector<uint8_t> sevenbit_chars(chars.begin(), chars.end()); + EncodeString8(span<uint8_t>(sevenbit_chars.data(), sevenbit_chars.size()), + out_); + } + + void HandleBinary(std::vector<uint8_t> bytes) override { + EncodeBinary(span<uint8_t>(bytes.data(), bytes.size()), out_); + } + + void HandleDouble(double value) override { EncodeDouble(value, out_); }; + + void HandleInt32(int32_t value) override { EncodeInt32(value, out_); } + + void HandleBool(bool value) override { + // See RFC 7049 Section 2.3, Table 2. + out_->push_back(value ? kEncodedTrue : kEncodedFalse); + } + + void HandleNull() override { + // See RFC 7049 Section 2.3, Table 2. + out_->push_back(kEncodedNull); + } + + void HandleError(Status error) override { + assert(!error.ok()); + *status_ = error; + out_->clear(); + } + + private: + std::vector<uint8_t>* out_; + std::vector<EnvelopeEncoder> envelopes_; + Status* status_; +}; +} // namespace + +std::unique_ptr<JSONParserHandler> NewJSONToCBOREncoder( + std::vector<uint8_t>* out, Status* status) { + return std::make_unique<JSONToCBOREncoder>(out, status); +} + +namespace { +// Below are three parsing routines for CBOR, which cover enough +// to roundtrip JSON messages. +bool ParseMap(int32_t stack_depth, CBORTokenizer* tokenizer, + JSONParserHandler* out); +bool ParseArray(int32_t stack_depth, CBORTokenizer* tokenizer, + JSONParserHandler* out); +bool ParseValue(int32_t stack_depth, CBORTokenizer* tokenizer, + JSONParserHandler* out); + +void ParseUTF16String(CBORTokenizer* tokenizer, JSONParserHandler* out) { + std::vector<uint16_t> value; + span<uint8_t> rep = tokenizer->GetString16WireRep(); + for (std::ptrdiff_t ii = 0; ii < rep.size(); ii += 2) + value.push_back((rep[ii + 1] << 8) | rep[ii]); + out->HandleString16(std::move(value)); + tokenizer->Next(); +} + +// For now this method only covers US-ASCII. Later, we may allow UTF8. +bool ParseASCIIString(CBORTokenizer* tokenizer, JSONParserHandler* out) { + assert(tokenizer->TokenTag() == CBORTokenTag::STRING8); + std::vector<uint16_t> value16; + for (uint8_t ch : tokenizer->GetString8()) { + // We only accept us-ascii (7 bit) strings here. Other strings must + // be encoded with 16 bit (the BYTE_STRING case). + if (ch >= 0x7f) { + out->HandleError( + Status{Error::CBOR_STRING8_MUST_BE_7BIT, tokenizer->Status().pos}); + return false; + } + value16.push_back(ch); + } + out->HandleString16(std::move(value16)); + tokenizer->Next(); + return true; +} + +bool ParseValue(int32_t stack_depth, CBORTokenizer* tokenizer, + JSONParserHandler* out) { + if (stack_depth > kStackLimit) { + out->HandleError( + Status{Error::CBOR_STACK_LIMIT_EXCEEDED, tokenizer->Status().pos}); + return false; + } + // Skip past the envelope to get to what's inside. + if (tokenizer->TokenTag() == CBORTokenTag::ENVELOPE) + tokenizer->EnterEnvelope(); + switch (tokenizer->TokenTag()) { + case CBORTokenTag::ERROR_VALUE: + out->HandleError(tokenizer->Status()); + return false; + case CBORTokenTag::DONE: + out->HandleError(Status{Error::CBOR_UNEXPECTED_EOF_EXPECTED_VALUE, + tokenizer->Status().pos}); + return false; + case CBORTokenTag::TRUE_VALUE: + out->HandleBool(true); + tokenizer->Next(); + return true; + case CBORTokenTag::FALSE_VALUE: + out->HandleBool(false); + tokenizer->Next(); + return true; + case CBORTokenTag::NULL_VALUE: + out->HandleNull(); + tokenizer->Next(); + return true; + case CBORTokenTag::INT32: + out->HandleInt32(tokenizer->GetInt32()); + tokenizer->Next(); + return true; + case CBORTokenTag::DOUBLE: + out->HandleDouble(tokenizer->GetDouble()); + tokenizer->Next(); + return true; + case CBORTokenTag::STRING8: + return ParseASCIIString(tokenizer, out); + case CBORTokenTag::STRING16: + ParseUTF16String(tokenizer, out); + return true; + case CBORTokenTag::BINARY: { + span<uint8_t> binary = tokenizer->GetBinary(); + out->HandleBinary(std::vector<uint8_t>(binary.begin(), binary.end())); + tokenizer->Next(); + return true; + } + case CBORTokenTag::MAP_START: + return ParseMap(stack_depth + 1, tokenizer, out); + case CBORTokenTag::ARRAY_START: + return ParseArray(stack_depth + 1, tokenizer, out); + default: + out->HandleError( + Status{Error::CBOR_UNSUPPORTED_VALUE, tokenizer->Status().pos}); + return false; + } +} + +// |bytes| must start with the indefinite length array byte, so basically, +// ParseArray may only be called after an indefinite length array has been +// detected. +bool ParseArray(int32_t stack_depth, CBORTokenizer* tokenizer, + JSONParserHandler* out) { + assert(tokenizer->TokenTag() == CBORTokenTag::ARRAY_START); + tokenizer->Next(); + out->HandleArrayBegin(); + while (tokenizer->TokenTag() != CBORTokenTag::STOP) { + if (tokenizer->TokenTag() == CBORTokenTag::DONE) { + out->HandleError( + Status{Error::CBOR_UNEXPECTED_EOF_IN_ARRAY, tokenizer->Status().pos}); + return false; + } + if (tokenizer->TokenTag() == CBORTokenTag::ERROR_VALUE) { + out->HandleError(tokenizer->Status()); + return false; + } + // Parse value. + if (!ParseValue(stack_depth, tokenizer, out)) return false; + } + out->HandleArrayEnd(); + tokenizer->Next(); + return true; +} + +// |bytes| must start with the indefinite length array byte, so basically, +// ParseArray may only be called after an indefinite length array has been +// detected. +bool ParseMap(int32_t stack_depth, CBORTokenizer* tokenizer, + JSONParserHandler* out) { + assert(tokenizer->TokenTag() == CBORTokenTag::MAP_START); + out->HandleObjectBegin(); + tokenizer->Next(); + while (tokenizer->TokenTag() != CBORTokenTag::STOP) { + if (tokenizer->TokenTag() == CBORTokenTag::DONE) { + out->HandleError( + Status{Error::CBOR_UNEXPECTED_EOF_IN_MAP, tokenizer->Status().pos}); + return false; + } + if (tokenizer->TokenTag() == CBORTokenTag::ERROR_VALUE) { + out->HandleError(tokenizer->Status()); + return false; + } + // Parse key. + if (tokenizer->TokenTag() == CBORTokenTag::STRING8) { + if (!ParseASCIIString(tokenizer, out)) return false; + } else if (tokenizer->TokenTag() == CBORTokenTag::STRING16) { + ParseUTF16String(tokenizer, out); + } else { + out->HandleError( + Status{Error::CBOR_INVALID_MAP_KEY, tokenizer->Status().pos}); + return false; + } + // Parse value. + if (!ParseValue(stack_depth, tokenizer, out)) return false; + } + out->HandleObjectEnd(); + tokenizer->Next(); + return true; +} +} // namespace + +void ParseCBOR(span<uint8_t> bytes, JSONParserHandler* json_out) { + if (bytes.empty()) { + json_out->HandleError(Status{Error::CBOR_NO_INPUT, 0}); + return; + } + if (bytes[0] != kInitialByteForEnvelope) { + json_out->HandleError(Status{Error::CBOR_INVALID_START_BYTE, 0}); + return; + } + CBORTokenizer tokenizer(bytes); + if (tokenizer.TokenTag() == CBORTokenTag::ERROR_VALUE) { + json_out->HandleError(tokenizer.Status()); + return; + } + // We checked for the envelope start byte above, so the tokenizer + // must agree here, since it's not an error. + assert(tokenizer.TokenTag() == CBORTokenTag::ENVELOPE); + tokenizer.EnterEnvelope(); + if (tokenizer.TokenTag() != CBORTokenTag::MAP_START) { + json_out->HandleError( + Status{Error::CBOR_MAP_START_EXPECTED, tokenizer.Status().pos}); + return; + } + if (!ParseMap(/*stack_depth=*/1, &tokenizer, json_out)) return; + if (tokenizer.TokenTag() == CBORTokenTag::DONE) return; + if (tokenizer.TokenTag() == CBORTokenTag::ERROR_VALUE) { + json_out->HandleError(tokenizer.Status()); + return; + } + json_out->HandleError( + Status{Error::CBOR_TRAILING_JUNK, tokenizer.Status().pos}); +} + +CBORTokenizer::CBORTokenizer(span<uint8_t> bytes) : bytes_(bytes) { + ReadNextToken(/*enter_envelope=*/false); +} +CBORTokenizer::~CBORTokenizer() {} + +CBORTokenTag CBORTokenizer::TokenTag() const { return token_tag_; } + +void CBORTokenizer::Next() { + if (token_tag_ == CBORTokenTag::ERROR_VALUE || token_tag_ == CBORTokenTag::DONE) + return; + ReadNextToken(/*enter_envelope=*/false); +} + +void CBORTokenizer::EnterEnvelope() { + assert(token_tag_ == CBORTokenTag::ENVELOPE); + ReadNextToken(/*enter_envelope=*/true); +} + +Status CBORTokenizer::Status() const { return status_; } + +int32_t CBORTokenizer::GetInt32() const { + assert(token_tag_ == CBORTokenTag::INT32); + // The range checks happen in ::ReadNextToken(). + return static_cast<uint32_t>( + token_start_type_ == MajorType::UNSIGNED + ? token_start_internal_value_ + : -static_cast<int64_t>(token_start_internal_value_) - 1); +} + +double CBORTokenizer::GetDouble() const { + assert(token_tag_ == CBORTokenTag::DOUBLE); + union { + uint64_t from_uint64; + double to_double; + } reinterpret; + reinterpret.from_uint64 = ReadBytesMostSignificantByteFirst<uint64_t>( + bytes_.subspan(status_.pos + 1)); + return reinterpret.to_double; +} + +span<uint8_t> CBORTokenizer::GetString8() const { + assert(token_tag_ == CBORTokenTag::STRING8); + auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_); + return bytes_.subspan(status_.pos + (token_byte_length_ - length), length); +} + +span<uint8_t> CBORTokenizer::GetString16WireRep() const { + assert(token_tag_ == CBORTokenTag::STRING16); + auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_); + return bytes_.subspan(status_.pos + (token_byte_length_ - length), length); +} + +span<uint8_t> CBORTokenizer::GetBinary() const { + assert(token_tag_ == CBORTokenTag::BINARY); + auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_); + return bytes_.subspan(status_.pos + (token_byte_length_ - length), length); +} + +void CBORTokenizer::ReadNextToken(bool enter_envelope) { + if (enter_envelope) { + status_.pos += kEncodedEnvelopeHeaderSize; + } else { + status_.pos = + status_.pos == Status::npos() ? 0 : status_.pos + token_byte_length_; + } + status_.error = Error::OK; + if (status_.pos >= bytes_.size()) { + token_tag_ = CBORTokenTag::DONE; + return; + } + switch (bytes_[status_.pos]) { + case kStopByte: + SetToken(CBORTokenTag::STOP, 1); + return; + case kInitialByteIndefiniteLengthMap: + SetToken(CBORTokenTag::MAP_START, 1); + return; + case kInitialByteIndefiniteLengthArray: + SetToken(CBORTokenTag::ARRAY_START, 1); + return; + case kEncodedTrue: + SetToken(CBORTokenTag::TRUE_VALUE, 1); + return; + case kEncodedFalse: + SetToken(CBORTokenTag::FALSE_VALUE, 1); + return; + case kEncodedNull: + SetToken(CBORTokenTag::NULL_VALUE, 1); + return; + case kExpectedConversionToBase64Tag: { // BINARY + int8_t bytes_read = + ReadTokenStart(bytes_.subspan(status_.pos + 1), &token_start_type_, + &token_start_internal_value_); + int64_t token_byte_length = 1 + bytes_read + token_start_internal_value_; + if (-1 == bytes_read || token_start_type_ != MajorType::BYTE_STRING || + status_.pos + token_byte_length > bytes_.size()) { + SetError(Error::CBOR_INVALID_BINARY); + return; + } + SetToken(CBORTokenTag::BINARY, std::ptrdiff_t(token_byte_length)); + return; + } + case kInitialByteForDouble: { // DOUBLE + if (status_.pos + kEncodedDoubleSize > bytes_.size()) { + SetError(Error::CBOR_INVALID_DOUBLE); + return; + } + SetToken(CBORTokenTag::DOUBLE, kEncodedDoubleSize); + return; + } + case kInitialByteForEnvelope: { // ENVELOPE + if (status_.pos + kEncodedEnvelopeHeaderSize > bytes_.size()) { + SetError(Error::CBOR_INVALID_ENVELOPE); + return; + } + // The envelope must be a byte string with 32 bit length. + if (bytes_[status_.pos + 1] != kInitialByteFor32BitLengthByteString) { + SetError(Error::CBOR_INVALID_ENVELOPE); + return; + } + // Read the length of the byte string. + token_start_internal_value_ = ReadBytesMostSignificantByteFirst<uint32_t>( + bytes_.subspan(status_.pos + 2)); + // Make sure the payload is contained within the message. + if (token_start_internal_value_ + kEncodedEnvelopeHeaderSize + + status_.pos > + size_t(bytes_.size())) { + SetError(Error::CBOR_INVALID_ENVELOPE); + return; + } + auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_); + SetToken(CBORTokenTag::ENVELOPE, + kEncodedEnvelopeHeaderSize + length); + return; + } + default: { + span<uint8_t> remainder = + bytes_.subspan(status_.pos, bytes_.size() - status_.pos); + assert(!remainder.empty()); + int8_t token_start_length = ReadTokenStart(remainder, &token_start_type_, + &token_start_internal_value_); + bool success = token_start_length != -1; + switch (token_start_type_) { + case MajorType::UNSIGNED: // INT32. + if (!success || std::numeric_limits<int32_t>::max() < + token_start_internal_value_) { + SetError(Error::CBOR_INVALID_INT32); + return; + } + SetToken(CBORTokenTag::INT32, token_start_length); + return; + case MajorType::NEGATIVE: // INT32. + if (!success || + std::numeric_limits<int32_t>::min() > + -static_cast<int64_t>(token_start_internal_value_) - 1) { + SetError(Error::CBOR_INVALID_INT32); + return; + } + SetToken(CBORTokenTag::INT32, token_start_length); + return; + case MajorType::STRING: { // STRING8. + if (!success || + remainder.size() < int64_t(token_start_internal_value_)) { + SetError(Error::CBOR_INVALID_STRING8); + return; + } + auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_); + SetToken(CBORTokenTag::STRING8, token_start_length + length); + return; + } + case MajorType::BYTE_STRING: { // STRING16. + if (!success || + remainder.size() < int64_t(token_start_internal_value_) || + // Must be divisible by 2 since UTF16 is 2 bytes per character. + token_start_internal_value_ & 1) { + SetError(Error::CBOR_INVALID_STRING16); + return; + } + auto length = static_cast<std::ptrdiff_t>(token_start_internal_value_); + SetToken(CBORTokenTag::STRING16, token_start_length + length); + return; + } + case MajorType::ARRAY: + case MajorType::MAP: + case MajorType::TAG: + case MajorType::SIMPLE_VALUE: + SetError(Error::CBOR_UNSUPPORTED_VALUE); + return; + } + } + } +} + +void CBORTokenizer::SetToken(CBORTokenTag token_tag, + std::ptrdiff_t token_byte_length) { + token_tag_ = token_tag; + token_byte_length_ = token_byte_length; +} + +void CBORTokenizer::SetError(Error error) { + token_tag_ = CBORTokenTag::ERROR_VALUE; + status_.error = error; +} + +{% for namespace in config.protocol.namespace %} +} // namespace {{namespace}} +{% endfor %}
diff --git a/third_party/inspector_protocol/lib/CBOR_h.template b/third_party/inspector_protocol/lib/CBOR_h.template new file mode 100644 index 0000000..406ac53 --- /dev/null +++ b/third_party/inspector_protocol/lib/CBOR_h.template
@@ -0,0 +1,350 @@ +// This file is generated by CBOR_h.template. + +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef {{"_".join(config.protocol.namespace)}}_CBOR_h +#define {{"_".join(config.protocol.namespace)}}_CBOR_h + +#include <cstddef> +#include <cstdint> +#include <memory> +#include <vector> + +{% for namespace in config.protocol.namespace %} +namespace {{namespace}} { +{% endfor %} + +// ===== status.h ===== + +// Error codes. +enum class Error { + OK = 0, + // JSON parsing errors - json_parser.{h,cc}. + JSON_PARSER_UNPROCESSED_INPUT_REMAINS = 0x01, + JSON_PARSER_STACK_LIMIT_EXCEEDED = 0x02, + JSON_PARSER_NO_INPUT = 0x03, + JSON_PARSER_INVALID_TOKEN = 0x04, + JSON_PARSER_INVALID_NUMBER = 0x05, + JSON_PARSER_INVALID_STRING = 0x06, + JSON_PARSER_UNEXPECTED_ARRAY_END = 0x07, + JSON_PARSER_COMMA_OR_ARRAY_END_EXPECTED = 0x08, + JSON_PARSER_STRING_LITERAL_EXPECTED = 0x09, + JSON_PARSER_COLON_EXPECTED = 0x0a, + JSON_PARSER_UNEXPECTED_OBJECT_END = 0x0b, + JSON_PARSER_COMMA_OR_OBJECT_END_EXPECTED = 0x0c, + JSON_PARSER_VALUE_EXPECTED = 0x0d, + + CBOR_INVALID_INT32 = 0x0e, + CBOR_INVALID_DOUBLE = 0x0f, + CBOR_INVALID_ENVELOPE = 0x10, + CBOR_INVALID_STRING8 = 0x11, + CBOR_INVALID_STRING16 = 0x12, + CBOR_INVALID_BINARY = 0x13, + CBOR_UNSUPPORTED_VALUE = 0x14, + CBOR_NO_INPUT = 0x15, + CBOR_INVALID_START_BYTE = 0x16, + CBOR_UNEXPECTED_EOF_EXPECTED_VALUE = 0x17, + CBOR_UNEXPECTED_EOF_IN_ARRAY = 0x18, + CBOR_UNEXPECTED_EOF_IN_MAP = 0x19, + CBOR_INVALID_MAP_KEY = 0x1a, + CBOR_STACK_LIMIT_EXCEEDED = 0x1b, + CBOR_STRING8_MUST_BE_7BIT = 0x1c, + CBOR_TRAILING_JUNK = 0x1d, + CBOR_MAP_START_EXPECTED = 0x1e, +}; + +// A status value with position that can be copied. The default status +// is OK. Usually, error status values should come with a valid position. +struct Status { + static constexpr std::ptrdiff_t npos() { return -1; } + + bool ok() const { return error == Error::OK; } + + Error error = Error::OK; + std::ptrdiff_t pos = npos(); +}; + +// ===== span.h ===== + +// This template is similar to std::span, which will be included in C++20. Like +// std::span it uses ptrdiff_t, which is signed (and thus a bit annoying +// sometimes when comparing with size_t), but other than this it's much simpler. +template <typename T> +class span { + public: + using index_type = std::ptrdiff_t; + + span() : data_(nullptr), size_(0) {} + span(const T* data, index_type size) : data_(data), size_(size) {} + + const T* data() const { return data_; } + + const T* begin() const { return data_; } + const T* end() const { return data_ + size_; } + + const T& operator[](index_type idx) const { return data_[idx]; } + + span<T> subspan(index_type offset, index_type count) const { + return span(data_ + offset, count); + } + + span<T> subspan(index_type offset) const { + return span(data_ + offset, size_ - offset); + } + + bool empty() const { return size_ == 0; } + + index_type size() const { return size_; } + index_type size_bytes() const { return size_ * sizeof(T); } + + private: + const T* data_; + index_type size_; +}; + +// ===== json_parser_handler.h ===== + +// Handler interface for JSON parser events. See also json_parser.h. +class JSONParserHandler { + public: + virtual ~JSONParserHandler() = default; + virtual void HandleObjectBegin() = 0; + virtual void HandleObjectEnd() = 0; + virtual void HandleArrayBegin() = 0; + virtual void HandleArrayEnd() = 0; + // TODO(johannes): Support utf8 (requires utf16->utf8 conversion + // internally, including handling mismatched surrogate pairs). + virtual void HandleString16(std::vector<uint16_t> chars) = 0; + virtual void HandleBinary(std::vector<uint8_t> bytes) = 0; + virtual void HandleDouble(double value) = 0; + virtual void HandleInt32(int32_t value) = 0; + virtual void HandleBool(bool value) = 0; + virtual void HandleNull() = 0; + + // The parser may send one error even after other events have already + // been received. Client code is reponsible to then discard the + // already processed events. + // |error| must be an eror, as in, |error.is_ok()| can't be true. + virtual void HandleError(Status error) = 0; +}; + +// ===== cbor_internals.h ===== + +namespace cbor_internals { +// The major types from RFC 7049 Section 2.1. +enum class MajorType { + UNSIGNED = 0, + NEGATIVE = 1, + BYTE_STRING = 2, + STRING = 3, + ARRAY = 4, + MAP = 5, + TAG = 6, + SIMPLE_VALUE = 7 +}; + +// Reads the start of a token with definitive size from |bytes|. +// |type| is the major type as specified in RFC 7049 Section 2.1. +// |value| is the payload (e.g. for MajorType::UNSIGNED) or is the size +// (e.g. for BYTE_STRING). +// If successful, returns the number of bytes read. Otherwise returns -1. +int8_t ReadTokenStart(span<uint8_t> bytes, MajorType* type, uint64_t* value); + +// Writes the start of a token with |type|. The |value| may indicate the size, +// or it may be the payload if the value is an unsigned integer. +void WriteTokenStart(MajorType type, uint64_t value, + std::vector<uint8_t>* encoded); +} // namespace cbor_internals + +// ===== cbor.h ===== + +// The binary encoding for the inspector protocol follows the CBOR specification +// (RFC 7049). Additional constraints: +// - Only indefinite length maps and arrays are supported. +// - Maps and arrays are wrapped with an envelope, that is, a +// CBOR tag with value 24 followed by a byte string specifying +// the byte length of the enclosed map / array. The byte string +// must use a 32 bit wide length. +// - At the top level, a message must be an indefinite length map +// wrapped by an envelope. +// - Maximal size for messages is 2^32 (4 GB). +// - For scalars, we support only the int32_t range, encoded as +// UNSIGNED/NEGATIVE (major types 0 / 1). +// - UTF16 strings, including with unbalanced surrogate pairs, are encoded +// as CBOR BYTE_STRING (major type 2). For such strings, the number of +// bytes encoded must be even. +// - UTF8 strings (major type 3) may only have ASCII characters +// (7 bit US-ASCII). +// - Arbitrary byte arrays, in the inspector protocol called 'binary', +// are encoded as BYTE_STRING (major type 2), prefixed with a byte +// indicating base64 when rendered as JSON. + +// Encodes |value| as |UNSIGNED| (major type 0) iff >= 0, or |NEGATIVE| +// (major type 1) iff < 0. +void EncodeInt32(int32_t value, std::vector<uint8_t>* out); + +// Encodes a UTF16 string as a BYTE_STRING (major type 2). Each utf16 +// character in |in| is emitted with most significant byte first, +// appending to |out|. +void EncodeString16(span<uint16_t> in, std::vector<uint8_t>* out); + +// Encodes a UTF8 string |in| as STRING (major type 3). +void EncodeString8(span<uint8_t> in, std::vector<uint8_t>* out); + +// Encodes arbitrary binary data in |in| as a BYTE_STRING (major type 2) with +// definitive length, prefixed with tag 22 indicating expected conversion to +// base64 (see RFC 7049, Table 3 and Section 2.4.4.2). +void EncodeBinary(span<uint8_t> in, std::vector<uint8_t>* out); + +// Encodes / decodes a double as Major type 7 (SIMPLE_VALUE), +// with additional info = 27, followed by 8 bytes in big endian. +void EncodeDouble(double value, std::vector<uint8_t>* out); + +// Some constants for CBOR tokens that only take a single byte on the wire. +uint8_t EncodeTrue(); +uint8_t EncodeFalse(); +uint8_t EncodeNull(); +uint8_t EncodeIndefiniteLengthArrayStart(); +uint8_t EncodeIndefiniteLengthMapStart(); +uint8_t EncodeStop(); + +// An envelope indicates the byte length of a wrapped item. +// We use this for maps and array, which allows the decoder +// to skip such (nested) values whole sale. +// It's implemented as a CBOR tag (major type 6) with additional +// info = 24, followed by a byte string with a 32 bit length value; +// so the maximal structure that we can wrap is 2^32 bits long. +// See also: https://tools.ietf.org/html/rfc7049#section-2.4.4.1 +class EnvelopeEncoder { + public: + // Emits the envelope start bytes and records the position for the + // byte size in |byte_size_pos_|. Also emits empty bytes for the + // byte sisze so that encoding can continue. + void EncodeStart(std::vector<uint8_t>* out); + // This records the current size in |out| at position byte_size_pos_. + // Returns true iff successful. + bool EncodeStop(std::vector<uint8_t>* out); + + private: + std::vector<uint8_t>::size_type byte_size_pos_ = 0; +}; + +// This can be used to convert from JSON to CBOR, by passing the +// return value to the routines in json_parser.h. The handler will encode into +// |out|, and iff an error occurs it will set |status| to an error and clear +// |out|. Otherwise, |status.ok()| will be |true|. +std::unique_ptr<JSONParserHandler> NewJSONToCBOREncoder( + std::vector<uint8_t>* out, Status* status); + +// Parses a CBOR encoded message from |bytes|, sending JSON events to +// |json_out|. If an error occurs, sends |out->HandleError|, and parsing stops. +// The client is responsible for discarding the already received information in +// that case. +void ParseCBOR(span<uint8_t> bytes, JSONParserHandler* json_out); + +// Tags for the tokens within a CBOR message that CBORStream understands. +// Note that this is not the same terminology as the CBOR spec (RFC 7049), +// but rather, our adaptation. For instance, we lump unsigned and signed +// major type into INT32 here (and disallow values outside the int32_t range). +enum class CBORTokenTag { + // Encountered an error in the structure of the message. Consult + // status() for details. + ERROR_VALUE, + // Booleans and NULL. + TRUE_VALUE, + FALSE_VALUE, + NULL_VALUE, + // An int32_t (signed 32 bit integer). + INT32, + // A double (64 bit floating point). + DOUBLE, + // A UTF8 string. + STRING8, + // A UTF16 string. + STRING16, + // A binary string. + BINARY, + // Starts an indefinite length map; after the map start we expect + // alternating keys and values, followed by STOP. + MAP_START, + // Starts an indefinite length array; after the array start we + // expect values, followed by STOP. + ARRAY_START, + // Ends a map or an array. + STOP, + // An envelope indicator, wrapping a map or array. + // Internally this carries the byte length of the wrapped + // map or array. While CBORTokenizer::Next() will read / skip the entire + // envelope, CBORTokenizer::EnterEnvelope() reads the tokens + // inside of it. + ENVELOPE, + // We've reached the end there is nothing else to read. + DONE, +}; + +// CBORTokenizer segments a CBOR message, presenting the tokens therein as +// numbers, strings, etc. This is not a complete CBOR parser, but makes it much +// easier to implement one (e.g. ParseCBOR, above). It can also be used to parse +// messages partially. +class CBORTokenizer { + public: + explicit CBORTokenizer(span<uint8_t> bytes); + ~CBORTokenizer(); + + // Identifies the current token that we're looking at, + // or ERROR_VALUE (in which ase ::Status() has details) + // or DONE (if we're past the last token). + CBORTokenTag TokenTag() const; + + // Advances to the next token. + void Next(); + // Can only be called if TokenTag() == CBORTokenTag::ENVELOPE. + // While Next() would skip past the entire envelope / what it's + // wrapping, EnterEnvelope positions the cursor inside of the envelope, + // letting the client explore the nested structure. + void EnterEnvelope(); + + // If TokenTag() is CBORTokenTag::ERROR_VALUE, then Status().error describes + // the error more precisely; otherwise it'll be set to Error::OK. + // In either case, Status().pos is the current position. + struct Status Status() const; + + // The following methods retrieve the token values. They can only + // be called if TokenTag() matches. + + // To be called only if ::TokenTag() == CBORTokenTag::INT32. + int32_t GetInt32() const; + + // To be called only if ::TokenTag() == CBORTokenTag::DOUBLE. + double GetDouble() const; + + // To be called only if ::TokenTag() == CBORTokenTag::STRING8. + span<uint8_t> GetString8() const; + + // Wire representation for STRING16 is low byte first (little endian). + // To be called only if ::TokenTag() == CBORTokenTag::STRING16. + span<uint8_t> GetString16WireRep() const; + + // To be called only if ::TokenTag() == CBORTokenTag::BINARY. + span<uint8_t> GetBinary() const; + + private: + void ReadNextToken(bool enter_envelope); + void SetToken(CBORTokenTag token, std::ptrdiff_t token_byte_length); + void SetError(Error error); + + span<uint8_t> bytes_; + CBORTokenTag token_tag_; + struct Status status_; + std::ptrdiff_t token_byte_length_; + cbor_internals::MajorType token_start_type_; + uint64_t token_start_internal_value_; +}; + +{% for namespace in config.protocol.namespace %} +} // namespace {{namespace}} +{% endfor %} + +#endif // !defined({{"_".join(config.protocol.namespace)}}_CBOR_h)
diff --git a/third_party/inspector_protocol/lib/base_string_adapter_h.template b/third_party/inspector_protocol/lib/base_string_adapter_h.template index bf860b6..0c57998de 100644 --- a/third_party/inspector_protocol/lib/base_string_adapter_h.template +++ b/third_party/inspector_protocol/lib/base_string_adapter_h.template
@@ -4,8 +4,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef {{"_".join(config.protocol.namespace)}}_Parser_h -#define {{"_".join(config.protocol.namespace)}}_Parser_h +#ifndef {{"_".join(config.protocol.namespace)}}_BASE_STRING_ADAPTER_H +#define {{"_".join(config.protocol.namespace)}}_BASE_STRING_ADAPTER_H #include <memory> #include <string> @@ -123,4 +123,4 @@ } // namespace {{namespace}} {% endfor %} -#endif // !defined({{"_".join(config.protocol.namespace)}}_Parser_h) +#endif // !defined({{"_".join(config.protocol.namespace)}}_BASE_STRING_ADAPTER_H)
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all.h b/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all.h index 37284a9..56479bd8 100644 --- a/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all.h +++ b/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all.h
@@ -80,6 +80,13 @@ #endif /* __IAccessible2_3_FWD_DEFINED__ */ +#ifndef __IAccessible2_4_FWD_DEFINED__ +#define __IAccessible2_4_FWD_DEFINED__ +typedef interface IAccessible2_4 IAccessible2_4; + +#endif /* __IAccessible2_4_FWD_DEFINED__ */ + + #ifndef __IAccessibleComponent_FWD_DEFINED__ #define __IAccessibleComponent_FWD_DEFINED__ typedef interface IAccessibleComponent IAccessibleComponent; @@ -2243,15 +2250,491 @@ #endif /* __IAccessible2_3_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_ia2_api_all_0000_0005 */ +#ifndef __IAccessible2_4_INTERFACE_DEFINED__ +#define __IAccessible2_4_INTERFACE_DEFINED__ + +/* interface IAccessible2_4 */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessible2_4; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("610a7bec-91bb-444d-a336-a0daf13c4c29") + IAccessible2_4 : public IAccessible2_3 + { + public: + virtual HRESULT STDMETHODCALLTYPE setSelectionRanges( + /* [in] */ long nRanges, + /* [size_is][in] */ IA2Range *ranges) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessible2_4Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessible2_4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessible2_4 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessible2_4 * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IAccessible2_4 * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IAccessible2_4 * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IAccessible2_4 * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IAccessible2_4 * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )( + IAccessible2_4 * This, + /* [retval][out] */ IDispatch **ppdispParent); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )( + IAccessible2_4 * This, + /* [retval][out] */ long *pcountChildren); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )( + IAccessible2_4 * This, + /* [in] */ VARIANT varChild, + /* [retval][out] */ IDispatch **ppdispChild); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszName); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszValue); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszDescription); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ VARIANT *pvarRole); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ VARIANT *pvarState); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszHelp); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )( + IAccessible2_4 * This, + /* [out] */ BSTR *pszHelpFile, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ long *pidTopic); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszKeyboardShortcut); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )( + IAccessible2_4 * This, + /* [retval][out] */ VARIANT *pvarChild); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )( + IAccessible2_4 * This, + /* [retval][out] */ VARIANT *pvarChildren); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszDefaultAction); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )( + IAccessible2_4 * This, + /* [in] */ long flagsSelect, + /* [optional][in] */ VARIANT varChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )( + IAccessible2_4 * This, + /* [out] */ long *pxLeft, + /* [out] */ long *pyTop, + /* [out] */ long *pcxWidth, + /* [out] */ long *pcyHeight, + /* [optional][in] */ VARIANT varChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )( + IAccessible2_4 * This, + /* [in] */ long navDir, + /* [optional][in] */ VARIANT varStart, + /* [retval][out] */ VARIANT *pvarEndUpAt); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )( + IAccessible2_4 * This, + /* [in] */ long xLeft, + /* [in] */ long yTop, + /* [retval][out] */ VARIANT *pvarChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild); + + /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [in] */ BSTR szName); + + /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [in] */ BSTR szValue); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )( + IAccessible2_4 * This, + /* [retval][out] */ long *nRelations); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )( + IAccessible2_4 * This, + /* [in] */ long relationIndex, + /* [retval][out] */ IAccessibleRelation **relation); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )( + IAccessible2_4 * This, + /* [in] */ long maxRelations, + /* [length_is][size_is][out] */ IAccessibleRelation **relations, + /* [retval][out] */ long *nRelations); + + HRESULT ( STDMETHODCALLTYPE *role )( + IAccessible2_4 * This, + /* [retval][out] */ long *role); + + HRESULT ( STDMETHODCALLTYPE *scrollTo )( + IAccessible2_4 * This, + /* [in] */ enum IA2ScrollType scrollType); + + HRESULT ( STDMETHODCALLTYPE *scrollToPoint )( + IAccessible2_4 * This, + /* [in] */ enum IA2CoordinateType coordinateType, + /* [in] */ long x, + /* [in] */ long y); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )( + IAccessible2_4 * This, + /* [out] */ long *groupLevel, + /* [out] */ long *similarItemsInGroup, + /* [retval][out] */ long *positionInGroup); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )( + IAccessible2_4 * This, + /* [retval][out] */ AccessibleStates *states); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )( + IAccessible2_4 * This, + /* [retval][out] */ BSTR *extendedRole); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )( + IAccessible2_4 * This, + /* [retval][out] */ BSTR *localizedExtendedRole); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )( + IAccessible2_4 * This, + /* [retval][out] */ long *nExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )( + IAccessible2_4 * This, + /* [in] */ long maxExtendedStates, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates, + /* [retval][out] */ long *nExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )( + IAccessible2_4 * This, + /* [in] */ long maxLocalizedExtendedStates, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates, + /* [retval][out] */ long *nLocalizedExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )( + IAccessible2_4 * This, + /* [retval][out] */ long *uniqueID); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )( + IAccessible2_4 * This, + /* [retval][out] */ HWND *windowHandle); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )( + IAccessible2_4 * This, + /* [retval][out] */ long *indexInParent); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )( + IAccessible2_4 * This, + /* [retval][out] */ IA2Locale *locale); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )( + IAccessible2_4 * This, + /* [retval][out] */ BSTR *attributes); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attribute )( + IAccessible2_4 * This, + /* [in] */ BSTR name, + /* [retval][out] */ VARIANT *attribute); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleWithCaret )( + IAccessible2_4 * This, + /* [out] */ IUnknown **accessible, + /* [retval][out] */ long *caretOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationTargetsOfType )( + IAccessible2_4 * This, + /* [in] */ BSTR type, + /* [in] */ long maxTargets, + /* [size_is][size_is][out] */ IUnknown ***targets, + /* [retval][out] */ long *nTargets); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectionRanges )( + IAccessible2_4 * This, + /* [size_is][size_is][out] */ IA2Range **ranges, + /* [retval][out] */ long *nRanges); + + HRESULT ( STDMETHODCALLTYPE *setSelectionRanges )( + IAccessible2_4 * This, + /* [in] */ long nRanges, + /* [size_is][in] */ IA2Range *ranges); + + END_INTERFACE + } IAccessible2_4Vtbl; + + interface IAccessible2_4 + { + CONST_VTBL struct IAccessible2_4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessible2_4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessible2_4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessible2_4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessible2_4_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IAccessible2_4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IAccessible2_4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IAccessible2_4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IAccessible2_4_get_accParent(This,ppdispParent) \ + ( (This)->lpVtbl -> get_accParent(This,ppdispParent) ) + +#define IAccessible2_4_get_accChildCount(This,pcountChildren) \ + ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) ) + +#define IAccessible2_4_get_accChild(This,varChild,ppdispChild) \ + ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) ) + +#define IAccessible2_4_get_accName(This,varChild,pszName) \ + ( (This)->lpVtbl -> get_accName(This,varChild,pszName) ) + +#define IAccessible2_4_get_accValue(This,varChild,pszValue) \ + ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) ) + +#define IAccessible2_4_get_accDescription(This,varChild,pszDescription) \ + ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) ) + +#define IAccessible2_4_get_accRole(This,varChild,pvarRole) \ + ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) ) + +#define IAccessible2_4_get_accState(This,varChild,pvarState) \ + ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) ) + +#define IAccessible2_4_get_accHelp(This,varChild,pszHelp) \ + ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) ) + +#define IAccessible2_4_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) \ + ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) ) + +#define IAccessible2_4_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) \ + ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) ) + +#define IAccessible2_4_get_accFocus(This,pvarChild) \ + ( (This)->lpVtbl -> get_accFocus(This,pvarChild) ) + +#define IAccessible2_4_get_accSelection(This,pvarChildren) \ + ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) ) + +#define IAccessible2_4_get_accDefaultAction(This,varChild,pszDefaultAction) \ + ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) ) + +#define IAccessible2_4_accSelect(This,flagsSelect,varChild) \ + ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) ) + +#define IAccessible2_4_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) \ + ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) ) + +#define IAccessible2_4_accNavigate(This,navDir,varStart,pvarEndUpAt) \ + ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) ) + +#define IAccessible2_4_accHitTest(This,xLeft,yTop,pvarChild) \ + ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) ) + +#define IAccessible2_4_accDoDefaultAction(This,varChild) \ + ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) ) + +#define IAccessible2_4_put_accName(This,varChild,szName) \ + ( (This)->lpVtbl -> put_accName(This,varChild,szName) ) + +#define IAccessible2_4_put_accValue(This,varChild,szValue) \ + ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) ) + + +#define IAccessible2_4_get_nRelations(This,nRelations) \ + ( (This)->lpVtbl -> get_nRelations(This,nRelations) ) + +#define IAccessible2_4_get_relation(This,relationIndex,relation) \ + ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) ) + +#define IAccessible2_4_get_relations(This,maxRelations,relations,nRelations) \ + ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) ) + +#define IAccessible2_4_role(This,role) \ + ( (This)->lpVtbl -> role(This,role) ) + +#define IAccessible2_4_scrollTo(This,scrollType) \ + ( (This)->lpVtbl -> scrollTo(This,scrollType) ) + +#define IAccessible2_4_scrollToPoint(This,coordinateType,x,y) \ + ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) ) + +#define IAccessible2_4_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) \ + ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) ) + +#define IAccessible2_4_get_states(This,states) \ + ( (This)->lpVtbl -> get_states(This,states) ) + +#define IAccessible2_4_get_extendedRole(This,extendedRole) \ + ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) ) + +#define IAccessible2_4_get_localizedExtendedRole(This,localizedExtendedRole) \ + ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) ) + +#define IAccessible2_4_get_nExtendedStates(This,nExtendedStates) \ + ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) ) + +#define IAccessible2_4_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) \ + ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) ) + +#define IAccessible2_4_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) \ + ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) ) + +#define IAccessible2_4_get_uniqueID(This,uniqueID) \ + ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) ) + +#define IAccessible2_4_get_windowHandle(This,windowHandle) \ + ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) ) + +#define IAccessible2_4_get_indexInParent(This,indexInParent) \ + ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) ) + +#define IAccessible2_4_get_locale(This,locale) \ + ( (This)->lpVtbl -> get_locale(This,locale) ) + +#define IAccessible2_4_get_attributes(This,attributes) \ + ( (This)->lpVtbl -> get_attributes(This,attributes) ) + + +#define IAccessible2_4_get_attribute(This,name,attribute) \ + ( (This)->lpVtbl -> get_attribute(This,name,attribute) ) + +#define IAccessible2_4_get_accessibleWithCaret(This,accessible,caretOffset) \ + ( (This)->lpVtbl -> get_accessibleWithCaret(This,accessible,caretOffset) ) + +#define IAccessible2_4_get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) \ + ( (This)->lpVtbl -> get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) ) + + +#define IAccessible2_4_get_selectionRanges(This,ranges,nRanges) \ + ( (This)->lpVtbl -> get_selectionRanges(This,ranges,nRanges) ) + + +#define IAccessible2_4_setSelectionRanges(This,nRanges,ranges) \ + ( (This)->lpVtbl -> setSelectionRanges(This,nRanges,ranges) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessible2_4_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_ia2_api_all_0000_0006 */ /* [local] */ typedef long IA2Color; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0005_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0005_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_s_ifspec; #ifndef __IAccessibleComponent_INTERFACE_DEFINED__ #define __IAccessibleComponent_INTERFACE_DEFINED__ @@ -2465,7 +2948,7 @@ #endif /* __IAccessibleValue_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_ia2_api_all_0000_0007 */ +/* interface __MIDL_itf_ia2_api_all_0000_0008 */ /* [local] */ typedef struct IA2TextSegment @@ -2487,8 +2970,8 @@ } ; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0007_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0007_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0008_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0008_v0_0_s_ifspec; #ifndef __IAccessibleText_INTERFACE_DEFINED__ #define __IAccessibleText_INTERFACE_DEFINED__ @@ -4943,7 +5426,7 @@ #endif /* __IAccessibleImage_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_ia2_api_all_0000_0017 */ +/* interface __MIDL_itf_ia2_api_all_0000_0018 */ /* [local] */ @@ -4987,8 +5470,8 @@ } ; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0017_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0017_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_s_ifspec; #ifndef __IAccessibleApplication_INTERFACE_DEFINED__ #define __IAccessibleApplication_INTERFACE_DEFINED__ @@ -5180,7 +5663,7 @@ #endif /* __IAccessibleDocument_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_ia2_api_all_0000_0019 */ +/* interface __MIDL_itf_ia2_api_all_0000_0020 */ /* [local] */ @@ -5188,8 +5671,8 @@ -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0019_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0019_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0020_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0020_v0_0_s_ifspec; #ifndef __IAccessible2Lib_LIBRARY_DEFINED__
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_i.c b/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_i.c index 6864dd1..99364896 100644 --- a/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_i.c +++ b/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_i.c
@@ -82,6 +82,9 @@ MIDL_DEFINE_GUID(IID, IID_IAccessible2_3,0x5BE18059,0x762E,0x4E73,0x94,0x76,0xAB,0xA2,0x94,0xFE,0xD4,0x11); +MIDL_DEFINE_GUID(IID, IID_IAccessible2_4,0x610a7bec,0x91bb,0x444d,0xa3,0x36,0xa0,0xda,0xf1,0x3c,0x4c,0x29); + + MIDL_DEFINE_GUID(IID, IID_IAccessibleComponent,0x1546D4B0,0x4C98,0x4bda,0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4);
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_p.c b/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_p.c index 2b97baf..862c1f1 100644 --- a/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_p.c +++ b/third_party/win_build_output/midl/third_party/iaccessible2/arm64/ia2_api_all_p.c
@@ -46,8 +46,8 @@ #include "ia2_api_all.h" -#define TYPE_FORMAT_STRING_SIZE 1519 -#define PROC_FORMAT_STRING_SIZE 6071 +#define TYPE_FORMAT_STRING_SIZE 1545 +#define PROC_FORMAT_STRING_SIZE 6119 #define EXPR_FORMAT_STRING_SIZE 1 #define TRANSMIT_AS_TABLE_SIZE 0 #define WIRE_MARSHAL_TABLE_SIZE 3 @@ -118,6 +118,13 @@ extern const MIDL_STUB_DESC Object_StubDesc; +extern const MIDL_SERVER_INFO IAccessible2_4_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_4_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + extern const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo; extern const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo; @@ -1662,21 +1669,21 @@ /* 1556 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_locationInParent */ + /* Procedure setSelectionRanges */ /* 1558 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 1560 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1564 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1564 */ NdrFcShort( 0x32 ), /* 50 */ /* 1566 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 1568 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1570 */ NdrFcShort( 0x40 ), /* 64 */ -/* 1572 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1568 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1570 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1572 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x3, /* 3 */ /* 1574 */ 0xe, /* 14 */ - 0x1, /* Ext Flags: new corr desc, */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ /* 1576 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1578 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1578 */ NdrFcShort( 0x1 ), /* 1 */ /* 1580 */ NdrFcShort( 0x0 ), /* 0 */ /* 1582 */ NdrFcShort( 0x3 ), /* 3 */ /* 1584 */ 0x3, /* 3 */ @@ -1684,19 +1691,18 @@ /* 1586 */ 0x81, /* 129 */ 0x82, /* 130 */ - /* Parameter x */ + /* Parameter nRanges */ -/* 1588 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1588 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 1590 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ /* 1592 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter y */ + /* Parameter ranges */ -/* 1594 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1594 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ /* 1596 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 1598 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 1598 */ NdrFcShort( 0x51c ), /* Type Offset=1308 */ /* Return value */ @@ -1705,180 +1711,223 @@ /* 1604 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_foreground */ + /* Procedure get_locationInParent */ /* 1606 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 1608 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1612 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1614 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 1612 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1614 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 1616 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1618 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1618 */ NdrFcShort( 0x40 ), /* 64 */ /* 1620 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 1622 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ /* 1624 */ NdrFcShort( 0x0 ), /* 0 */ /* 1626 */ NdrFcShort( 0x0 ), /* 0 */ /* 1628 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1630 */ NdrFcShort( 0x2 ), /* 2 */ -/* 1632 */ 0x2, /* 2 */ +/* 1630 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1632 */ 0x3, /* 3 */ 0x80, /* 128 */ /* 1634 */ 0x81, /* 129 */ - 0x0, /* 0 */ + 0x82, /* 130 */ - /* Parameter foreground */ + /* Parameter x */ /* 1636 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 1638 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ /* 1640 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Parameter y */ -/* 1642 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1642 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 1644 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ /* 1646 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Return value */ + +/* 1648 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1650 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 1652 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_foreground */ + +/* 1654 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1656 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1660 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1662 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 1664 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1666 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1668 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 1670 */ 0xe, /* 14 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1672 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1674 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1676 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1678 */ NdrFcShort( 0x2 ), /* 2 */ +/* 1680 */ 0x2, /* 2 */ + 0x80, /* 128 */ +/* 1682 */ 0x81, /* 129 */ + 0x0, /* 0 */ + + /* Parameter foreground */ + +/* 1684 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1686 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 1688 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 1690 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1692 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 1694 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure get_currentValue */ -/* 1648 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1696 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1650 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1654 */ NdrFcShort( 0x3 ), /* 3 */ -/* 1656 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 1658 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1660 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1662 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 1698 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1702 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1704 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 1706 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1708 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1710 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 1664 */ 0xe, /* 14 */ +/* 1712 */ 0xe, /* 14 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1666 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1668 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1670 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1672 */ NdrFcShort( 0x2 ), /* 2 */ -/* 1674 */ 0x2, /* 2 */ +/* 1714 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1716 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1718 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1720 */ NdrFcShort( 0x2 ), /* 2 */ +/* 1722 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 1676 */ 0x81, /* 129 */ +/* 1724 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter currentValue */ -/* 1678 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 1680 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 1682 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ +/* 1726 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 1728 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 1730 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ /* Return value */ -/* 1684 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1686 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 1688 */ 0x8, /* FC_LONG */ +/* 1732 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1734 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 1736 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure setCurrentValue */ -/* 1690 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1738 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1692 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1696 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1698 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 1700 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1702 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1704 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ +/* 1740 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1744 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1746 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 1748 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1750 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1752 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x2, /* 2 */ -/* 1706 */ 0xe, /* 14 */ +/* 1754 */ 0xe, /* 14 */ 0x85, /* Ext Flags: new corr desc, srv corr check, has big byval param */ -/* 1708 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1710 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1712 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1714 */ NdrFcShort( 0x2 ), /* 2 */ -/* 1716 */ 0x2, /* 2 */ +/* 1756 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1758 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1760 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1762 */ NdrFcShort( 0x2 ), /* 2 */ +/* 1764 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 1718 */ 0x81, /* 129 */ +/* 1766 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter value */ -/* 1720 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ -/* 1722 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 1724 */ NdrFcShort( 0x520 ), /* Type Offset=1312 */ +/* 1768 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 1770 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 1772 */ NdrFcShort( 0x53a ), /* Type Offset=1338 */ /* Return value */ -/* 1726 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1728 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 1730 */ 0x8, /* FC_LONG */ +/* 1774 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1776 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 1778 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_maximumValue */ -/* 1732 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1780 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1734 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1738 */ NdrFcShort( 0x5 ), /* 5 */ -/* 1740 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 1742 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1744 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1746 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 1782 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1786 */ NdrFcShort( 0x5 ), /* 5 */ +/* 1788 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 1790 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1792 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1794 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 1748 */ 0xe, /* 14 */ +/* 1796 */ 0xe, /* 14 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1750 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1752 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1754 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1756 */ NdrFcShort( 0x2 ), /* 2 */ -/* 1758 */ 0x2, /* 2 */ +/* 1798 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1800 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1802 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1804 */ NdrFcShort( 0x2 ), /* 2 */ +/* 1806 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 1760 */ 0x81, /* 129 */ +/* 1808 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter maximumValue */ -/* 1762 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 1764 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 1766 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ +/* 1810 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 1812 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 1814 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ /* Return value */ -/* 1768 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1770 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 1772 */ 0x8, /* FC_LONG */ +/* 1816 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1818 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 1820 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_minimumValue */ -/* 1774 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1822 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1776 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1780 */ NdrFcShort( 0x6 ), /* 6 */ -/* 1782 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 1784 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1786 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1788 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 1824 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1828 */ NdrFcShort( 0x6 ), /* 6 */ +/* 1830 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 1832 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1834 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1836 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 1790 */ 0xe, /* 14 */ +/* 1838 */ 0xe, /* 14 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1792 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1794 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1796 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1798 */ NdrFcShort( 0x2 ), /* 2 */ -/* 1800 */ 0x2, /* 2 */ +/* 1840 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1842 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1844 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1846 */ NdrFcShort( 0x2 ), /* 2 */ +/* 1848 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 1802 */ 0x81, /* 129 */ +/* 1850 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter minimumValue */ -/* 1804 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 1806 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 1808 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ +/* 1852 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 1854 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 1856 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ /* Return value */ -/* 1810 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1812 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 1814 */ 0x8, /* FC_LONG */ +/* 1858 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1860 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 1862 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure copyText */ @@ -1886,24 +1935,24 @@ /* Procedure addSelection */ -/* 1816 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1864 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1818 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1822 */ NdrFcShort( 0x3 ), /* 3 */ -/* 1824 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 1826 */ NdrFcShort( 0x10 ), /* 16 */ -/* 1828 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1830 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1866 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1870 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1872 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 1874 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1876 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1878 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x3, /* 3 */ -/* 1832 */ 0xe, /* 14 */ +/* 1880 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 1834 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1836 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1838 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1840 */ NdrFcShort( 0x3 ), /* 3 */ -/* 1842 */ 0x3, /* 3 */ +/* 1882 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1884 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1886 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1888 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1890 */ 0x3, /* 3 */ 0x80, /* 128 */ -/* 1844 */ 0x81, /* 129 */ +/* 1892 */ 0x81, /* 129 */ 0x82, /* 130 */ /* Parameter startOffset */ @@ -1911,9 +1960,9 @@ /* Parameter startOffset */ -/* 1846 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1848 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 1850 */ 0x8, /* FC_LONG */ +/* 1894 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1896 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 1898 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ @@ -1921,9 +1970,9 @@ /* Parameter endOffset */ -/* 1852 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1854 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 1856 */ 0x8, /* FC_LONG */ +/* 1900 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1902 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 1904 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -1931,142 +1980,142 @@ /* Return value */ -/* 1858 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1860 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 1862 */ 0x8, /* FC_LONG */ +/* 1906 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1908 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 1910 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_attributes */ -/* 1864 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1912 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1866 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1870 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1872 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ -/* 1874 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1876 */ NdrFcShort( 0x40 ), /* 64 */ -/* 1878 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 1914 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1918 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1920 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ +/* 1922 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1924 */ NdrFcShort( 0x40 ), /* 64 */ +/* 1926 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x5, /* 5 */ -/* 1880 */ 0x10, /* 16 */ +/* 1928 */ 0x10, /* 16 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1882 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1884 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1886 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1888 */ NdrFcShort( 0x5 ), /* 5 */ -/* 1890 */ 0x5, /* 5 */ +/* 1930 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1932 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1934 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1936 */ NdrFcShort( 0x5 ), /* 5 */ +/* 1938 */ 0x5, /* 5 */ 0x80, /* 128 */ -/* 1892 */ 0x81, /* 129 */ +/* 1940 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 1894 */ 0x83, /* 131 */ +/* 1942 */ 0x83, /* 131 */ 0x84, /* 132 */ /* Parameter offset */ -/* 1896 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1898 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 1900 */ 0x8, /* FC_LONG */ +/* 1944 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1946 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 1948 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 1902 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1904 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 1906 */ 0x8, /* FC_LONG */ +/* 1950 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1952 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 1954 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 1908 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1910 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 1912 */ 0x8, /* FC_LONG */ +/* 1956 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1958 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 1960 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter textAttributes */ -/* 1914 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 1916 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 1918 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 1962 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1964 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 1966 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 1920 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1922 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 1924 */ 0x8, /* FC_LONG */ +/* 1968 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1970 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 1972 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_characterExtents */ -/* 1926 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1974 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1928 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1932 */ NdrFcShort( 0x6 ), /* 6 */ -/* 1934 */ NdrFcShort( 0x40 ), /* ARM64 Stack size/offset = 64 */ -/* 1936 */ NdrFcShort( 0xe ), /* 14 */ -/* 1938 */ NdrFcShort( 0x78 ), /* 120 */ -/* 1940 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1976 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1980 */ NdrFcShort( 0x6 ), /* 6 */ +/* 1982 */ NdrFcShort( 0x40 ), /* ARM64 Stack size/offset = 64 */ +/* 1984 */ NdrFcShort( 0xe ), /* 14 */ +/* 1986 */ NdrFcShort( 0x78 ), /* 120 */ +/* 1988 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x7, /* 7 */ -/* 1942 */ 0x12, /* 18 */ +/* 1990 */ 0x12, /* 18 */ 0x1, /* Ext Flags: new corr desc, */ -/* 1944 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1946 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1948 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1950 */ NdrFcShort( 0x7 ), /* 7 */ -/* 1952 */ 0x7, /* 7 */ +/* 1992 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1994 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1996 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1998 */ NdrFcShort( 0x7 ), /* 7 */ +/* 2000 */ 0x7, /* 7 */ 0x80, /* 128 */ -/* 1954 */ 0x81, /* 129 */ +/* 2002 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 1956 */ 0x83, /* 131 */ +/* 2004 */ 0x83, /* 131 */ 0x84, /* 132 */ -/* 1958 */ 0x85, /* 133 */ +/* 2006 */ 0x85, /* 133 */ 0x86, /* 134 */ /* Parameter offset */ -/* 1960 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1962 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 1964 */ 0x8, /* FC_LONG */ +/* 2008 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2010 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2012 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter coordType */ -/* 1966 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1968 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 1970 */ 0xd, /* FC_ENUM16 */ +/* 2014 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2016 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2018 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter x */ -/* 1972 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1974 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 1976 */ 0x8, /* FC_LONG */ +/* 2020 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2022 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2024 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter y */ -/* 1978 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1980 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 1982 */ 0x8, /* FC_LONG */ +/* 2026 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2028 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 2030 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter width */ -/* 1984 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1986 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 1988 */ 0x8, /* FC_LONG */ +/* 2032 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2034 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 2036 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter height */ -/* 1990 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1992 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ -/* 1994 */ 0x8, /* FC_LONG */ +/* 2038 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2040 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ +/* 2042 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 1996 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1998 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ -/* 2000 */ 0x8, /* FC_LONG */ +/* 2044 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2046 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ +/* 2048 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nRows */ @@ -2074,24 +2123,24 @@ /* Procedure get_nSelections */ -/* 2002 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2050 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2004 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2008 */ NdrFcShort( 0x7 ), /* 7 */ -/* 2010 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2012 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2014 */ NdrFcShort( 0x24 ), /* 36 */ -/* 2016 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2052 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2056 */ NdrFcShort( 0x7 ), /* 7 */ +/* 2058 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2060 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2062 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2064 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2018 */ 0xe, /* 14 */ +/* 2066 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2020 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2022 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2024 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2026 */ NdrFcShort( 0x2 ), /* 2 */ -/* 2028 */ 0x2, /* 2 */ +/* 2068 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2070 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2072 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2074 */ NdrFcShort( 0x2 ), /* 2 */ +/* 2076 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 2030 */ 0x81, /* 129 */ +/* 2078 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter rowCount */ @@ -2099,9 +2148,9 @@ /* Parameter nSelections */ -/* 2032 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2034 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2036 */ 0x8, /* FC_LONG */ +/* 2080 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2082 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2084 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -2109,848 +2158,805 @@ /* Return value */ -/* 2038 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2040 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2042 */ 0x8, /* FC_LONG */ +/* 2086 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2088 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2090 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_offsetAtPoint */ -/* 2044 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2092 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2046 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2050 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2052 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ -/* 2054 */ NdrFcShort( 0x16 ), /* 22 */ -/* 2056 */ NdrFcShort( 0x24 ), /* 36 */ -/* 2058 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2094 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2098 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2100 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ +/* 2102 */ NdrFcShort( 0x16 ), /* 22 */ +/* 2104 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2106 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x5, /* 5 */ -/* 2060 */ 0x10, /* 16 */ +/* 2108 */ 0x10, /* 16 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2062 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2064 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2066 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2068 */ NdrFcShort( 0x5 ), /* 5 */ -/* 2070 */ 0x5, /* 5 */ +/* 2110 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2112 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2114 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2116 */ NdrFcShort( 0x5 ), /* 5 */ +/* 2118 */ 0x5, /* 5 */ 0x80, /* 128 */ -/* 2072 */ 0x81, /* 129 */ +/* 2120 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 2074 */ 0x83, /* 131 */ +/* 2122 */ 0x83, /* 131 */ 0x84, /* 132 */ /* Parameter x */ -/* 2076 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2078 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2080 */ 0x8, /* FC_LONG */ +/* 2124 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2126 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2128 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter y */ -/* 2082 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2084 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2086 */ 0x8, /* FC_LONG */ +/* 2130 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2132 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2134 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter coordType */ -/* 2088 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2090 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2092 */ 0xd, /* FC_ENUM16 */ +/* 2136 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2138 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2140 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter offset */ -/* 2094 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2096 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2098 */ 0x8, /* FC_LONG */ +/* 2142 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2144 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 2146 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2100 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2102 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 2104 */ 0x8, /* FC_LONG */ +/* 2148 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2150 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 2152 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_selection */ -/* 2106 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2154 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2108 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2112 */ NdrFcShort( 0x9 ), /* 9 */ -/* 2114 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 2116 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2118 */ NdrFcShort( 0x40 ), /* 64 */ -/* 2120 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2156 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2160 */ NdrFcShort( 0x9 ), /* 9 */ +/* 2162 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 2164 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2166 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2168 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 2122 */ 0x10, /* 16 */ +/* 2170 */ 0x10, /* 16 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2124 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2126 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2128 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2130 */ NdrFcShort( 0x4 ), /* 4 */ -/* 2132 */ 0x4, /* 4 */ +/* 2172 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2174 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2176 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2178 */ NdrFcShort( 0x4 ), /* 4 */ +/* 2180 */ 0x4, /* 4 */ 0x80, /* 128 */ -/* 2134 */ 0x81, /* 129 */ +/* 2182 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 2136 */ 0x83, /* 131 */ +/* 2184 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter selectionIndex */ -/* 2138 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2140 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2142 */ 0x8, /* FC_LONG */ +/* 2186 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2188 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2190 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2144 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2146 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2148 */ 0x8, /* FC_LONG */ +/* 2192 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2194 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2196 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2150 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2152 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2154 */ 0x8, /* FC_LONG */ +/* 2198 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2200 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2202 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2156 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2158 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2160 */ 0x8, /* FC_LONG */ +/* 2204 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2206 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 2208 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_text */ -/* 2162 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2210 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2164 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2168 */ NdrFcShort( 0xa ), /* 10 */ -/* 2170 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 2172 */ NdrFcShort( 0x10 ), /* 16 */ -/* 2174 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2176 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2212 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2216 */ NdrFcShort( 0xa ), /* 10 */ +/* 2218 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 2220 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2222 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2224 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x4, /* 4 */ -/* 2178 */ 0x10, /* 16 */ +/* 2226 */ 0x10, /* 16 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2180 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2182 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2184 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2186 */ NdrFcShort( 0x4 ), /* 4 */ -/* 2188 */ 0x4, /* 4 */ +/* 2228 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2230 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2232 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2234 */ NdrFcShort( 0x4 ), /* 4 */ +/* 2236 */ 0x4, /* 4 */ 0x80, /* 128 */ -/* 2190 */ 0x81, /* 129 */ +/* 2238 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 2192 */ 0x83, /* 131 */ +/* 2240 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2194 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2196 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2198 */ 0x8, /* FC_LONG */ +/* 2242 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2244 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2246 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2200 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2202 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2204 */ 0x8, /* FC_LONG */ +/* 2248 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2250 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2252 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 2206 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 2208 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2210 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 2254 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2256 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2258 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 2212 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2214 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2216 */ 0x8, /* FC_LONG */ +/* 2260 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2262 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 2264 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_textBeforeOffset */ -/* 2218 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2266 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2220 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2224 */ NdrFcShort( 0xb ), /* 11 */ -/* 2226 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ -/* 2228 */ NdrFcShort( 0xe ), /* 14 */ -/* 2230 */ NdrFcShort( 0x40 ), /* 64 */ -/* 2232 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2268 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2272 */ NdrFcShort( 0xb ), /* 11 */ +/* 2274 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ +/* 2276 */ NdrFcShort( 0xe ), /* 14 */ +/* 2278 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2280 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x6, /* 6 */ -/* 2234 */ 0x12, /* 18 */ +/* 2282 */ 0x12, /* 18 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2236 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2238 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2240 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2242 */ NdrFcShort( 0x6 ), /* 6 */ -/* 2244 */ 0x6, /* 6 */ +/* 2284 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2286 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2288 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2290 */ NdrFcShort( 0x6 ), /* 6 */ +/* 2292 */ 0x6, /* 6 */ 0x80, /* 128 */ -/* 2246 */ 0x81, /* 129 */ +/* 2294 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 2248 */ 0x83, /* 131 */ +/* 2296 */ 0x83, /* 131 */ 0x84, /* 132 */ -/* 2250 */ 0x85, /* 133 */ +/* 2298 */ 0x85, /* 133 */ 0x0, /* 0 */ /* Parameter offset */ -/* 2252 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2254 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2256 */ 0x8, /* FC_LONG */ +/* 2300 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2302 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2304 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter boundaryType */ -/* 2258 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2260 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2262 */ 0xd, /* FC_ENUM16 */ +/* 2306 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2308 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2310 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2264 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2266 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2268 */ 0x8, /* FC_LONG */ +/* 2312 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2314 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2316 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2270 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2272 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2274 */ 0x8, /* FC_LONG */ +/* 2318 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2320 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 2322 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 2276 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 2278 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 2280 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 2324 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2326 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 2328 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 2282 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2284 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ -/* 2286 */ 0x8, /* FC_LONG */ +/* 2330 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2332 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ +/* 2334 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_textAfterOffset */ -/* 2288 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2336 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2290 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2294 */ NdrFcShort( 0xc ), /* 12 */ -/* 2296 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ -/* 2298 */ NdrFcShort( 0xe ), /* 14 */ -/* 2300 */ NdrFcShort( 0x40 ), /* 64 */ -/* 2302 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2338 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2342 */ NdrFcShort( 0xc ), /* 12 */ +/* 2344 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ +/* 2346 */ NdrFcShort( 0xe ), /* 14 */ +/* 2348 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2350 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x6, /* 6 */ -/* 2304 */ 0x12, /* 18 */ +/* 2352 */ 0x12, /* 18 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2306 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2308 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2310 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2312 */ NdrFcShort( 0x6 ), /* 6 */ -/* 2314 */ 0x6, /* 6 */ +/* 2354 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2356 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2358 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2360 */ NdrFcShort( 0x6 ), /* 6 */ +/* 2362 */ 0x6, /* 6 */ 0x80, /* 128 */ -/* 2316 */ 0x81, /* 129 */ +/* 2364 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 2318 */ 0x83, /* 131 */ +/* 2366 */ 0x83, /* 131 */ 0x84, /* 132 */ -/* 2320 */ 0x85, /* 133 */ +/* 2368 */ 0x85, /* 133 */ 0x0, /* 0 */ /* Parameter offset */ -/* 2322 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2324 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2326 */ 0x8, /* FC_LONG */ +/* 2370 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2372 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2374 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter boundaryType */ -/* 2328 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2330 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2332 */ 0xd, /* FC_ENUM16 */ +/* 2376 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2378 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2380 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2334 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2336 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2338 */ 0x8, /* FC_LONG */ +/* 2382 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2384 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2386 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2340 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2342 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2344 */ 0x8, /* FC_LONG */ +/* 2388 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2390 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 2392 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 2346 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 2348 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 2350 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 2394 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2396 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 2398 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 2352 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2354 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ -/* 2356 */ 0x8, /* FC_LONG */ +/* 2400 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2402 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ +/* 2404 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_textAtOffset */ -/* 2358 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2406 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2360 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2364 */ NdrFcShort( 0xd ), /* 13 */ -/* 2366 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ -/* 2368 */ NdrFcShort( 0xe ), /* 14 */ -/* 2370 */ NdrFcShort( 0x40 ), /* 64 */ -/* 2372 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2408 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2412 */ NdrFcShort( 0xd ), /* 13 */ +/* 2414 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ +/* 2416 */ NdrFcShort( 0xe ), /* 14 */ +/* 2418 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2420 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x6, /* 6 */ -/* 2374 */ 0x12, /* 18 */ +/* 2422 */ 0x12, /* 18 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2376 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2378 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2380 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2382 */ NdrFcShort( 0x6 ), /* 6 */ -/* 2384 */ 0x6, /* 6 */ +/* 2424 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2426 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2428 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2430 */ NdrFcShort( 0x6 ), /* 6 */ +/* 2432 */ 0x6, /* 6 */ 0x80, /* 128 */ -/* 2386 */ 0x81, /* 129 */ +/* 2434 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 2388 */ 0x83, /* 131 */ +/* 2436 */ 0x83, /* 131 */ 0x84, /* 132 */ -/* 2390 */ 0x85, /* 133 */ +/* 2438 */ 0x85, /* 133 */ 0x0, /* 0 */ /* Parameter offset */ -/* 2392 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2394 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2396 */ 0x8, /* FC_LONG */ +/* 2440 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2442 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2444 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter boundaryType */ -/* 2398 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2400 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2402 */ 0xd, /* FC_ENUM16 */ +/* 2446 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2448 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2450 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2404 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2406 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2408 */ 0x8, /* FC_LONG */ +/* 2452 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2454 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2456 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2410 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2412 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2414 */ 0x8, /* FC_LONG */ +/* 2458 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2460 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 2462 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 2416 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 2418 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 2420 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 2464 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2466 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 2468 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 2422 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2424 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ -/* 2426 */ 0x8, /* FC_LONG */ +/* 2470 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2472 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ +/* 2474 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure removeSelection */ -/* 2428 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2476 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2430 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2434 */ NdrFcShort( 0xe ), /* 14 */ -/* 2436 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2438 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2440 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2442 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2478 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2482 */ NdrFcShort( 0xe ), /* 14 */ +/* 2484 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2486 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2488 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2490 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2444 */ 0xe, /* 14 */ +/* 2492 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2446 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2448 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2450 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2452 */ NdrFcShort( 0x2 ), /* 2 */ -/* 2454 */ 0x2, /* 2 */ +/* 2494 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2496 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2498 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2500 */ NdrFcShort( 0x2 ), /* 2 */ +/* 2502 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 2456 */ 0x81, /* 129 */ +/* 2504 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter selectionIndex */ -/* 2458 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2460 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2462 */ 0x8, /* FC_LONG */ +/* 2506 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2508 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2510 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2464 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2466 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2468 */ 0x8, /* FC_LONG */ +/* 2512 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2514 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2516 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure setCaretOffset */ -/* 2470 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2518 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2472 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2476 */ NdrFcShort( 0xf ), /* 15 */ -/* 2478 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2480 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2482 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2484 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2520 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2524 */ NdrFcShort( 0xf ), /* 15 */ +/* 2526 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2528 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2530 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2532 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2486 */ 0xe, /* 14 */ +/* 2534 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2488 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2490 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2492 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2494 */ NdrFcShort( 0x2 ), /* 2 */ -/* 2496 */ 0x2, /* 2 */ +/* 2536 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2538 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2540 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2542 */ NdrFcShort( 0x2 ), /* 2 */ +/* 2544 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 2498 */ 0x81, /* 129 */ +/* 2546 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter offset */ -/* 2500 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2502 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2504 */ 0x8, /* FC_LONG */ +/* 2548 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2550 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2552 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2506 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2508 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2510 */ 0x8, /* FC_LONG */ +/* 2554 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2556 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2558 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure setSelection */ -/* 2512 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2560 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2514 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2518 */ NdrFcShort( 0x10 ), /* 16 */ -/* 2520 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 2522 */ NdrFcShort( 0x18 ), /* 24 */ -/* 2524 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2526 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2562 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2566 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2568 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 2570 */ NdrFcShort( 0x18 ), /* 24 */ +/* 2572 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2574 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 2528 */ 0x10, /* 16 */ +/* 2576 */ 0x10, /* 16 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2530 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2532 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2534 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2536 */ NdrFcShort( 0x4 ), /* 4 */ -/* 2538 */ 0x4, /* 4 */ +/* 2578 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2580 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2582 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2584 */ NdrFcShort( 0x4 ), /* 4 */ +/* 2586 */ 0x4, /* 4 */ 0x80, /* 128 */ -/* 2540 */ 0x81, /* 129 */ +/* 2588 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 2542 */ 0x83, /* 131 */ +/* 2590 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter selectionIndex */ -/* 2544 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2546 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2548 */ 0x8, /* FC_LONG */ +/* 2592 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2594 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2596 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2550 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2552 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2554 */ 0x8, /* FC_LONG */ +/* 2598 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2600 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2602 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2556 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2558 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2560 */ 0x8, /* FC_LONG */ +/* 2604 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2606 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2608 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2562 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2564 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2566 */ 0x8, /* FC_LONG */ +/* 2610 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2612 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 2614 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nCharacters */ -/* 2568 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2616 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2570 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2574 */ NdrFcShort( 0x11 ), /* 17 */ -/* 2576 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2578 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2580 */ NdrFcShort( 0x24 ), /* 36 */ -/* 2582 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2618 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2622 */ NdrFcShort( 0x11 ), /* 17 */ +/* 2624 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2626 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2628 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2630 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2584 */ 0xe, /* 14 */ +/* 2632 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2586 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2588 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2590 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2592 */ NdrFcShort( 0x2 ), /* 2 */ -/* 2594 */ 0x2, /* 2 */ +/* 2634 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2636 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2638 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2640 */ NdrFcShort( 0x2 ), /* 2 */ +/* 2642 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 2596 */ 0x81, /* 129 */ +/* 2644 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter nCharacters */ -/* 2598 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2600 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2602 */ 0x8, /* FC_LONG */ +/* 2646 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2648 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2650 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2604 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2606 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2608 */ 0x8, /* FC_LONG */ +/* 2652 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2654 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2656 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure scrollSubstringTo */ -/* 2610 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2658 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2612 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2616 */ NdrFcShort( 0x12 ), /* 18 */ -/* 2618 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 2620 */ NdrFcShort( 0x16 ), /* 22 */ -/* 2622 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2624 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2660 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2664 */ NdrFcShort( 0x12 ), /* 18 */ +/* 2666 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 2668 */ NdrFcShort( 0x16 ), /* 22 */ +/* 2670 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2672 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 2626 */ 0x10, /* 16 */ +/* 2674 */ 0x10, /* 16 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2628 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2630 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2632 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2634 */ NdrFcShort( 0x4 ), /* 4 */ -/* 2636 */ 0x4, /* 4 */ +/* 2676 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2678 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2680 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2682 */ NdrFcShort( 0x4 ), /* 4 */ +/* 2684 */ 0x4, /* 4 */ 0x80, /* 128 */ -/* 2638 */ 0x81, /* 129 */ +/* 2686 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 2640 */ 0x83, /* 131 */ +/* 2688 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter startIndex */ -/* 2642 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2644 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2646 */ 0x8, /* FC_LONG */ +/* 2690 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2692 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2694 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endIndex */ -/* 2648 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2650 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2652 */ 0x8, /* FC_LONG */ +/* 2696 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2698 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2700 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter scrollType */ -/* 2654 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2656 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2658 */ 0xd, /* FC_ENUM16 */ +/* 2702 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2704 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2706 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Return value */ -/* 2660 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2662 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2664 */ 0x8, /* FC_LONG */ +/* 2708 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2710 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 2712 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure scrollSubstringToPoint */ -/* 2666 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2714 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2668 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2672 */ NdrFcShort( 0x13 ), /* 19 */ -/* 2674 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ -/* 2676 */ NdrFcShort( 0x26 ), /* 38 */ -/* 2678 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2680 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2716 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2720 */ NdrFcShort( 0x13 ), /* 19 */ +/* 2722 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ +/* 2724 */ NdrFcShort( 0x26 ), /* 38 */ +/* 2726 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2728 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x6, /* 6 */ -/* 2682 */ 0x12, /* 18 */ +/* 2730 */ 0x12, /* 18 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2684 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2686 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2688 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2690 */ NdrFcShort( 0x6 ), /* 6 */ -/* 2692 */ 0x6, /* 6 */ +/* 2732 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2734 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2736 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2738 */ NdrFcShort( 0x6 ), /* 6 */ +/* 2740 */ 0x6, /* 6 */ 0x80, /* 128 */ -/* 2694 */ 0x81, /* 129 */ +/* 2742 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 2696 */ 0x83, /* 131 */ +/* 2744 */ 0x83, /* 131 */ 0x84, /* 132 */ -/* 2698 */ 0x85, /* 133 */ +/* 2746 */ 0x85, /* 133 */ 0x0, /* 0 */ /* Parameter startIndex */ -/* 2700 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2702 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2704 */ 0x8, /* FC_LONG */ +/* 2748 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2750 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2752 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endIndex */ -/* 2706 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2708 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2710 */ 0x8, /* FC_LONG */ +/* 2754 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2756 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2758 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter coordinateType */ -/* 2712 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2714 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2716 */ 0xd, /* FC_ENUM16 */ +/* 2760 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2762 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2764 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter x */ -/* 2718 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2720 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2722 */ 0x8, /* FC_LONG */ +/* 2766 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2768 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 2770 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter y */ -/* 2724 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2726 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 2728 */ 0x8, /* FC_LONG */ +/* 2772 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2774 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 2776 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2730 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2732 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ -/* 2734 */ 0x8, /* FC_LONG */ +/* 2778 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2780 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ +/* 2782 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_newText */ -/* 2736 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2784 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2738 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2742 */ NdrFcShort( 0x14 ), /* 20 */ -/* 2744 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2746 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2748 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2750 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2786 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2790 */ NdrFcShort( 0x14 ), /* 20 */ +/* 2792 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2794 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2796 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2798 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 2752 */ 0xe, /* 14 */ +/* 2800 */ 0xe, /* 14 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2754 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2756 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2758 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2760 */ NdrFcShort( 0x2 ), /* 2 */ -/* 2762 */ 0x2, /* 2 */ +/* 2802 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2804 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2806 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2808 */ NdrFcShort( 0x2 ), /* 2 */ +/* 2810 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 2764 */ 0x81, /* 129 */ +/* 2812 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter newText */ -/* 2766 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ -/* 2768 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2770 */ NdrFcShort( 0x52e ), /* Type Offset=1326 */ +/* 2814 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +/* 2816 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2818 */ NdrFcShort( 0x548 ), /* Type Offset=1352 */ /* Return value */ -/* 2772 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2774 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2776 */ 0x8, /* FC_LONG */ +/* 2820 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2822 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2824 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_oldText */ -/* 2778 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2826 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2780 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2784 */ NdrFcShort( 0x15 ), /* 21 */ -/* 2786 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2788 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2790 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2792 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2828 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2832 */ NdrFcShort( 0x15 ), /* 21 */ +/* 2834 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2836 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2838 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2840 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 2794 */ 0xe, /* 14 */ +/* 2842 */ 0xe, /* 14 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2796 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2798 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2800 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2802 */ NdrFcShort( 0x2 ), /* 2 */ -/* 2804 */ 0x2, /* 2 */ +/* 2844 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2846 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2848 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2850 */ NdrFcShort( 0x2 ), /* 2 */ +/* 2852 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 2806 */ 0x81, /* 129 */ +/* 2854 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter oldText */ -/* 2808 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ -/* 2810 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2812 */ NdrFcShort( 0x52e ), /* Type Offset=1326 */ +/* 2856 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +/* 2858 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2860 */ NdrFcShort( 0x548 ), /* Type Offset=1352 */ /* Return value */ -/* 2814 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2816 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2818 */ 0x8, /* FC_LONG */ +/* 2862 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2864 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2866 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_attributeRange */ -/* 2820 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2868 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2822 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2826 */ NdrFcShort( 0x16 ), /* 22 */ -/* 2828 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ -/* 2830 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2832 */ NdrFcShort( 0x40 ), /* 64 */ -/* 2834 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ +/* 2870 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2874 */ NdrFcShort( 0x16 ), /* 22 */ +/* 2876 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ +/* 2878 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2880 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2882 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ 0x6, /* 6 */ -/* 2836 */ 0x12, /* 18 */ +/* 2884 */ 0x12, /* 18 */ 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */ -/* 2838 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2840 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2842 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2844 */ NdrFcShort( 0x6 ), /* 6 */ -/* 2846 */ 0x6, /* 6 */ +/* 2886 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2888 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2890 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2892 */ NdrFcShort( 0x6 ), /* 6 */ +/* 2894 */ 0x6, /* 6 */ 0x80, /* 128 */ -/* 2848 */ 0x81, /* 129 */ +/* 2896 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 2850 */ 0x83, /* 131 */ +/* 2898 */ 0x83, /* 131 */ 0x84, /* 132 */ -/* 2852 */ 0x85, /* 133 */ +/* 2900 */ 0x85, /* 133 */ 0x0, /* 0 */ /* Parameter offset */ -/* 2854 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2856 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2858 */ 0x8, /* FC_LONG */ +/* 2902 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2904 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 2906 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter filter */ -/* 2860 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ -/* 2862 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2864 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ +/* 2908 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 2910 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 2912 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ /* Parameter startOffset */ -/* 2866 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2868 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 2870 */ 0x8, /* FC_LONG */ +/* 2914 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2916 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2918 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2872 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2874 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2876 */ 0x8, /* FC_LONG */ +/* 2920 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2922 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 2924 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter attributeValues */ -/* 2878 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 2880 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 2882 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - - /* Return value */ - -/* 2884 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2886 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ -/* 2888 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure deleteText */ - -/* 2890 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 2892 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2896 */ NdrFcShort( 0x4 ), /* 4 */ -/* 2898 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2900 */ NdrFcShort( 0x10 ), /* 16 */ -/* 2902 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2904 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 2906 */ 0xe, /* 14 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 2908 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2910 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2912 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2914 */ NdrFcShort( 0x3 ), /* 3 */ -/* 2916 */ 0x3, /* 3 */ - 0x80, /* 128 */ -/* 2918 */ 0x81, /* 129 */ - 0x82, /* 130 */ - - /* Parameter startOffset */ - -/* 2920 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2922 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 2924 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter endOffset */ - -/* 2926 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2928 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2930 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 2926 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2928 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 2930 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ /* 2932 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2934 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 2934 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ /* 2936 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure insertText */ + /* Procedure deleteText */ /* 2938 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 2940 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2944 */ NdrFcShort( 0x5 ), /* 5 */ +/* 2944 */ NdrFcShort( 0x4 ), /* 4 */ /* 2946 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2948 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2948 */ NdrFcShort( 0x10 ), /* 16 */ /* 2950 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2952 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ +/* 2952 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x3, /* 3 */ /* 2954 */ 0xe, /* 14 */ - 0x5, /* Ext Flags: new corr desc, srv corr check, */ + 0x1, /* Ext Flags: new corr desc, */ /* 2956 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2958 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2958 */ NdrFcShort( 0x0 ), /* 0 */ /* 2960 */ NdrFcShort( 0x0 ), /* 0 */ /* 2962 */ NdrFcShort( 0x3 ), /* 3 */ /* 2964 */ 0x3, /* 3 */ @@ -2958,18 +2964,19 @@ /* 2966 */ 0x81, /* 129 */ 0x82, /* 130 */ - /* Parameter offset */ + /* Parameter startOffset */ /* 2968 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 2970 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ /* 2972 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter text */ + /* Parameter endOffset */ -/* 2974 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2974 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 2976 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 2978 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ +/* 2978 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ /* Return value */ @@ -2978,21 +2985,21 @@ /* 2984 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure cutText */ + /* Procedure insertText */ /* 2986 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 2988 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2992 */ NdrFcShort( 0x6 ), /* 6 */ +/* 2992 */ NdrFcShort( 0x5 ), /* 5 */ /* 2994 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 2996 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2996 */ NdrFcShort( 0x8 ), /* 8 */ /* 2998 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3000 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3000 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x3, /* 3 */ /* 3002 */ 0xe, /* 14 */ - 0x1, /* Ext Flags: new corr desc, */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ /* 3004 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3006 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3006 */ NdrFcShort( 0x1 ), /* 1 */ /* 3008 */ NdrFcShort( 0x0 ), /* 0 */ /* 3010 */ NdrFcShort( 0x3 ), /* 3 */ /* 3012 */ 0x3, /* 3 */ @@ -3000,19 +3007,18 @@ /* 3014 */ 0x81, /* 129 */ 0x82, /* 130 */ - /* Parameter startOffset */ + /* Parameter offset */ /* 3016 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3018 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ /* 3020 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter endOffset */ + /* Parameter text */ -/* 3022 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3022 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ /* 3024 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3026 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3026 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ /* Return value */ @@ -3021,192 +3027,193 @@ /* 3032 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure pasteText */ + /* Procedure cutText */ /* 3034 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3036 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3040 */ NdrFcShort( 0x7 ), /* 7 */ -/* 3042 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 3044 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3040 */ NdrFcShort( 0x6 ), /* 6 */ +/* 3042 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 3044 */ NdrFcShort( 0x10 ), /* 16 */ /* 3046 */ NdrFcShort( 0x8 ), /* 8 */ /* 3048 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 3050 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ /* 3052 */ NdrFcShort( 0x0 ), /* 0 */ /* 3054 */ NdrFcShort( 0x0 ), /* 0 */ /* 3056 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3058 */ NdrFcShort( 0x2 ), /* 2 */ -/* 3060 */ 0x2, /* 2 */ +/* 3058 */ NdrFcShort( 0x3 ), /* 3 */ +/* 3060 */ 0x3, /* 3 */ 0x80, /* 128 */ /* 3062 */ 0x81, /* 129 */ - 0x0, /* 0 */ + 0x82, /* 130 */ - /* Parameter offset */ + /* Parameter startOffset */ /* 3064 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3066 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ /* 3068 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Parameter endOffset */ -/* 3070 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3070 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3072 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ /* 3074 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Return value */ + +/* 3076 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3078 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3080 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure pasteText */ + +/* 3082 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3084 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3088 */ NdrFcShort( 0x7 ), /* 7 */ +/* 3090 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3092 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3094 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3096 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3098 */ 0xe, /* 14 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3100 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3102 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3104 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3106 */ NdrFcShort( 0x2 ), /* 2 */ +/* 3108 */ 0x2, /* 2 */ + 0x80, /* 128 */ +/* 3110 */ 0x81, /* 129 */ + 0x0, /* 0 */ + + /* Parameter offset */ + +/* 3112 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3114 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3116 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3118 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3120 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3122 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure replaceText */ -/* 3076 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3124 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3078 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3082 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3084 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 3086 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3088 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3090 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ +/* 3126 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3130 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3132 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 3134 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3136 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3138 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x4, /* 4 */ -/* 3092 */ 0x10, /* 16 */ +/* 3140 */ 0x10, /* 16 */ 0x5, /* Ext Flags: new corr desc, srv corr check, */ -/* 3094 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3096 */ NdrFcShort( 0x1 ), /* 1 */ -/* 3098 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3100 */ NdrFcShort( 0x4 ), /* 4 */ -/* 3102 */ 0x4, /* 4 */ +/* 3142 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3144 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3146 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3148 */ NdrFcShort( 0x4 ), /* 4 */ +/* 3150 */ 0x4, /* 4 */ 0x80, /* 128 */ -/* 3104 */ 0x81, /* 129 */ +/* 3152 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 3106 */ 0x83, /* 131 */ +/* 3154 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 3108 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3110 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3112 */ 0x8, /* FC_LONG */ +/* 3156 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3158 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3160 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 3114 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3116 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3118 */ 0x8, /* FC_LONG */ +/* 3162 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3164 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3166 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 3120 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ -/* 3122 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 3124 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ +/* 3168 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 3170 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3172 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ /* Return value */ -/* 3126 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3128 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 3130 */ 0x8, /* FC_LONG */ +/* 3174 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3176 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 3178 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure setAttributes */ -/* 3132 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3180 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3134 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3138 */ NdrFcShort( 0x9 ), /* 9 */ -/* 3140 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 3142 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3144 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3146 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ +/* 3182 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3186 */ NdrFcShort( 0x9 ), /* 9 */ +/* 3188 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 3190 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3192 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3194 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x4, /* 4 */ -/* 3148 */ 0x10, /* 16 */ +/* 3196 */ 0x10, /* 16 */ 0x5, /* Ext Flags: new corr desc, srv corr check, */ -/* 3150 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3152 */ NdrFcShort( 0x1 ), /* 1 */ -/* 3154 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3156 */ NdrFcShort( 0x4 ), /* 4 */ -/* 3158 */ 0x4, /* 4 */ +/* 3198 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3200 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3202 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3204 */ NdrFcShort( 0x4 ), /* 4 */ +/* 3206 */ 0x4, /* 4 */ 0x80, /* 128 */ -/* 3160 */ 0x81, /* 129 */ +/* 3208 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 3162 */ 0x83, /* 131 */ +/* 3210 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 3164 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3166 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3168 */ 0x8, /* FC_LONG */ +/* 3212 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3214 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3216 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 3170 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3172 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3174 */ 0x8, /* FC_LONG */ +/* 3218 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3220 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3222 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter attributes */ -/* 3176 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ -/* 3178 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 3180 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ - - /* Return value */ - -/* 3182 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3184 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 3186 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_anchor */ - -/* 3188 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3190 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3194 */ NdrFcShort( 0x9 ), /* 9 */ -/* 3196 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 3198 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3200 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3202 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3204 */ 0xe, /* 14 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3206 */ NdrFcShort( 0x1 ), /* 1 */ -/* 3208 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3210 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3212 */ NdrFcShort( 0x3 ), /* 3 */ -/* 3214 */ 0x3, /* 3 */ - 0x80, /* 128 */ -/* 3216 */ 0x81, /* 129 */ - 0x82, /* 130 */ - - /* Parameter index */ - -/* 3218 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3220 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3222 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter anchor */ - -/* 3224 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 3226 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3228 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ +/* 3224 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 3226 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3228 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ /* Return value */ /* 3230 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3232 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3232 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 3234 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_anchorTarget */ + /* Procedure get_anchor */ /* 3236 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3238 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3242 */ NdrFcShort( 0xa ), /* 10 */ +/* 3242 */ NdrFcShort( 0x9 ), /* 9 */ /* 3244 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 3246 */ NdrFcShort( 0x8 ), /* 8 */ /* 3248 */ NdrFcShort( 0x8 ), /* 8 */ @@ -3230,7 +3237,7 @@ /* 3270 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter anchorTarget */ + /* Parameter anchor */ /* 3272 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ /* 3274 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ @@ -3243,29 +3250,71 @@ /* 3282 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Procedure get_anchorTarget */ + +/* 3284 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3286 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3290 */ NdrFcShort( 0xa ), /* 10 */ +/* 3292 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 3294 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3296 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3298 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3300 */ 0xe, /* 14 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3302 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3304 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3306 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3308 */ NdrFcShort( 0x3 ), /* 3 */ +/* 3310 */ 0x3, /* 3 */ + 0x80, /* 128 */ +/* 3312 */ 0x81, /* 129 */ + 0x82, /* 130 */ + + /* Parameter index */ + +/* 3314 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3316 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3318 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter anchorTarget */ + +/* 3320 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 3322 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3324 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ + + /* Return value */ + +/* 3326 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3328 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3330 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure get_nRows */ /* Procedure get_startIndex */ -/* 3284 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3332 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3286 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3290 */ NdrFcShort( 0xb ), /* 11 */ -/* 3292 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 3294 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3296 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3298 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3334 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3338 */ NdrFcShort( 0xb ), /* 11 */ +/* 3340 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3342 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3344 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3346 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 3300 */ 0xe, /* 14 */ +/* 3348 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3302 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3304 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3306 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3308 */ NdrFcShort( 0x2 ), /* 2 */ -/* 3310 */ 0x2, /* 2 */ +/* 3350 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3352 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3354 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3356 */ NdrFcShort( 0x2 ), /* 2 */ +/* 3358 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 3312 */ 0x81, /* 129 */ +/* 3360 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter rowCount */ @@ -3273,9 +3322,9 @@ /* Parameter index */ -/* 3314 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3316 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3318 */ 0x8, /* FC_LONG */ +/* 3362 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3364 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3366 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -3283,9 +3332,9 @@ /* Return value */ -/* 3320 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3322 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3324 */ 0x8, /* FC_LONG */ +/* 3368 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3370 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3372 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nSelectedChildren */ @@ -3293,24 +3342,24 @@ /* Procedure get_endIndex */ -/* 3326 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3374 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3328 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3332 */ NdrFcShort( 0xc ), /* 12 */ -/* 3334 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 3336 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3338 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3340 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3376 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3380 */ NdrFcShort( 0xc ), /* 12 */ +/* 3382 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3384 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3386 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3388 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 3342 */ 0xe, /* 14 */ +/* 3390 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3344 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3346 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3348 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3350 */ NdrFcShort( 0x2 ), /* 2 */ -/* 3352 */ 0x2, /* 2 */ +/* 3392 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3394 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3396 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3398 */ NdrFcShort( 0x2 ), /* 2 */ +/* 3400 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 3354 */ 0x81, /* 129 */ +/* 3402 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter cellCount */ @@ -3318,9 +3367,9 @@ /* Parameter index */ -/* 3356 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3358 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3360 */ 0x8, /* FC_LONG */ +/* 3404 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3406 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3408 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -3328,135 +3377,93 @@ /* Return value */ -/* 3362 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3364 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3366 */ 0x8, /* FC_LONG */ +/* 3410 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3412 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3414 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_valid */ -/* 3368 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3416 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3370 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3374 */ NdrFcShort( 0xd ), /* 13 */ -/* 3376 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 3378 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3380 */ NdrFcShort( 0x21 ), /* 33 */ -/* 3382 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3418 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3422 */ NdrFcShort( 0xd ), /* 13 */ +/* 3424 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3426 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3428 */ NdrFcShort( 0x21 ), /* 33 */ +/* 3430 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 3384 */ 0xe, /* 14 */ +/* 3432 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3386 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3388 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3390 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3392 */ NdrFcShort( 0x2 ), /* 2 */ -/* 3394 */ 0x2, /* 2 */ +/* 3434 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3436 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3438 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3440 */ NdrFcShort( 0x2 ), /* 2 */ +/* 3442 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 3396 */ 0x81, /* 129 */ +/* 3444 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter valid */ -/* 3398 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3400 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3402 */ 0x3, /* FC_SMALL */ +/* 3446 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3448 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3450 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 3404 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3406 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3408 */ 0x8, /* FC_LONG */ +/* 3452 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3454 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3456 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nHyperlinks */ -/* 3410 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3458 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3412 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3416 */ NdrFcShort( 0x16 ), /* 22 */ -/* 3418 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 3420 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3422 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3424 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3460 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3464 */ NdrFcShort( 0x16 ), /* 22 */ +/* 3466 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3468 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3470 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3472 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 3426 */ 0xe, /* 14 */ +/* 3474 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3428 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3430 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3432 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3434 */ NdrFcShort( 0x2 ), /* 2 */ -/* 3436 */ 0x2, /* 2 */ +/* 3476 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3478 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3480 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3482 */ NdrFcShort( 0x2 ), /* 2 */ +/* 3484 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 3438 */ 0x81, /* 129 */ +/* 3486 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter hyperlinkCount */ -/* 3440 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3442 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3444 */ 0x8, /* FC_LONG */ +/* 3488 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3490 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3492 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 3446 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3448 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3450 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_hyperlink */ - -/* 3452 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3454 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3458 */ NdrFcShort( 0x17 ), /* 23 */ -/* 3460 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 3462 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3464 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3466 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3468 */ 0xe, /* 14 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3470 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3472 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3474 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3476 */ NdrFcShort( 0x3 ), /* 3 */ -/* 3478 */ 0x3, /* 3 */ - 0x80, /* 128 */ -/* 3480 */ 0x81, /* 129 */ - 0x82, /* 130 */ - - /* Parameter index */ - -/* 3482 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3484 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3486 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter hyperlink */ - -/* 3488 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3490 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3492 */ NdrFcShort( 0x546 ), /* Type Offset=1350 */ - - /* Return value */ - /* 3494 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3496 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3496 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ /* 3498 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_hyperlinkIndex */ + /* Procedure get_hyperlink */ /* 3500 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3502 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3506 */ NdrFcShort( 0x18 ), /* 24 */ +/* 3506 */ NdrFcShort( 0x17 ), /* 23 */ /* 3508 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 3510 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3512 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3514 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3512 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3514 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x3, /* 3 */ /* 3516 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ @@ -3469,19 +3476,18 @@ /* 3528 */ 0x81, /* 129 */ 0x82, /* 130 */ - /* Parameter charIndex */ + /* Parameter index */ /* 3530 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3532 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ /* 3534 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter hyperlinkIndex */ + /* Parameter hyperlink */ -/* 3536 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3536 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ /* 3538 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3540 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3540 */ NdrFcShort( 0x560 ), /* Type Offset=1376 */ /* Return value */ @@ -3490,20 +3496,20 @@ /* 3546 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_hyperlinks */ + /* Procedure get_hyperlinkIndex */ /* 3548 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3550 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3554 */ NdrFcShort( 0x19 ), /* 25 */ +/* 3554 */ NdrFcShort( 0x18 ), /* 24 */ /* 3556 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 3558 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3558 */ NdrFcShort( 0x8 ), /* 8 */ /* 3560 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3562 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3562 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x3, /* 3 */ /* 3564 */ 0xe, /* 14 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3566 */ NdrFcShort( 0x1 ), /* 1 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3566 */ NdrFcShort( 0x0 ), /* 0 */ /* 3568 */ NdrFcShort( 0x0 ), /* 0 */ /* 3570 */ NdrFcShort( 0x0 ), /* 0 */ /* 3572 */ NdrFcShort( 0x3 ), /* 3 */ @@ -3512,13 +3518,14 @@ /* 3576 */ 0x81, /* 129 */ 0x82, /* 130 */ - /* Parameter hyperlinks */ + /* Parameter charIndex */ -/* 3578 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3578 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3580 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3582 */ NdrFcShort( 0x55c ), /* Type Offset=1372 */ +/* 3582 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ - /* Parameter nHyperlinks */ + /* Parameter hyperlinkIndex */ /* 3584 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3586 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ @@ -3532,31 +3539,73 @@ /* 3594 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Procedure get_hyperlinks */ + +/* 3596 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3598 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3602 */ NdrFcShort( 0x19 ), /* 25 */ +/* 3604 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 3606 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3608 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3610 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3612 */ 0xe, /* 14 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3614 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3616 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3618 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3620 */ NdrFcShort( 0x3 ), /* 3 */ +/* 3622 */ 0x3, /* 3 */ + 0x80, /* 128 */ +/* 3624 */ 0x81, /* 129 */ + 0x82, /* 130 */ + + /* Parameter hyperlinks */ + +/* 3626 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3628 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3630 */ NdrFcShort( 0x576 ), /* Type Offset=1398 */ + + /* Parameter nHyperlinks */ + +/* 3632 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3634 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3636 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3638 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3640 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3642 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure get_cellAt */ /* Procedure get_accessibleAt */ -/* 3596 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3644 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3598 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3602 */ NdrFcShort( 0x3 ), /* 3 */ -/* 3604 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 3606 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3608 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3610 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3646 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3650 */ NdrFcShort( 0x3 ), /* 3 */ +/* 3652 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 3654 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3656 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3658 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x4, /* 4 */ -/* 3612 */ 0x10, /* 16 */ +/* 3660 */ 0x10, /* 16 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3614 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3616 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3618 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3620 */ NdrFcShort( 0x4 ), /* 4 */ -/* 3622 */ 0x4, /* 4 */ +/* 3662 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3664 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3666 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3668 */ NdrFcShort( 0x4 ), /* 4 */ +/* 3670 */ 0x4, /* 4 */ 0x80, /* 128 */ -/* 3624 */ 0x81, /* 129 */ +/* 3672 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 3626 */ 0x83, /* 131 */ +/* 3674 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter row */ @@ -3564,9 +3613,9 @@ /* Parameter row */ -/* 3628 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3630 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3632 */ 0x8, /* FC_LONG */ +/* 3676 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3678 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3680 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter column */ @@ -3574,9 +3623,9 @@ /* Parameter column */ -/* 3634 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3636 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3638 */ 0x8, /* FC_LONG */ +/* 3682 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3684 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3686 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter cell */ @@ -3584,18 +3633,18 @@ /* Parameter accessible */ -/* 3640 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3642 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 3644 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 3688 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3690 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3692 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ /* Return value */ -/* 3646 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3648 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 3650 */ 0x8, /* FC_LONG */ +/* 3694 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3696 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 3698 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_caption */ @@ -3603,24 +3652,24 @@ /* Procedure get_caption */ -/* 3652 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3700 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3654 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3658 */ NdrFcShort( 0x4 ), /* 4 */ -/* 3660 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 3662 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3664 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3666 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3702 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3706 */ NdrFcShort( 0x4 ), /* 4 */ +/* 3708 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3710 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3712 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3714 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 3668 */ 0xe, /* 14 */ +/* 3716 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3670 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3672 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3674 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3676 */ NdrFcShort( 0x2 ), /* 2 */ -/* 3678 */ 0x2, /* 2 */ +/* 3718 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3720 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3722 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3724 */ NdrFcShort( 0x2 ), /* 2 */ +/* 3726 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 3680 */ 0x81, /* 129 */ +/* 3728 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter accessible */ @@ -3628,218 +3677,176 @@ /* Parameter accessible */ -/* 3682 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3684 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3686 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 3730 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3732 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3734 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ /* Return value */ -/* 3688 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3690 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3692 */ 0x8, /* FC_LONG */ +/* 3736 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3738 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3740 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_childIndex */ -/* 3694 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3742 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3696 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3700 */ NdrFcShort( 0x5 ), /* 5 */ -/* 3702 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 3704 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3706 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3708 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3744 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3748 */ NdrFcShort( 0x5 ), /* 5 */ +/* 3750 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 3752 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3754 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3756 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 3710 */ 0x10, /* 16 */ +/* 3758 */ 0x10, /* 16 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3712 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3714 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3716 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3718 */ NdrFcShort( 0x4 ), /* 4 */ -/* 3720 */ 0x4, /* 4 */ +/* 3760 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3762 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3764 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3766 */ NdrFcShort( 0x4 ), /* 4 */ +/* 3768 */ 0x4, /* 4 */ 0x80, /* 128 */ -/* 3722 */ 0x81, /* 129 */ +/* 3770 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 3724 */ 0x83, /* 131 */ +/* 3772 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter rowIndex */ -/* 3726 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3728 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3730 */ 0x8, /* FC_LONG */ +/* 3774 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3776 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3778 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter columnIndex */ -/* 3732 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3734 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3736 */ 0x8, /* FC_LONG */ +/* 3780 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3782 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3784 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter cellIndex */ -/* 3738 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3740 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 3742 */ 0x8, /* FC_LONG */ +/* 3786 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3788 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3790 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 3744 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3746 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 3748 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_columnDescription */ - -/* 3750 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3752 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3756 */ NdrFcShort( 0x6 ), /* 6 */ -/* 3758 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 3760 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3762 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3764 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3766 */ 0xe, /* 14 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3768 */ NdrFcShort( 0x1 ), /* 1 */ -/* 3770 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3772 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3774 */ NdrFcShort( 0x3 ), /* 3 */ -/* 3776 */ 0x3, /* 3 */ - 0x80, /* 128 */ -/* 3778 */ 0x81, /* 129 */ - 0x82, /* 130 */ - - /* Parameter column */ - -/* 3780 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3782 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3784 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter description */ - -/* 3786 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 3788 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3790 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - - /* Return value */ - /* 3792 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3794 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3794 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 3796 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_columnExtentAt */ + /* Procedure get_columnDescription */ /* 3798 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3800 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3804 */ NdrFcShort( 0x7 ), /* 7 */ -/* 3806 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 3808 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3810 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3812 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x4, /* 4 */ -/* 3814 */ 0x10, /* 16 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3816 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3804 */ NdrFcShort( 0x6 ), /* 6 */ +/* 3806 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 3808 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3810 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3812 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3814 */ 0xe, /* 14 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3816 */ NdrFcShort( 0x1 ), /* 1 */ /* 3818 */ NdrFcShort( 0x0 ), /* 0 */ /* 3820 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3822 */ NdrFcShort( 0x4 ), /* 4 */ -/* 3824 */ 0x4, /* 4 */ +/* 3822 */ NdrFcShort( 0x3 ), /* 3 */ +/* 3824 */ 0x3, /* 3 */ 0x80, /* 128 */ /* 3826 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 3828 */ 0x83, /* 131 */ + + /* Parameter column */ + +/* 3828 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3830 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3832 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter description */ + +/* 3834 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 3836 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3838 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 3840 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3842 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3844 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_columnExtentAt */ + +/* 3846 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3848 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3852 */ NdrFcShort( 0x7 ), /* 7 */ +/* 3854 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 3856 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3858 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3860 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 3862 */ 0x10, /* 16 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3864 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3866 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3868 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3870 */ NdrFcShort( 0x4 ), /* 4 */ +/* 3872 */ 0x4, /* 4 */ + 0x80, /* 128 */ +/* 3874 */ 0x81, /* 129 */ + 0x82, /* 130 */ +/* 3876 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter row */ -/* 3830 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3832 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3834 */ 0x8, /* FC_LONG */ +/* 3878 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3880 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 3882 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter column */ -/* 3836 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3838 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 3840 */ 0x8, /* FC_LONG */ +/* 3884 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3886 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3888 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter nColumnsSpanned */ -/* 3842 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3844 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 3846 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Return value */ - -/* 3848 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3850 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 3852 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_columnHeader */ - -/* 3854 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3856 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3860 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3862 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 3864 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3866 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3868 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3870 */ 0xe, /* 14 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3872 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3874 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3876 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3878 */ NdrFcShort( 0x3 ), /* 3 */ -/* 3880 */ 0x3, /* 3 */ - 0x80, /* 128 */ -/* 3882 */ 0x81, /* 129 */ - 0x82, /* 130 */ - - /* Parameter accessibleTable */ - -/* 3884 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3886 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3888 */ NdrFcShort( 0x57a ), /* Type Offset=1402 */ - - /* Parameter startingRowIndex */ - /* 3890 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3892 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 3892 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ /* 3894 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ /* 3896 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3898 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3898 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 3900 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_columnIndex */ + /* Procedure get_columnHeader */ /* 3902 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3904 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3908 */ NdrFcShort( 0x9 ), /* 9 */ +/* 3908 */ NdrFcShort( 0x8 ), /* 8 */ /* 3910 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 3912 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3912 */ NdrFcShort( 0x0 ), /* 0 */ /* 3914 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3916 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3916 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x3, /* 3 */ /* 3918 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ @@ -3852,14 +3859,13 @@ /* 3930 */ 0x81, /* 129 */ 0x82, /* 130 */ - /* Parameter cellIndex */ + /* Parameter accessibleTable */ -/* 3932 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3932 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ /* 3934 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 3936 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3936 */ NdrFcShort( 0x594 ), /* Type Offset=1428 */ - /* Parameter columnIndex */ + /* Parameter startingRowIndex */ /* 3938 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3940 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ @@ -3873,269 +3879,270 @@ /* 3948 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_nSelectedRows */ - - - /* Procedure get_nColumns */ + /* Procedure get_columnIndex */ /* 3950 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3952 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3956 */ NdrFcShort( 0xa ), /* 10 */ -/* 3958 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 3960 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3956 */ NdrFcShort( 0x9 ), /* 9 */ +/* 3958 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 3960 */ NdrFcShort( 0x8 ), /* 8 */ /* 3962 */ NdrFcShort( 0x24 ), /* 36 */ /* 3964 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 3966 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ /* 3968 */ NdrFcShort( 0x0 ), /* 0 */ /* 3970 */ NdrFcShort( 0x0 ), /* 0 */ /* 3972 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3974 */ NdrFcShort( 0x2 ), /* 2 */ -/* 3976 */ 0x2, /* 2 */ +/* 3974 */ NdrFcShort( 0x3 ), /* 3 */ +/* 3976 */ 0x3, /* 3 */ 0x80, /* 128 */ /* 3978 */ 0x81, /* 129 */ - 0x0, /* 0 */ + 0x82, /* 130 */ - /* Parameter rowCount */ + /* Parameter cellIndex */ - - /* Parameter columnCount */ - -/* 3980 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3980 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3982 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ /* 3984 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Parameter columnIndex */ - - /* Return value */ - -/* 3986 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3986 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3988 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ /* 3990 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_nSelectedColumns */ - -/* 3992 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3994 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3998 */ NdrFcShort( 0xd ), /* 13 */ -/* 4000 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4002 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4004 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4006 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ -/* 4008 */ 0xe, /* 14 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 4010 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4012 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4014 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4016 */ NdrFcShort( 0x2 ), /* 2 */ -/* 4018 */ 0x2, /* 2 */ - 0x80, /* 128 */ -/* 4020 */ 0x81, /* 129 */ - 0x0, /* 0 */ - - /* Parameter columnCount */ - -/* 4022 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4024 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4026 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - /* Return value */ -/* 4028 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4030 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4032 */ 0x8, /* FC_LONG */ +/* 3992 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3994 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 3996 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nSelectedRows */ -/* 4034 */ 0x33, /* FC_AUTO_HANDLE */ + + /* Procedure get_nColumns */ + +/* 3998 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4036 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4040 */ NdrFcShort( 0xe ), /* 14 */ -/* 4042 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4044 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4046 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4048 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4000 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4004 */ NdrFcShort( 0xa ), /* 10 */ +/* 4006 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4008 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4010 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4012 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4050 */ 0xe, /* 14 */ +/* 4014 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4052 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4054 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4056 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4058 */ NdrFcShort( 0x2 ), /* 2 */ -/* 4060 */ 0x2, /* 2 */ +/* 4016 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4018 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4020 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4022 */ NdrFcShort( 0x2 ), /* 2 */ +/* 4024 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 4062 */ 0x81, /* 129 */ +/* 4026 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter rowCount */ -/* 4064 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4066 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4068 */ 0x8, /* FC_LONG */ + + /* Parameter columnCount */ + +/* 4028 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4030 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4032 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4070 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4072 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ + + /* Return value */ + +/* 4034 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4036 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4038 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nSelectedColumns */ + +/* 4040 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4042 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4046 */ NdrFcShort( 0xd ), /* 13 */ +/* 4048 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4050 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4052 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4054 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4056 */ 0xe, /* 14 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4058 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4060 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4062 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4064 */ NdrFcShort( 0x2 ), /* 2 */ +/* 4066 */ 0x2, /* 2 */ + 0x80, /* 128 */ +/* 4068 */ 0x81, /* 129 */ + 0x0, /* 0 */ + + /* Parameter columnCount */ + +/* 4070 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4072 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ /* 4074 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowDescription */ + /* Return value */ -/* 4076 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 4078 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4082 */ NdrFcShort( 0xf ), /* 15 */ -/* 4084 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 4086 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4088 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4090 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 4092 */ 0xe, /* 14 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 4094 */ NdrFcShort( 0x1 ), /* 1 */ -/* 4096 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4098 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4100 */ NdrFcShort( 0x3 ), /* 3 */ -/* 4102 */ 0x3, /* 3 */ - 0x80, /* 128 */ -/* 4104 */ 0x81, /* 129 */ - 0x82, /* 130 */ - - /* Parameter row */ - -/* 4106 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4108 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4110 */ 0x8, /* FC_LONG */ +/* 4076 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4078 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4080 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter description */ + /* Procedure get_nSelectedRows */ -/* 4112 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 4114 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4116 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 4082 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4084 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4088 */ NdrFcShort( 0xe ), /* 14 */ +/* 4090 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4092 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4094 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4096 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4098 */ 0xe, /* 14 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4100 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4102 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4104 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4106 */ NdrFcShort( 0x2 ), /* 2 */ +/* 4108 */ 0x2, /* 2 */ + 0x80, /* 128 */ +/* 4110 */ 0x81, /* 129 */ + 0x0, /* 0 */ + + /* Parameter rowCount */ + +/* 4112 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4114 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4116 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ /* Return value */ /* 4118 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4120 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4120 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ /* 4122 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowExtentAt */ + /* Procedure get_rowDescription */ /* 4124 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4126 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4130 */ NdrFcShort( 0x10 ), /* 16 */ -/* 4132 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 4134 */ NdrFcShort( 0x10 ), /* 16 */ -/* 4136 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4138 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x4, /* 4 */ -/* 4140 */ 0x10, /* 16 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 4142 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4130 */ NdrFcShort( 0xf ), /* 15 */ +/* 4132 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 4134 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4136 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4138 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 4140 */ 0xe, /* 14 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 4142 */ NdrFcShort( 0x1 ), /* 1 */ /* 4144 */ NdrFcShort( 0x0 ), /* 0 */ /* 4146 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4148 */ NdrFcShort( 0x4 ), /* 4 */ -/* 4150 */ 0x4, /* 4 */ +/* 4148 */ NdrFcShort( 0x3 ), /* 3 */ +/* 4150 */ 0x3, /* 3 */ 0x80, /* 128 */ /* 4152 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 4154 */ 0x83, /* 131 */ + + /* Parameter row */ + +/* 4154 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4156 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4158 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter description */ + +/* 4160 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 4162 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4164 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 4166 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4168 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4170 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_rowExtentAt */ + +/* 4172 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4174 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4178 */ NdrFcShort( 0x10 ), /* 16 */ +/* 4180 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 4182 */ NdrFcShort( 0x10 ), /* 16 */ +/* 4184 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4186 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 4188 */ 0x10, /* 16 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4190 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4192 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4194 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4196 */ NdrFcShort( 0x4 ), /* 4 */ +/* 4198 */ 0x4, /* 4 */ + 0x80, /* 128 */ +/* 4200 */ 0x81, /* 129 */ + 0x82, /* 130 */ +/* 4202 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter row */ -/* 4156 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4158 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4160 */ 0x8, /* FC_LONG */ +/* 4204 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4206 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4208 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter column */ -/* 4162 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4164 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4166 */ 0x8, /* FC_LONG */ +/* 4210 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4212 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4214 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter nRowsSpanned */ -/* 4168 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4170 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4172 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Return value */ - -/* 4174 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4176 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 4178 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_rowHeader */ - -/* 4180 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 4182 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4186 */ NdrFcShort( 0x11 ), /* 17 */ -/* 4188 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 4190 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4192 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4194 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 4196 */ 0xe, /* 14 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 4198 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4200 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4202 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4204 */ NdrFcShort( 0x3 ), /* 3 */ -/* 4206 */ 0x3, /* 3 */ - 0x80, /* 128 */ -/* 4208 */ 0x81, /* 129 */ - 0x82, /* 130 */ - - /* Parameter accessibleTable */ - -/* 4210 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 4212 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4214 */ NdrFcShort( 0x57a ), /* Type Offset=1402 */ - - /* Parameter startingColumnIndex */ - /* 4216 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4218 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4218 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ /* 4220 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ /* 4222 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4224 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4224 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 4226 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowIndex */ + /* Procedure get_rowHeader */ /* 4228 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4230 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4234 */ NdrFcShort( 0x12 ), /* 18 */ +/* 4234 */ NdrFcShort( 0x11 ), /* 17 */ /* 4236 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 4238 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4238 */ NdrFcShort( 0x0 ), /* 0 */ /* 4240 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4242 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4242 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x3, /* 3 */ /* 4244 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ @@ -4148,14 +4155,13 @@ /* 4256 */ 0x81, /* 129 */ 0x82, /* 130 */ - /* Parameter cellIndex */ + /* Parameter accessibleTable */ -/* 4258 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4258 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ /* 4260 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4262 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 4262 */ NdrFcShort( 0x594 ), /* Type Offset=1428 */ - /* Parameter rowIndex */ + /* Parameter startingColumnIndex */ /* 4264 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 4266 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ @@ -4169,243 +4175,243 @@ /* 4274 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_selectedChildren */ + /* Procedure get_rowIndex */ /* 4276 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4278 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4282 */ NdrFcShort( 0x13 ), /* 19 */ -/* 4284 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 4282 */ NdrFcShort( 0x12 ), /* 18 */ +/* 4284 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 4286 */ NdrFcShort( 0x8 ), /* 8 */ /* 4288 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4290 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x4, /* 4 */ -/* 4292 */ 0x10, /* 16 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 4294 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4290 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ +/* 4292 */ 0xe, /* 14 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4294 */ NdrFcShort( 0x0 ), /* 0 */ /* 4296 */ NdrFcShort( 0x0 ), /* 0 */ /* 4298 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4300 */ NdrFcShort( 0x4 ), /* 4 */ -/* 4302 */ 0x4, /* 4 */ +/* 4300 */ NdrFcShort( 0x3 ), /* 3 */ +/* 4302 */ 0x3, /* 3 */ 0x80, /* 128 */ /* 4304 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 4306 */ 0x83, /* 131 */ + + /* Parameter cellIndex */ + +/* 4306 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4308 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4310 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter rowIndex */ + +/* 4312 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4314 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4316 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4318 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4320 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4322 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_selectedChildren */ + +/* 4324 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4326 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4330 */ NdrFcShort( 0x13 ), /* 19 */ +/* 4332 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 4334 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4336 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4338 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 4340 */ 0x10, /* 16 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 4342 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4344 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4346 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4348 */ NdrFcShort( 0x4 ), /* 4 */ +/* 4350 */ 0x4, /* 4 */ + 0x80, /* 128 */ +/* 4352 */ 0x81, /* 129 */ + 0x82, /* 130 */ +/* 4354 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter maxChildren */ -/* 4308 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4310 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4312 */ 0x8, /* FC_LONG */ +/* 4356 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4358 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4360 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter children */ -/* 4314 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ -/* 4316 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4318 */ NdrFcShort( 0x590 ), /* Type Offset=1424 */ +/* 4362 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 4364 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4366 */ NdrFcShort( 0x5aa ), /* Type Offset=1450 */ /* Parameter nChildren */ -/* 4320 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4322 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4324 */ 0x8, /* FC_LONG */ +/* 4368 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4370 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4372 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4326 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4328 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 4330 */ 0x8, /* FC_LONG */ +/* 4374 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4376 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 4378 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_selectedColumns */ -/* 4332 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4380 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4334 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4338 */ NdrFcShort( 0x14 ), /* 20 */ -/* 4340 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 4342 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4344 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4346 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 4382 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4386 */ NdrFcShort( 0x14 ), /* 20 */ +/* 4388 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 4390 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4392 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4394 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x4, /* 4 */ -/* 4348 */ 0x10, /* 16 */ +/* 4396 */ 0x10, /* 16 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 4350 */ NdrFcShort( 0x1 ), /* 1 */ -/* 4352 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4354 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4356 */ NdrFcShort( 0x4 ), /* 4 */ -/* 4358 */ 0x4, /* 4 */ +/* 4398 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4400 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4402 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4404 */ NdrFcShort( 0x4 ), /* 4 */ +/* 4406 */ 0x4, /* 4 */ 0x80, /* 128 */ -/* 4360 */ 0x81, /* 129 */ +/* 4408 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 4362 */ 0x83, /* 131 */ +/* 4410 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter maxColumns */ -/* 4364 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4366 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4368 */ 0x8, /* FC_LONG */ +/* 4412 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4414 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4416 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter columns */ -/* 4370 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ -/* 4372 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4374 */ NdrFcShort( 0x590 ), /* Type Offset=1424 */ +/* 4418 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 4420 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4422 */ NdrFcShort( 0x5aa ), /* Type Offset=1450 */ /* Parameter nColumns */ -/* 4376 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4378 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4380 */ 0x8, /* FC_LONG */ +/* 4424 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4426 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4428 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4382 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4384 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 4386 */ 0x8, /* FC_LONG */ +/* 4430 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4432 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 4434 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_selectedRows */ -/* 4388 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4436 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4390 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4394 */ NdrFcShort( 0x15 ), /* 21 */ -/* 4396 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 4398 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4400 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4402 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 4438 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4442 */ NdrFcShort( 0x15 ), /* 21 */ +/* 4444 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 4446 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4448 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4450 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x4, /* 4 */ -/* 4404 */ 0x10, /* 16 */ +/* 4452 */ 0x10, /* 16 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 4406 */ NdrFcShort( 0x1 ), /* 1 */ -/* 4408 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4410 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4412 */ NdrFcShort( 0x4 ), /* 4 */ -/* 4414 */ 0x4, /* 4 */ +/* 4454 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4456 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4458 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4460 */ NdrFcShort( 0x4 ), /* 4 */ +/* 4462 */ 0x4, /* 4 */ 0x80, /* 128 */ -/* 4416 */ 0x81, /* 129 */ +/* 4464 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 4418 */ 0x83, /* 131 */ +/* 4466 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter maxRows */ -/* 4420 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4422 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4424 */ 0x8, /* FC_LONG */ +/* 4468 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4470 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4472 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter rows */ -/* 4426 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ -/* 4428 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4430 */ NdrFcShort( 0x590 ), /* Type Offset=1424 */ +/* 4474 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 4476 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4478 */ NdrFcShort( 0x5aa ), /* Type Offset=1450 */ /* Parameter nRows */ -/* 4432 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4434 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4436 */ 0x8, /* FC_LONG */ +/* 4480 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4482 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4484 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4438 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4440 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 4442 */ 0x8, /* FC_LONG */ +/* 4486 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4488 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 4490 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_summary */ -/* 4444 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4492 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4446 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4450 */ NdrFcShort( 0x16 ), /* 22 */ -/* 4452 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4454 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4456 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4458 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 4494 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4498 */ NdrFcShort( 0x16 ), /* 22 */ +/* 4500 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4502 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4504 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4506 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 4460 */ 0xe, /* 14 */ +/* 4508 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4462 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4464 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4466 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4468 */ NdrFcShort( 0x2 ), /* 2 */ -/* 4470 */ 0x2, /* 2 */ +/* 4510 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4512 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4514 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4516 */ NdrFcShort( 0x2 ), /* 2 */ +/* 4518 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 4472 */ 0x81, /* 129 */ +/* 4520 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter accessible */ -/* 4474 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 4476 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4478 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ - - /* Return value */ - -/* 4480 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4482 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4484 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_isColumnSelected */ - -/* 4486 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 4488 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4492 */ NdrFcShort( 0x17 ), /* 23 */ -/* 4494 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 4496 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4498 */ NdrFcShort( 0x21 ), /* 33 */ -/* 4500 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 4502 */ 0xe, /* 14 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 4504 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4506 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4508 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4510 */ NdrFcShort( 0x3 ), /* 3 */ -/* 4512 */ 0x3, /* 3 */ - 0x80, /* 128 */ -/* 4514 */ 0x81, /* 129 */ - 0x82, /* 130 */ - - /* Parameter column */ - -/* 4516 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4518 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4520 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter isSelected */ - -/* 4522 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4524 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4526 */ 0x3, /* FC_SMALL */ - 0x0, /* 0 */ +/* 4522 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 4524 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4526 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ /* 4528 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4530 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4530 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ /* 4532 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isRowSelected */ + /* Procedure get_isColumnSelected */ /* 4534 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4536 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4540 */ NdrFcShort( 0x18 ), /* 24 */ +/* 4540 */ NdrFcShort( 0x17 ), /* 23 */ /* 4542 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 4544 */ NdrFcShort( 0x8 ), /* 8 */ /* 4546 */ NdrFcShort( 0x21 ), /* 33 */ @@ -4422,7 +4428,7 @@ /* 4562 */ 0x81, /* 129 */ 0x82, /* 130 */ - /* Parameter row */ + /* Parameter column */ /* 4564 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 4566 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ @@ -4443,310 +4449,353 @@ /* 4580 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isSelected */ + /* Procedure get_isRowSelected */ /* 4582 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4584 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4588 */ NdrFcShort( 0x19 ), /* 25 */ -/* 4590 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 4592 */ NdrFcShort( 0x10 ), /* 16 */ +/* 4588 */ NdrFcShort( 0x18 ), /* 24 */ +/* 4590 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 4592 */ NdrFcShort( 0x8 ), /* 8 */ /* 4594 */ NdrFcShort( 0x21 ), /* 33 */ /* 4596 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x4, /* 4 */ -/* 4598 */ 0x10, /* 16 */ + 0x3, /* 3 */ +/* 4598 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ /* 4600 */ NdrFcShort( 0x0 ), /* 0 */ /* 4602 */ NdrFcShort( 0x0 ), /* 0 */ /* 4604 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4606 */ NdrFcShort( 0x4 ), /* 4 */ -/* 4608 */ 0x4, /* 4 */ +/* 4606 */ NdrFcShort( 0x3 ), /* 3 */ +/* 4608 */ 0x3, /* 3 */ 0x80, /* 128 */ /* 4610 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 4612 */ 0x83, /* 131 */ - 0x0, /* 0 */ /* Parameter row */ -/* 4614 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4616 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4618 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter column */ - -/* 4620 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4622 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4624 */ 0x8, /* FC_LONG */ +/* 4612 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4614 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4616 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter isSelected */ -/* 4626 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4628 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4630 */ 0x3, /* FC_SMALL */ +/* 4618 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4620 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4622 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 4632 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4634 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 4636 */ 0x8, /* FC_LONG */ +/* 4624 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4626 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4628 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isSelected */ + +/* 4630 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4632 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4636 */ NdrFcShort( 0x19 ), /* 25 */ +/* 4638 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 4640 */ NdrFcShort( 0x10 ), /* 16 */ +/* 4642 */ NdrFcShort( 0x21 ), /* 33 */ +/* 4644 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 4646 */ 0x10, /* 16 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4648 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4650 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4652 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4654 */ NdrFcShort( 0x4 ), /* 4 */ +/* 4656 */ 0x4, /* 4 */ + 0x80, /* 128 */ +/* 4658 */ 0x81, /* 129 */ + 0x82, /* 130 */ +/* 4660 */ 0x83, /* 131 */ + 0x0, /* 0 */ + + /* Parameter row */ + +/* 4662 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4664 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4666 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter column */ + +/* 4668 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4670 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4672 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter isSelected */ + +/* 4674 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4676 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4678 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4680 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4682 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 4684 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure selectRow */ -/* 4638 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4686 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4640 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4644 */ NdrFcShort( 0x1a ), /* 26 */ -/* 4646 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4648 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4650 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4652 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4688 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4692 */ NdrFcShort( 0x1a ), /* 26 */ +/* 4694 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4696 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4698 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4700 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4654 */ 0xe, /* 14 */ +/* 4702 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4656 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4658 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4660 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4662 */ NdrFcShort( 0x2 ), /* 2 */ -/* 4664 */ 0x2, /* 2 */ +/* 4704 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4706 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4708 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4710 */ NdrFcShort( 0x2 ), /* 2 */ +/* 4712 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 4666 */ 0x81, /* 129 */ +/* 4714 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter row */ -/* 4668 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4670 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4672 */ 0x8, /* FC_LONG */ +/* 4716 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4718 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4720 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4674 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4676 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4678 */ 0x8, /* FC_LONG */ +/* 4722 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4724 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4726 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure selectColumn */ -/* 4680 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4728 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4682 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4686 */ NdrFcShort( 0x1b ), /* 27 */ -/* 4688 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4690 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4692 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4694 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4730 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4734 */ NdrFcShort( 0x1b ), /* 27 */ +/* 4736 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4738 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4740 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4742 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4696 */ 0xe, /* 14 */ +/* 4744 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4698 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4700 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4702 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4704 */ NdrFcShort( 0x2 ), /* 2 */ -/* 4706 */ 0x2, /* 2 */ +/* 4746 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4748 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4750 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4752 */ NdrFcShort( 0x2 ), /* 2 */ +/* 4754 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 4708 */ 0x81, /* 129 */ +/* 4756 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter column */ -/* 4710 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4712 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4714 */ 0x8, /* FC_LONG */ +/* 4758 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4760 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4762 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4716 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4718 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4720 */ 0x8, /* FC_LONG */ +/* 4764 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4766 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4768 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure unselectRow */ -/* 4722 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4770 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4724 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4728 */ NdrFcShort( 0x1c ), /* 28 */ -/* 4730 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4732 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4734 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4736 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4772 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4776 */ NdrFcShort( 0x1c ), /* 28 */ +/* 4778 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4780 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4782 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4784 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4738 */ 0xe, /* 14 */ +/* 4786 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4740 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4742 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4744 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4746 */ NdrFcShort( 0x2 ), /* 2 */ -/* 4748 */ 0x2, /* 2 */ +/* 4788 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4790 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4792 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4794 */ NdrFcShort( 0x2 ), /* 2 */ +/* 4796 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 4750 */ 0x81, /* 129 */ +/* 4798 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter row */ -/* 4752 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4754 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4756 */ 0x8, /* FC_LONG */ +/* 4800 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4802 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4804 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4758 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4760 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4762 */ 0x8, /* FC_LONG */ +/* 4806 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4808 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4810 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure unselectColumn */ -/* 4764 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4812 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4766 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4770 */ NdrFcShort( 0x1d ), /* 29 */ -/* 4772 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4774 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4776 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4778 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4814 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4818 */ NdrFcShort( 0x1d ), /* 29 */ +/* 4820 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4822 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4824 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4826 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4780 */ 0xe, /* 14 */ +/* 4828 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4782 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4784 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4786 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4788 */ NdrFcShort( 0x2 ), /* 2 */ -/* 4790 */ 0x2, /* 2 */ +/* 4830 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4832 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4834 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4836 */ NdrFcShort( 0x2 ), /* 2 */ +/* 4838 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 4792 */ 0x81, /* 129 */ +/* 4840 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter column */ -/* 4794 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4796 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4798 */ 0x8, /* FC_LONG */ +/* 4842 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4844 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4846 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4800 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4802 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4804 */ 0x8, /* FC_LONG */ +/* 4848 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4850 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4852 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_rowColumnExtentsAtIndex */ -/* 4806 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4854 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4808 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4812 */ NdrFcShort( 0x1e ), /* 30 */ -/* 4814 */ NdrFcShort( 0x40 ), /* ARM64 Stack size/offset = 64 */ -/* 4816 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4818 */ NdrFcShort( 0x91 ), /* 145 */ -/* 4820 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4856 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4860 */ NdrFcShort( 0x1e ), /* 30 */ +/* 4862 */ NdrFcShort( 0x40 ), /* ARM64 Stack size/offset = 64 */ +/* 4864 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4866 */ NdrFcShort( 0x91 ), /* 145 */ +/* 4868 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x7, /* 7 */ -/* 4822 */ 0x12, /* 18 */ +/* 4870 */ 0x12, /* 18 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4824 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4826 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4828 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4830 */ NdrFcShort( 0x7 ), /* 7 */ -/* 4832 */ 0x7, /* 7 */ +/* 4872 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4874 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4876 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4878 */ NdrFcShort( 0x7 ), /* 7 */ +/* 4880 */ 0x7, /* 7 */ 0x80, /* 128 */ -/* 4834 */ 0x81, /* 129 */ +/* 4882 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 4836 */ 0x83, /* 131 */ +/* 4884 */ 0x83, /* 131 */ 0x84, /* 132 */ -/* 4838 */ 0x85, /* 133 */ +/* 4886 */ 0x85, /* 133 */ 0x86, /* 134 */ /* Parameter index */ -/* 4840 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4842 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4844 */ 0x8, /* FC_LONG */ +/* 4888 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4890 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4892 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter row */ -/* 4846 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4848 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4850 */ 0x8, /* FC_LONG */ +/* 4894 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4896 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4898 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter column */ -/* 4852 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4854 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4856 */ 0x8, /* FC_LONG */ +/* 4900 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4902 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4904 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter rowExtents */ -/* 4858 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4860 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 4862 */ 0x8, /* FC_LONG */ +/* 4906 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4908 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 4910 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter columnExtents */ -/* 4864 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4866 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 4868 */ 0x8, /* FC_LONG */ +/* 4912 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4914 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 4916 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter isSelected */ -/* 4870 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4872 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ -/* 4874 */ 0x3, /* FC_SMALL */ +/* 4918 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4920 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ +/* 4922 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 4876 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4878 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ -/* 4880 */ 0x8, /* FC_LONG */ +/* 4924 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4926 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ +/* 4928 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_modelChange */ -/* 4882 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4930 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4884 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4888 */ NdrFcShort( 0x1f ), /* 31 */ -/* 4890 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4892 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4894 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4896 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 4932 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4936 */ NdrFcShort( 0x1f ), /* 31 */ +/* 4938 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4940 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4942 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4944 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 4898 */ 0xe, /* 14 */ +/* 4946 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4900 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4902 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4904 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4906 */ NdrFcShort( 0x2 ), /* 2 */ -/* 4908 */ 0x2, /* 2 */ +/* 4948 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4950 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4952 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4954 */ NdrFcShort( 0x2 ), /* 2 */ +/* 4956 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 4910 */ 0x81, /* 129 */ +/* 4958 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter modelChange */ -/* 4912 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 4914 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4916 */ NdrFcShort( 0x5ae ), /* Type Offset=1454 */ +/* 4960 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 4962 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 4964 */ NdrFcShort( 0x5c8 ), /* Type Offset=1480 */ /* Return value */ -/* 4918 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4920 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4922 */ 0x8, /* FC_LONG */ +/* 4966 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4968 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 4970 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_rowExtent */ @@ -4754,24 +4803,24 @@ /* Procedure get_nColumns */ -/* 4924 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4972 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4926 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4930 */ NdrFcShort( 0x6 ), /* 6 */ -/* 4932 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4934 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4936 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4938 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4974 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4978 */ NdrFcShort( 0x6 ), /* 6 */ +/* 4980 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 4982 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4984 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4986 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4940 */ 0xe, /* 14 */ +/* 4988 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4942 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4944 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4946 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4948 */ NdrFcShort( 0x2 ), /* 2 */ -/* 4950 */ 0x2, /* 2 */ +/* 4990 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4992 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4994 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4996 */ NdrFcShort( 0x2 ), /* 2 */ +/* 4998 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 4952 */ 0x81, /* 129 */ +/* 5000 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter nRowsSpanned */ @@ -4779,9 +4828,9 @@ /* Parameter columnCount */ -/* 4954 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4956 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 4958 */ 0x8, /* FC_LONG */ +/* 5002 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5004 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5006 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -4789,9 +4838,9 @@ /* Return value */ -/* 4960 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4962 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 4964 */ 0x8, /* FC_LONG */ +/* 5008 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5010 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5012 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_rowIndex */ @@ -4799,24 +4848,24 @@ /* Procedure get_nSelectedCells */ -/* 4966 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5014 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4968 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4972 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4974 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 4976 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4978 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4980 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 5016 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5020 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5022 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5024 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5026 */ NdrFcShort( 0x24 ), /* 36 */ +/* 5028 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4982 */ 0xe, /* 14 */ +/* 5030 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4984 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4986 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4988 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4990 */ NdrFcShort( 0x2 ), /* 2 */ -/* 4992 */ 0x2, /* 2 */ +/* 5032 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5034 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5036 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5038 */ NdrFcShort( 0x2 ), /* 2 */ +/* 5040 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 4994 */ 0x81, /* 129 */ +/* 5042 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter rowIndex */ @@ -4824,9 +4873,9 @@ /* Parameter cellCount */ -/* 4996 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4998 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5000 */ 0x8, /* FC_LONG */ +/* 5044 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5046 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5048 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -4834,98 +4883,56 @@ /* Return value */ -/* 5002 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5004 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5006 */ 0x8, /* FC_LONG */ +/* 5050 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5052 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5054 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nSelectedColumns */ -/* 5008 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5056 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5010 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5014 */ NdrFcShort( 0x9 ), /* 9 */ -/* 5016 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 5018 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5020 */ NdrFcShort( 0x24 ), /* 36 */ -/* 5022 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 5058 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5062 */ NdrFcShort( 0x9 ), /* 9 */ +/* 5064 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5066 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5068 */ NdrFcShort( 0x24 ), /* 36 */ +/* 5070 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 5024 */ 0xe, /* 14 */ +/* 5072 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5026 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5028 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5030 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5032 */ NdrFcShort( 0x2 ), /* 2 */ -/* 5034 */ 0x2, /* 2 */ +/* 5074 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5076 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5078 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5080 */ NdrFcShort( 0x2 ), /* 2 */ +/* 5082 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 5036 */ 0x81, /* 129 */ +/* 5084 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter columnCount */ -/* 5038 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5040 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5042 */ 0x8, /* FC_LONG */ +/* 5086 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5088 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5090 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 5044 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5046 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5048 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_rowDescription */ - -/* 5050 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 5052 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5056 */ NdrFcShort( 0xb ), /* 11 */ -/* 5058 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 5060 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5062 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5064 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 5066 */ 0xe, /* 14 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 5068 */ NdrFcShort( 0x1 ), /* 1 */ -/* 5070 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5072 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5074 */ NdrFcShort( 0x3 ), /* 3 */ -/* 5076 */ 0x3, /* 3 */ - 0x80, /* 128 */ -/* 5078 */ 0x81, /* 129 */ - 0x82, /* 130 */ - - /* Parameter row */ - -/* 5080 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 5082 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5084 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter description */ - -/* 5086 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 5088 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5090 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - - /* Return value */ - /* 5092 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5094 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5094 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ /* 5096 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_selectedCells */ + /* Procedure get_rowDescription */ /* 5098 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5100 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5104 */ NdrFcShort( 0xc ), /* 12 */ +/* 5104 */ NdrFcShort( 0xb ), /* 11 */ /* 5106 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 5108 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5110 */ NdrFcShort( 0x24 ), /* 36 */ +/* 5108 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5110 */ NdrFcShort( 0x8 ), /* 8 */ /* 5112 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x3, /* 3 */ /* 5114 */ 0xe, /* 14 */ @@ -4939,19 +4946,19 @@ /* 5126 */ 0x81, /* 129 */ 0x82, /* 130 */ - /* Parameter cells */ + /* Parameter row */ -/* 5128 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 5128 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 5130 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5132 */ NdrFcShort( 0x5bc ), /* Type Offset=1468 */ - - /* Parameter nSelectedCells */ - -/* 5134 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5136 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5138 */ 0x8, /* FC_LONG */ +/* 5132 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Parameter description */ + +/* 5134 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 5136 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5138 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + /* Return value */ /* 5140 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ @@ -4959,12 +4966,12 @@ /* 5144 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_selectedColumns */ + /* Procedure get_selectedCells */ /* 5146 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5148 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5152 */ NdrFcShort( 0xd ), /* 13 */ +/* 5152 */ NdrFcShort( 0xc ), /* 12 */ /* 5154 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 5156 */ NdrFcShort( 0x0 ), /* 0 */ /* 5158 */ NdrFcShort( 0x24 ), /* 36 */ @@ -4981,13 +4988,13 @@ /* 5174 */ 0x81, /* 129 */ 0x82, /* 130 */ - /* Parameter selectedColumns */ + /* Parameter cells */ /* 5176 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 5178 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5180 */ NdrFcShort( 0x5da ), /* Type Offset=1498 */ +/* 5180 */ NdrFcShort( 0x5d6 ), /* Type Offset=1494 */ - /* Parameter nColumns */ + /* Parameter nSelectedCells */ /* 5182 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5184 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ @@ -5001,12 +5008,12 @@ /* 5192 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_selectedRows */ + /* Procedure get_selectedColumns */ /* 5194 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5196 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5200 */ NdrFcShort( 0xe ), /* 14 */ +/* 5200 */ NdrFcShort( 0xd ), /* 13 */ /* 5202 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 5204 */ NdrFcShort( 0x0 ), /* 0 */ /* 5206 */ NdrFcShort( 0x24 ), /* 36 */ @@ -5023,13 +5030,13 @@ /* 5222 */ 0x81, /* 129 */ 0x82, /* 130 */ - /* Parameter selectedRows */ + /* Parameter selectedColumns */ /* 5224 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 5226 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5228 */ NdrFcShort( 0x5da ), /* Type Offset=1498 */ +/* 5228 */ NdrFcShort( 0x5f4 ), /* Type Offset=1524 */ - /* Parameter nRows */ + /* Parameter nColumns */ /* 5230 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5232 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ @@ -5043,90 +5050,89 @@ /* 5240 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_summary */ + /* Procedure get_selectedRows */ /* 5242 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5244 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5248 */ NdrFcShort( 0xf ), /* 15 */ -/* 5250 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5248 */ NdrFcShort( 0xe ), /* 14 */ +/* 5250 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 5252 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5254 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5254 */ NdrFcShort( 0x24 ), /* 36 */ /* 5256 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 5258 */ 0xe, /* 14 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 5260 */ NdrFcShort( 0x0 ), /* 0 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 5260 */ NdrFcShort( 0x1 ), /* 1 */ /* 5262 */ NdrFcShort( 0x0 ), /* 0 */ /* 5264 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5266 */ NdrFcShort( 0x2 ), /* 2 */ -/* 5268 */ 0x2, /* 2 */ +/* 5266 */ NdrFcShort( 0x3 ), /* 3 */ +/* 5268 */ 0x3, /* 3 */ 0x80, /* 128 */ /* 5270 */ 0x81, /* 129 */ - 0x0, /* 0 */ + 0x82, /* 130 */ - /* Parameter accessible */ + /* Parameter selectedRows */ -/* 5272 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 5272 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 5274 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5276 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 5276 */ NdrFcShort( 0x5f4 ), /* Type Offset=1524 */ - /* Return value */ + /* Parameter nRows */ -/* 5278 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5278 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5280 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ /* 5282 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isColumnSelected */ + /* Return value */ -/* 5284 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5284 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5286 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5288 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_summary */ + +/* 5290 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5286 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5290 */ NdrFcShort( 0x10 ), /* 16 */ -/* 5292 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 5294 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5296 */ NdrFcShort( 0x21 ), /* 33 */ -/* 5298 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 5300 */ 0xe, /* 14 */ +/* 5292 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5296 */ NdrFcShort( 0xf ), /* 15 */ +/* 5298 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5300 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5302 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5304 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 5306 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5302 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5304 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5306 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5308 */ NdrFcShort( 0x3 ), /* 3 */ -/* 5310 */ 0x3, /* 3 */ +/* 5308 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5310 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5312 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5314 */ NdrFcShort( 0x2 ), /* 2 */ +/* 5316 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 5312 */ 0x81, /* 129 */ - 0x82, /* 130 */ - - /* Parameter column */ - -/* 5314 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 5316 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5318 */ 0x8, /* FC_LONG */ +/* 5318 */ 0x81, /* 129 */ 0x0, /* 0 */ - /* Parameter isSelected */ + /* Parameter accessible */ -/* 5320 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5322 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5324 */ 0x3, /* FC_SMALL */ - 0x0, /* 0 */ +/* 5320 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 5322 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5324 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ /* 5326 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5328 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5328 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ /* 5330 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isRowSelected */ + /* Procedure get_isColumnSelected */ /* 5332 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5334 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5338 */ NdrFcShort( 0x11 ), /* 17 */ +/* 5338 */ NdrFcShort( 0x10 ), /* 16 */ /* 5340 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 5342 */ NdrFcShort( 0x8 ), /* 8 */ /* 5344 */ NdrFcShort( 0x21 ), /* 33 */ @@ -5143,7 +5149,7 @@ /* 5360 */ 0x81, /* 129 */ 0x82, /* 130 */ - /* Parameter row */ + /* Parameter column */ /* 5362 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 5364 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ @@ -5164,27 +5170,27 @@ /* 5378 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure selectRow */ + /* Procedure get_isRowSelected */ /* 5380 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5382 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5386 */ NdrFcShort( 0x12 ), /* 18 */ -/* 5388 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5386 */ NdrFcShort( 0x11 ), /* 17 */ +/* 5388 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 5390 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5392 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5392 */ NdrFcShort( 0x21 ), /* 33 */ /* 5394 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 5396 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ /* 5398 */ NdrFcShort( 0x0 ), /* 0 */ /* 5400 */ NdrFcShort( 0x0 ), /* 0 */ /* 5402 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5404 */ NdrFcShort( 0x2 ), /* 2 */ -/* 5406 */ 0x2, /* 2 */ +/* 5404 */ NdrFcShort( 0x3 ), /* 3 */ +/* 5406 */ 0x3, /* 3 */ 0x80, /* 128 */ /* 5408 */ 0x81, /* 129 */ - 0x0, /* 0 */ + 0x82, /* 130 */ /* Parameter row */ @@ -5193,204 +5199,205 @@ /* 5414 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Parameter isSelected */ -/* 5416 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5416 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5418 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5420 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure selectColumn */ - -/* 5422 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 5424 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5428 */ NdrFcShort( 0x13 ), /* 19 */ -/* 5430 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 5432 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5434 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5436 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ -/* 5438 */ 0xe, /* 14 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 5440 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5442 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5444 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5446 */ NdrFcShort( 0x2 ), /* 2 */ -/* 5448 */ 0x2, /* 2 */ - 0x80, /* 128 */ -/* 5450 */ 0x81, /* 129 */ - 0x0, /* 0 */ - - /* Parameter column */ - -/* 5452 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 5454 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5456 */ 0x8, /* FC_LONG */ +/* 5420 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 5458 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5460 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5462 */ 0x8, /* FC_LONG */ +/* 5422 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5424 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5426 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure unselectRow */ + /* Procedure selectRow */ -/* 5464 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5428 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5466 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5470 */ NdrFcShort( 0x14 ), /* 20 */ -/* 5472 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 5474 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5476 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5478 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 5430 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5434 */ NdrFcShort( 0x12 ), /* 18 */ +/* 5436 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5438 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5440 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5442 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 5480 */ 0xe, /* 14 */ +/* 5444 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5482 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5484 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5486 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5488 */ NdrFcShort( 0x2 ), /* 2 */ -/* 5490 */ 0x2, /* 2 */ +/* 5446 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5448 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5450 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5452 */ NdrFcShort( 0x2 ), /* 2 */ +/* 5454 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 5492 */ 0x81, /* 129 */ +/* 5456 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter row */ -/* 5494 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 5496 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5498 */ 0x8, /* FC_LONG */ +/* 5458 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 5460 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5462 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 5500 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5502 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5504 */ 0x8, /* FC_LONG */ +/* 5464 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5466 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5468 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure unselectColumn */ + /* Procedure selectColumn */ -/* 5506 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5470 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5508 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5512 */ NdrFcShort( 0x15 ), /* 21 */ -/* 5514 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 5516 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5518 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5520 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 5472 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5476 */ NdrFcShort( 0x13 ), /* 19 */ +/* 5478 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5480 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5482 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5484 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 5522 */ 0xe, /* 14 */ +/* 5486 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5524 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5526 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5528 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5530 */ NdrFcShort( 0x2 ), /* 2 */ -/* 5532 */ 0x2, /* 2 */ +/* 5488 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5490 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5492 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5494 */ NdrFcShort( 0x2 ), /* 2 */ +/* 5496 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 5534 */ 0x81, /* 129 */ +/* 5498 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter column */ -/* 5536 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 5538 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5540 */ 0x8, /* FC_LONG */ +/* 5500 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 5502 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5504 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 5542 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5544 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5506 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5508 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5510 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure unselectRow */ + +/* 5512 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5514 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5518 */ NdrFcShort( 0x14 ), /* 20 */ +/* 5520 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5522 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5524 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5526 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 5528 */ 0xe, /* 14 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5530 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5532 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5534 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5536 */ NdrFcShort( 0x2 ), /* 2 */ +/* 5538 */ 0x2, /* 2 */ + 0x80, /* 128 */ +/* 5540 */ 0x81, /* 129 */ + 0x0, /* 0 */ + + /* Parameter row */ + +/* 5542 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 5544 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ /* 5546 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Return value */ + +/* 5548 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5550 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5552 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure unselectColumn */ + +/* 5554 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5556 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5560 */ NdrFcShort( 0x15 ), /* 21 */ +/* 5562 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5564 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5566 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5568 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 5570 */ 0xe, /* 14 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5572 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5574 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5576 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5578 */ NdrFcShort( 0x2 ), /* 2 */ +/* 5580 */ 0x2, /* 2 */ + 0x80, /* 128 */ +/* 5582 */ 0x81, /* 129 */ + 0x0, /* 0 */ + + /* Parameter column */ + +/* 5584 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 5586 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5588 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 5590 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5592 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5594 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure get_modelChange */ -/* 5548 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5596 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5550 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5554 */ NdrFcShort( 0x16 ), /* 22 */ -/* 5556 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 5558 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5560 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5562 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 5598 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5602 */ NdrFcShort( 0x16 ), /* 22 */ +/* 5604 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5606 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5608 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5610 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 5564 */ 0xe, /* 14 */ +/* 5612 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5566 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5568 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5570 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5572 */ NdrFcShort( 0x2 ), /* 2 */ -/* 5574 */ 0x2, /* 2 */ +/* 5614 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5616 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5618 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5620 */ NdrFcShort( 0x2 ), /* 2 */ +/* 5622 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 5576 */ 0x81, /* 129 */ +/* 5624 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter modelChange */ -/* 5578 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 5580 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5582 */ NdrFcShort( 0x5ae ), /* Type Offset=1454 */ - - /* Return value */ - -/* 5584 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5586 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5588 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_columnHeaderCells */ - -/* 5590 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 5592 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5596 */ NdrFcShort( 0x4 ), /* 4 */ -/* 5598 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 5600 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5602 */ NdrFcShort( 0x24 ), /* 36 */ -/* 5604 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 5606 */ 0xe, /* 14 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 5608 */ NdrFcShort( 0x1 ), /* 1 */ -/* 5610 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5612 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5614 */ NdrFcShort( 0x3 ), /* 3 */ -/* 5616 */ 0x3, /* 3 */ - 0x80, /* 128 */ -/* 5618 */ 0x81, /* 129 */ - 0x82, /* 130 */ - - /* Parameter cellAccessibles */ - -/* 5620 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ -/* 5622 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5624 */ NdrFcShort( 0x5bc ), /* Type Offset=1468 */ - - /* Parameter nColumnHeaderCells */ - -/* 5626 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5628 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5630 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 5626 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 5628 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5630 */ NdrFcShort( 0x5c8 ), /* Type Offset=1480 */ /* Return value */ /* 5632 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5634 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5634 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ /* 5636 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowHeaderCells */ + /* Procedure get_columnHeaderCells */ /* 5638 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5640 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5644 */ NdrFcShort( 0x7 ), /* 7 */ +/* 5644 */ NdrFcShort( 0x4 ), /* 4 */ /* 5646 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 5648 */ NdrFcShort( 0x0 ), /* 0 */ /* 5650 */ NdrFcShort( 0x24 ), /* 36 */ @@ -5411,9 +5418,9 @@ /* 5668 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 5670 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5672 */ NdrFcShort( 0x5bc ), /* Type Offset=1468 */ +/* 5672 */ NdrFcShort( 0x5d6 ), /* Type Offset=1494 */ - /* Parameter nRowHeaderCells */ + /* Parameter nColumnHeaderCells */ /* 5674 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5676 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ @@ -5427,343 +5434,385 @@ /* 5684 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isSelected */ + /* Procedure get_rowHeaderCells */ /* 5686 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5688 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5692 */ NdrFcShort( 0x9 ), /* 9 */ -/* 5694 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5692 */ NdrFcShort( 0x7 ), /* 7 */ +/* 5694 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 5696 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5698 */ NdrFcShort( 0x21 ), /* 33 */ -/* 5700 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ +/* 5698 */ NdrFcShort( 0x24 ), /* 36 */ +/* 5700 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ /* 5702 */ 0xe, /* 14 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 5704 */ NdrFcShort( 0x0 ), /* 0 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 5704 */ NdrFcShort( 0x1 ), /* 1 */ /* 5706 */ NdrFcShort( 0x0 ), /* 0 */ /* 5708 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5710 */ NdrFcShort( 0x2 ), /* 2 */ -/* 5712 */ 0x2, /* 2 */ +/* 5710 */ NdrFcShort( 0x3 ), /* 3 */ +/* 5712 */ 0x3, /* 3 */ 0x80, /* 128 */ /* 5714 */ 0x81, /* 129 */ - 0x0, /* 0 */ + 0x82, /* 130 */ - /* Parameter isSelected */ + /* Parameter cellAccessibles */ -/* 5716 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5716 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 5718 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5720 */ 0x3, /* FC_SMALL */ - 0x0, /* 0 */ +/* 5720 */ NdrFcShort( 0x5d6 ), /* Type Offset=1494 */ - /* Return value */ + /* Parameter nRowHeaderCells */ -/* 5722 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5722 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5724 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ /* 5726 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowColumnExtents */ + /* Return value */ -/* 5728 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5728 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5730 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5732 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isSelected */ + +/* 5734 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5730 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5734 */ NdrFcShort( 0xa ), /* 10 */ -/* 5736 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ -/* 5738 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5740 */ NdrFcShort( 0x91 ), /* 145 */ -/* 5742 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x6, /* 6 */ -/* 5744 */ 0x12, /* 18 */ +/* 5736 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5740 */ NdrFcShort( 0x9 ), /* 9 */ +/* 5742 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5744 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5746 */ NdrFcShort( 0x21 ), /* 33 */ +/* 5748 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 5750 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5746 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5748 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5750 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5752 */ NdrFcShort( 0x6 ), /* 6 */ -/* 5754 */ 0x6, /* 6 */ +/* 5752 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5754 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5756 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5758 */ NdrFcShort( 0x2 ), /* 2 */ +/* 5760 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 5756 */ 0x81, /* 129 */ - 0x82, /* 130 */ -/* 5758 */ 0x83, /* 131 */ - 0x84, /* 132 */ -/* 5760 */ 0x85, /* 133 */ - 0x0, /* 0 */ - - /* Parameter row */ - -/* 5762 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5764 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5766 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter column */ - -/* 5768 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5770 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5772 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter rowExtents */ - -/* 5774 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5776 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 5778 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter columnExtents */ - -/* 5780 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5782 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 5784 */ 0x8, /* FC_LONG */ +/* 5762 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter isSelected */ -/* 5786 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5788 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 5790 */ 0x3, /* FC_SMALL */ +/* 5764 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5766 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5768 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 5792 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5794 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ -/* 5796 */ 0x8, /* FC_LONG */ +/* 5770 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5772 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5774 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_rowColumnExtents */ + +/* 5776 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5778 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5782 */ NdrFcShort( 0xa ), /* 10 */ +/* 5784 */ NdrFcShort( 0x38 ), /* ARM64 Stack size/offset = 56 */ +/* 5786 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5788 */ NdrFcShort( 0x91 ), /* 145 */ +/* 5790 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x6, /* 6 */ +/* 5792 */ 0x12, /* 18 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5794 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5796 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5798 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5800 */ NdrFcShort( 0x6 ), /* 6 */ +/* 5802 */ 0x6, /* 6 */ + 0x80, /* 128 */ +/* 5804 */ 0x81, /* 129 */ + 0x82, /* 130 */ +/* 5806 */ 0x83, /* 131 */ + 0x84, /* 132 */ +/* 5808 */ 0x85, /* 133 */ + 0x0, /* 0 */ + + /* Parameter row */ + +/* 5810 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5812 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5814 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter column */ + +/* 5816 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5818 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5820 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter rowExtents */ + +/* 5822 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5824 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5826 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter columnExtents */ + +/* 5828 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5830 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ +/* 5832 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter isSelected */ + +/* 5834 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5836 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 5838 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 5840 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5842 */ NdrFcShort( 0x30 ), /* ARM64 Stack size/offset = 48 */ +/* 5844 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_table */ -/* 5798 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5846 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5800 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5804 */ NdrFcShort( 0xb ), /* 11 */ -/* 5806 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 5808 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5810 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5812 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 5848 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5852 */ NdrFcShort( 0xb ), /* 11 */ +/* 5854 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5856 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5858 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5860 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 5814 */ 0xe, /* 14 */ +/* 5862 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5816 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5818 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5820 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5822 */ NdrFcShort( 0x2 ), /* 2 */ -/* 5824 */ 0x2, /* 2 */ +/* 5864 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5866 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5868 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5870 */ NdrFcShort( 0x2 ), /* 2 */ +/* 5872 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 5826 */ 0x81, /* 129 */ +/* 5874 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter table */ -/* 5828 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 5830 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5832 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 5876 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 5878 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5880 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ -/* 5834 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5836 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5838 */ 0x8, /* FC_LONG */ +/* 5882 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5884 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5886 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_imagePosition */ -/* 5840 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5888 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5842 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5846 */ NdrFcShort( 0x4 ), /* 4 */ -/* 5848 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ -/* 5850 */ NdrFcShort( 0x6 ), /* 6 */ -/* 5852 */ NdrFcShort( 0x40 ), /* 64 */ -/* 5854 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 5890 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5894 */ NdrFcShort( 0x4 ), /* 4 */ +/* 5896 */ NdrFcShort( 0x28 ), /* ARM64 Stack size/offset = 40 */ +/* 5898 */ NdrFcShort( 0x6 ), /* 6 */ +/* 5900 */ NdrFcShort( 0x40 ), /* 64 */ +/* 5902 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 5856 */ 0x10, /* 16 */ +/* 5904 */ 0x10, /* 16 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5858 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5860 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5862 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5864 */ NdrFcShort( 0x4 ), /* 4 */ -/* 5866 */ 0x4, /* 4 */ +/* 5906 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5908 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5910 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5912 */ NdrFcShort( 0x4 ), /* 4 */ +/* 5914 */ 0x4, /* 4 */ 0x80, /* 128 */ -/* 5868 */ 0x81, /* 129 */ +/* 5916 */ 0x81, /* 129 */ 0x82, /* 130 */ -/* 5870 */ 0x83, /* 131 */ +/* 5918 */ 0x83, /* 131 */ 0x0, /* 0 */ /* Parameter coordinateType */ -/* 5872 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 5874 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5876 */ 0xd, /* FC_ENUM16 */ +/* 5920 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 5922 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5924 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter x */ -/* 5878 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5880 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 5882 */ 0x8, /* FC_LONG */ +/* 5926 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5928 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5930 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter y */ -/* 5884 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5886 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 5888 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Return value */ - -/* 5890 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5892 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 5894 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_imageSize */ - -/* 5896 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 5898 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5902 */ NdrFcShort( 0x5 ), /* 5 */ -/* 5904 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ -/* 5906 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5908 */ NdrFcShort( 0x40 ), /* 64 */ -/* 5910 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 5912 */ 0xe, /* 14 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 5914 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5916 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5918 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5920 */ NdrFcShort( 0x3 ), /* 3 */ -/* 5922 */ 0x3, /* 3 */ - 0x80, /* 128 */ -/* 5924 */ 0x81, /* 129 */ - 0x82, /* 130 */ - - /* Parameter height */ - -/* 5926 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5928 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5930 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter width */ - /* 5932 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5934 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 5934 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ /* 5936 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ /* 5938 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5940 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5940 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 5942 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_toolkitName */ + /* Procedure get_imageSize */ /* 5944 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5946 */ NdrFcLong( 0x0 ), /* 0 */ /* 5950 */ NdrFcShort( 0x5 ), /* 5 */ -/* 5952 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5952 */ NdrFcShort( 0x20 ), /* ARM64 Stack size/offset = 32 */ /* 5954 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5956 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5958 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x2, /* 2 */ +/* 5956 */ NdrFcShort( 0x40 ), /* 64 */ +/* 5958 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ /* 5960 */ 0xe, /* 14 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 5962 */ NdrFcShort( 0x1 ), /* 1 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5962 */ NdrFcShort( 0x0 ), /* 0 */ /* 5964 */ NdrFcShort( 0x0 ), /* 0 */ /* 5966 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5968 */ NdrFcShort( 0x2 ), /* 2 */ -/* 5970 */ 0x2, /* 2 */ +/* 5968 */ NdrFcShort( 0x3 ), /* 3 */ +/* 5970 */ 0x3, /* 3 */ 0x80, /* 128 */ /* 5972 */ 0x81, /* 129 */ + 0x82, /* 130 */ + + /* Parameter height */ + +/* 5974 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5976 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 5978 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter name */ + /* Parameter width */ -/* 5974 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 5976 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 5978 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - - /* Return value */ - -/* 5980 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5980 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5982 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ /* 5984 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Return value */ + +/* 5986 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5988 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 5990 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_toolkitName */ + +/* 5992 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5994 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5998 */ NdrFcShort( 0x5 ), /* 5 */ +/* 6000 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 6002 */ NdrFcShort( 0x0 ), /* 0 */ +/* 6004 */ NdrFcShort( 0x8 ), /* 8 */ +/* 6006 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 6008 */ 0xe, /* 14 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 6010 */ NdrFcShort( 0x1 ), /* 1 */ +/* 6012 */ NdrFcShort( 0x0 ), /* 0 */ +/* 6014 */ NdrFcShort( 0x0 ), /* 0 */ +/* 6016 */ NdrFcShort( 0x2 ), /* 2 */ +/* 6018 */ 0x2, /* 2 */ + 0x80, /* 128 */ +/* 6020 */ 0x81, /* 129 */ + 0x0, /* 0 */ + + /* Parameter name */ + +/* 6022 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 6024 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 6026 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 6028 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 6030 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 6032 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure get_toolkitVersion */ -/* 5986 */ 0x33, /* FC_AUTO_HANDLE */ +/* 6034 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5988 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5992 */ NdrFcShort( 0x6 ), /* 6 */ -/* 5994 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 5996 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5998 */ NdrFcShort( 0x8 ), /* 8 */ -/* 6000 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 6036 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6040 */ NdrFcShort( 0x6 ), /* 6 */ +/* 6042 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 6044 */ NdrFcShort( 0x0 ), /* 0 */ +/* 6046 */ NdrFcShort( 0x8 ), /* 8 */ +/* 6048 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 6002 */ 0xe, /* 14 */ +/* 6050 */ 0xe, /* 14 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 6004 */ NdrFcShort( 0x1 ), /* 1 */ -/* 6006 */ NdrFcShort( 0x0 ), /* 0 */ -/* 6008 */ NdrFcShort( 0x0 ), /* 0 */ -/* 6010 */ NdrFcShort( 0x2 ), /* 2 */ -/* 6012 */ 0x2, /* 2 */ +/* 6052 */ NdrFcShort( 0x1 ), /* 1 */ +/* 6054 */ NdrFcShort( 0x0 ), /* 0 */ +/* 6056 */ NdrFcShort( 0x0 ), /* 0 */ +/* 6058 */ NdrFcShort( 0x2 ), /* 2 */ +/* 6060 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 6014 */ 0x81, /* 129 */ +/* 6062 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter version */ -/* 6016 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 6018 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 6020 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 6064 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 6066 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 6068 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 6022 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 6024 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 6026 */ 0x8, /* FC_LONG */ +/* 6070 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 6072 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 6074 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_anchorTarget */ -/* 6028 */ 0x33, /* FC_AUTO_HANDLE */ +/* 6076 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 6030 */ NdrFcLong( 0x0 ), /* 0 */ -/* 6034 */ NdrFcShort( 0x3 ), /* 3 */ -/* 6036 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 6038 */ NdrFcShort( 0x0 ), /* 0 */ -/* 6040 */ NdrFcShort( 0x8 ), /* 8 */ -/* 6042 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 6078 */ NdrFcLong( 0x0 ), /* 0 */ +/* 6082 */ NdrFcShort( 0x3 ), /* 3 */ +/* 6084 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 6086 */ NdrFcShort( 0x0 ), /* 0 */ +/* 6088 */ NdrFcShort( 0x8 ), /* 8 */ +/* 6090 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 6044 */ 0xe, /* 14 */ +/* 6092 */ 0xe, /* 14 */ 0x1, /* Ext Flags: new corr desc, */ -/* 6046 */ NdrFcShort( 0x0 ), /* 0 */ -/* 6048 */ NdrFcShort( 0x0 ), /* 0 */ -/* 6050 */ NdrFcShort( 0x0 ), /* 0 */ -/* 6052 */ NdrFcShort( 0x2 ), /* 2 */ -/* 6054 */ 0x2, /* 2 */ +/* 6094 */ NdrFcShort( 0x0 ), /* 0 */ +/* 6096 */ NdrFcShort( 0x0 ), /* 0 */ +/* 6098 */ NdrFcShort( 0x0 ), /* 0 */ +/* 6100 */ NdrFcShort( 0x2 ), /* 2 */ +/* 6102 */ 0x2, /* 2 */ 0x80, /* 128 */ -/* 6056 */ 0x81, /* 129 */ +/* 6104 */ 0x81, /* 129 */ 0x0, /* 0 */ /* Parameter accessible */ -/* 6058 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 6060 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 6062 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 6106 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 6108 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 6110 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ -/* 6064 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 6066 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 6068 */ 0x8, /* FC_LONG */ +/* 6112 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 6114 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 6116 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ 0x0 @@ -6635,165 +6684,183 @@ 0x5b, /* FC_END */ /* 1304 */ 0x11, 0x0, /* FC_RP */ -/* 1306 */ NdrFcShort( 0x6 ), /* Offset= 6 (1312) */ +/* 1306 */ NdrFcShort( 0x2 ), /* Offset= 2 (1308) */ /* 1308 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 1310 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1312 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 1314 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 1316 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1318 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 1322 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1324 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1326 */ NdrFcShort( 0xffbe ), /* Offset= -66 (1260) */ +/* 1328 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1330 */ + 0x11, 0x0, /* FC_RP */ +/* 1332 */ NdrFcShort( 0x6 ), /* Offset= 6 (1338) */ +/* 1334 */ 0x12, 0x0, /* FC_UP */ -/* 1310 */ NdrFcShort( 0xff8a ), /* Offset= -118 (1192) */ -/* 1312 */ 0xb4, /* FC_USER_MARSHAL */ +/* 1336 */ NdrFcShort( 0xff70 ), /* Offset= -144 (1192) */ +/* 1338 */ 0xb4, /* FC_USER_MARSHAL */ 0x83, /* 131 */ -/* 1314 */ NdrFcShort( 0x2 ), /* 2 */ -/* 1316 */ NdrFcShort( 0x18 ), /* 24 */ -/* 1318 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1320 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1308) */ -/* 1322 */ +/* 1340 */ NdrFcShort( 0x2 ), /* 2 */ +/* 1342 */ NdrFcShort( 0x18 ), /* 24 */ +/* 1344 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1346 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1334) */ +/* 1348 */ 0x11, 0x4, /* FC_RP [alloced_on_stack] */ -/* 1324 */ NdrFcShort( 0x2 ), /* Offset= 2 (1326) */ -/* 1326 */ +/* 1350 */ NdrFcShort( 0x2 ), /* Offset= 2 (1352) */ +/* 1352 */ 0x1a, /* FC_BOGUS_STRUCT */ 0x3, /* 3 */ -/* 1328 */ NdrFcShort( 0x10 ), /* 16 */ -/* 1330 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1332 */ NdrFcShort( 0x0 ), /* Offset= 0 (1332) */ -/* 1334 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 1354 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1356 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1358 */ NdrFcShort( 0x0 ), /* Offset= 0 (1358) */ +/* 1360 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ 0x0, /* 0 */ -/* 1336 */ NdrFcShort( 0xfae8 ), /* Offset= -1304 (32) */ -/* 1338 */ 0x8, /* FC_LONG */ +/* 1362 */ NdrFcShort( 0xface ), /* Offset= -1330 (32) */ +/* 1364 */ 0x8, /* FC_LONG */ 0x8, /* FC_LONG */ -/* 1340 */ 0x5c, /* FC_PAD */ +/* 1366 */ 0x5c, /* FC_PAD */ 0x5b, /* FC_END */ -/* 1342 */ +/* 1368 */ 0x11, 0x0, /* FC_RP */ -/* 1344 */ NdrFcShort( 0xfbce ), /* Offset= -1074 (270) */ -/* 1346 */ - 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ -/* 1348 */ 0x3, /* FC_SMALL */ - 0x5c, /* FC_PAD */ -/* 1350 */ - 0x11, 0x10, /* FC_RP [pointer_deref] */ -/* 1352 */ NdrFcShort( 0x2 ), /* Offset= 2 (1354) */ -/* 1354 */ - 0x2f, /* FC_IP */ - 0x5a, /* FC_CONSTANT_IID */ -/* 1356 */ NdrFcLong( 0x1c20f2b ), /* 29495083 */ -/* 1360 */ NdrFcShort( 0x3dd2 ), /* 15826 */ -/* 1362 */ NdrFcShort( 0x400f ), /* 16399 */ -/* 1364 */ 0x94, /* 148 */ - 0x9f, /* 159 */ -/* 1366 */ 0xad, /* 173 */ - 0x0, /* 0 */ -/* 1368 */ 0xbd, /* 189 */ - 0xab, /* 171 */ -/* 1370 */ 0x1d, /* 29 */ - 0x41, /* 65 */ +/* 1370 */ NdrFcShort( 0xfbb4 ), /* Offset= -1100 (270) */ /* 1372 */ - 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ -/* 1374 */ NdrFcShort( 0x2 ), /* Offset= 2 (1376) */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 1374 */ 0x3, /* FC_SMALL */ + 0x5c, /* FC_PAD */ /* 1376 */ - 0x13, 0x0, /* FC_OP */ + 0x11, 0x10, /* FC_RP [pointer_deref] */ /* 1378 */ NdrFcShort( 0x2 ), /* Offset= 2 (1380) */ /* 1380 */ - 0x21, /* FC_BOGUS_ARRAY */ - 0x3, /* 3 */ -/* 1382 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1384 */ 0x28, /* Corr desc: parameter, FC_LONG */ - 0x54, /* FC_DEREFERENCE */ -/* 1386 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 1388 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1390 */ NdrFcLong( 0xffffffff ), /* -1 */ -/* 1394 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1396 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ - 0x0, /* 0 */ -/* 1398 */ NdrFcShort( 0xffd4 ), /* Offset= -44 (1354) */ -/* 1400 */ 0x5c, /* FC_PAD */ - 0x5b, /* FC_END */ -/* 1402 */ - 0x11, 0x10, /* FC_RP [pointer_deref] */ -/* 1404 */ NdrFcShort( 0x2 ), /* Offset= 2 (1406) */ -/* 1406 */ 0x2f, /* FC_IP */ 0x5a, /* FC_CONSTANT_IID */ -/* 1408 */ NdrFcLong( 0x35ad8070 ), /* 900563056 */ -/* 1412 */ NdrFcShort( 0xc20c ), /* -15860 */ -/* 1414 */ NdrFcShort( 0x4fb4 ), /* 20404 */ -/* 1416 */ 0xb0, /* 176 */ - 0x94, /* 148 */ -/* 1418 */ 0xf4, /* 244 */ - 0xf7, /* 247 */ -/* 1420 */ 0x27, /* 39 */ - 0x5d, /* 93 */ -/* 1422 */ 0xd4, /* 212 */ - 0x69, /* 105 */ -/* 1424 */ +/* 1382 */ NdrFcLong( 0x1c20f2b ), /* 29495083 */ +/* 1386 */ NdrFcShort( 0x3dd2 ), /* 15826 */ +/* 1388 */ NdrFcShort( 0x400f ), /* 16399 */ +/* 1390 */ 0x94, /* 148 */ + 0x9f, /* 159 */ +/* 1392 */ 0xad, /* 173 */ + 0x0, /* 0 */ +/* 1394 */ 0xbd, /* 189 */ + 0xab, /* 171 */ +/* 1396 */ 0x1d, /* 29 */ + 0x41, /* 65 */ +/* 1398 */ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ -/* 1426 */ NdrFcShort( 0x2 ), /* Offset= 2 (1428) */ -/* 1428 */ +/* 1400 */ NdrFcShort( 0x2 ), /* Offset= 2 (1402) */ +/* 1402 */ 0x13, 0x0, /* FC_OP */ -/* 1430 */ NdrFcShort( 0x2 ), /* Offset= 2 (1432) */ -/* 1432 */ - 0x1c, /* FC_CVARRAY */ - 0x3, /* 3 */ -/* 1434 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1436 */ 0x28, /* Corr desc: parameter, FC_LONG */ - 0x0, /* */ -/* 1438 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ -/* 1440 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ -/* 1442 */ 0x28, /* Corr desc: parameter, FC_LONG */ - 0x54, /* FC_DEREFERENCE */ -/* 1444 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ -/* 1446 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1448 */ 0x8, /* FC_LONG */ - 0x5b, /* FC_END */ -/* 1450 */ - 0x11, 0x4, /* FC_RP [alloced_on_stack] */ -/* 1452 */ NdrFcShort( 0x2 ), /* Offset= 2 (1454) */ -/* 1454 */ - 0x1a, /* FC_BOGUS_STRUCT */ - 0x3, /* 3 */ -/* 1456 */ NdrFcShort( 0x14 ), /* 20 */ -/* 1458 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1460 */ NdrFcShort( 0x0 ), /* Offset= 0 (1460) */ -/* 1462 */ 0xd, /* FC_ENUM16 */ - 0x8, /* FC_LONG */ -/* 1464 */ 0x8, /* FC_LONG */ - 0x8, /* FC_LONG */ -/* 1466 */ 0x8, /* FC_LONG */ - 0x5b, /* FC_END */ -/* 1468 */ - 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ -/* 1470 */ NdrFcShort( 0x2 ), /* Offset= 2 (1472) */ -/* 1472 */ - 0x13, 0x0, /* FC_OP */ -/* 1474 */ NdrFcShort( 0x2 ), /* Offset= 2 (1476) */ -/* 1476 */ +/* 1404 */ NdrFcShort( 0x2 ), /* Offset= 2 (1406) */ +/* 1406 */ 0x21, /* FC_BOGUS_ARRAY */ 0x3, /* 3 */ -/* 1478 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1480 */ 0x28, /* Corr desc: parameter, FC_LONG */ +/* 1408 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1410 */ 0x28, /* Corr desc: parameter, FC_LONG */ 0x54, /* FC_DEREFERENCE */ -/* 1482 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 1484 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1486 */ NdrFcLong( 0xffffffff ), /* -1 */ -/* 1490 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1492 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 1412 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 1414 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1416 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 1420 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1422 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ 0x0, /* 0 */ -/* 1494 */ NdrFcShort( 0xfa5c ), /* Offset= -1444 (50) */ -/* 1496 */ 0x5c, /* FC_PAD */ +/* 1424 */ NdrFcShort( 0xffd4 ), /* Offset= -44 (1380) */ +/* 1426 */ 0x5c, /* FC_PAD */ 0x5b, /* FC_END */ -/* 1498 */ +/* 1428 */ + 0x11, 0x10, /* FC_RP [pointer_deref] */ +/* 1430 */ NdrFcShort( 0x2 ), /* Offset= 2 (1432) */ +/* 1432 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 1434 */ NdrFcLong( 0x35ad8070 ), /* 900563056 */ +/* 1438 */ NdrFcShort( 0xc20c ), /* -15860 */ +/* 1440 */ NdrFcShort( 0x4fb4 ), /* 20404 */ +/* 1442 */ 0xb0, /* 176 */ + 0x94, /* 148 */ +/* 1444 */ 0xf4, /* 244 */ + 0xf7, /* 247 */ +/* 1446 */ 0x27, /* 39 */ + 0x5d, /* 93 */ +/* 1448 */ 0xd4, /* 212 */ + 0x69, /* 105 */ +/* 1450 */ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1452 */ NdrFcShort( 0x2 ), /* Offset= 2 (1454) */ +/* 1454 */ + 0x13, 0x0, /* FC_OP */ +/* 1456 */ NdrFcShort( 0x2 ), /* Offset= 2 (1458) */ +/* 1458 */ + 0x1c, /* FC_CVARRAY */ + 0x3, /* 3 */ +/* 1460 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1462 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 1464 */ NdrFcShort( 0x8 ), /* ARM64 Stack size/offset = 8 */ +/* 1466 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1468 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 1470 */ NdrFcShort( 0x18 ), /* ARM64 Stack size/offset = 24 */ +/* 1472 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1474 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 1476 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 1478 */ NdrFcShort( 0x2 ), /* Offset= 2 (1480) */ +/* 1480 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 1482 */ NdrFcShort( 0x14 ), /* 20 */ +/* 1484 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1486 */ NdrFcShort( 0x0 ), /* Offset= 0 (1486) */ +/* 1488 */ 0xd, /* FC_ENUM16 */ + 0x8, /* FC_LONG */ +/* 1490 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 1492 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 1494 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1496 */ NdrFcShort( 0x2 ), /* Offset= 2 (1498) */ +/* 1498 */ + 0x13, 0x0, /* FC_OP */ /* 1500 */ NdrFcShort( 0x2 ), /* Offset= 2 (1502) */ /* 1502 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 1504 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1506 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 1508 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 1510 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1512 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 1516 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1518 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1520 */ NdrFcShort( 0xfa42 ), /* Offset= -1470 (50) */ +/* 1522 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1524 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1526 */ NdrFcShort( 0x2 ), /* Offset= 2 (1528) */ +/* 1528 */ 0x13, 0x0, /* FC_OP */ -/* 1504 */ NdrFcShort( 0x2 ), /* Offset= 2 (1506) */ -/* 1506 */ +/* 1530 */ NdrFcShort( 0x2 ), /* Offset= 2 (1532) */ +/* 1532 */ 0x1b, /* FC_CARRAY */ 0x3, /* 3 */ -/* 1508 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1510 */ 0x28, /* Corr desc: parameter, FC_LONG */ +/* 1534 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1536 */ 0x28, /* Corr desc: parameter, FC_LONG */ 0x54, /* FC_DEREFERENCE */ -/* 1512 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ -/* 1514 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1516 */ 0x8, /* FC_LONG */ +/* 1538 */ NdrFcShort( 0x10 ), /* ARM64 Stack size/offset = 16 */ +/* 1540 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1542 */ 0x8, /* FC_LONG */ 0x5b, /* FC_END */ 0x0 @@ -7539,7 +7606,204 @@ }; -/* Standard interface: __MIDL_itf_ia2_api_all_0000_0005, ver. 0.0, +/* Object interface: IAccessible2_4, ver. 0.0, + GUID={0x610a7bec,0x91bb,0x444d,{0xa3,0x36,0xa0,0xda,0xf1,0x3c,0x4c,0x29}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessible2_4_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 520, + 562, + 610, + 666, + 708, + 750, + 806, + 862, + 904, + 946, + 988, + 1030, + 1086, + 1142, + 1184, + 1226, + 1268, + 1310, + 1352, + 1400, + 1448, + 1510, + 1558 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessible2_4_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessible2_4_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessible2_4_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessible2_4_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(51) _IAccessible2_4ProxyVtbl = +{ + &IAccessible2_4_ProxyInfo, + &IID_IAccessible2_4, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + 0 /* IAccessible::get_accParent */ , + 0 /* IAccessible::get_accChildCount */ , + 0 /* IAccessible::get_accChild */ , + 0 /* IAccessible::get_accName */ , + 0 /* IAccessible::get_accValue */ , + 0 /* IAccessible::get_accDescription */ , + 0 /* IAccessible::get_accRole */ , + 0 /* IAccessible::get_accState */ , + 0 /* IAccessible::get_accHelp */ , + 0 /* IAccessible::get_accHelpTopic */ , + 0 /* IAccessible::get_accKeyboardShortcut */ , + 0 /* IAccessible::get_accFocus */ , + 0 /* IAccessible::get_accSelection */ , + 0 /* IAccessible::get_accDefaultAction */ , + 0 /* IAccessible::accSelect */ , + 0 /* IAccessible::accLocation */ , + 0 /* IAccessible::accNavigate */ , + 0 /* IAccessible::accHitTest */ , + 0 /* IAccessible::accDoDefaultAction */ , + 0 /* IAccessible::put_accName */ , + 0 /* IAccessible::put_accValue */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ , + (void *) (INT_PTR) -1 /* IAccessible2::role */ , + (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ , + (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_states */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */ , + (void *) (INT_PTR) -1 /* IAccessible2_2::get_attribute */ , + (void *) (INT_PTR) -1 /* IAccessible2_2::get_accessibleWithCaret */ , + (void *) (INT_PTR) -1 /* IAccessible2_2::get_relationTargetsOfType */ , + (void *) (INT_PTR) -1 /* IAccessible2_3::get_selectionRanges */ , + (void *) (INT_PTR) -1 /* IAccessible2_4::setSelectionRanges */ +}; + + +static const PRPC_STUB_FUNCTION IAccessible2_4_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAccessible2_4StubVtbl = +{ + &IID_IAccessible2_4, + &IAccessible2_4_ServerInfo, + 51, + &IAccessible2_4_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0006, ver. 0.0, GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ @@ -7549,8 +7813,8 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleComponent_FormatStringOffsetTable[] = { - 1558, 1606, + 1654, 84 }; @@ -7603,10 +7867,10 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleValue_FormatStringOffsetTable[] = { - 1648, - 1690, - 1732, - 1774 + 1696, + 1738, + 1780, + 1822 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo = @@ -7653,7 +7917,7 @@ }; -/* Standard interface: __MIDL_itf_ia2_api_all_0000_0007, ver. 0.0, +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0008, ver. 0.0, GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ @@ -7663,25 +7927,25 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleText_FormatStringOffsetTable[] = { - 1816, 1864, + 1912, 84, - 1926, - 2002, - 2044, - 2106, - 2162, - 2218, - 2288, - 2358, - 2428, - 2470, - 2512, - 2568, - 2610, - 2666, - 2736, - 2778 + 1974, + 2050, + 2092, + 2154, + 2210, + 2266, + 2336, + 2406, + 2476, + 2518, + 2560, + 2616, + 2658, + 2714, + 2784, + 2826 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo = @@ -7749,26 +8013,26 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleText2_FormatStringOffsetTable[] = { - 1816, 1864, + 1912, 84, - 1926, - 2002, - 2044, - 2106, - 2162, - 2218, - 2288, - 2358, - 2428, - 2470, - 2512, - 2568, - 2610, - 2666, - 2736, - 2778, - 2820 + 1974, + 2050, + 2092, + 2154, + 2210, + 2266, + 2336, + 2406, + 2476, + 2518, + 2560, + 2616, + 2658, + 2714, + 2784, + 2826, + 2868 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleText2_ProxyInfo = @@ -7837,13 +8101,13 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleEditableText_FormatStringOffsetTable[] = { - 1816, - 2890, + 1864, 2938, 2986, 3034, - 3076, - 3132 + 3082, + 3124, + 3180 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo = @@ -7905,11 +8169,11 @@ 362, 424, 472, - 3188, 3236, 3284, - 3326, - 3368 + 3332, + 3374, + 3416 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo = @@ -7969,28 +8233,28 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleHypertext_FormatStringOffsetTable[] = { - 1816, 1864, + 1912, 84, - 1926, - 2002, - 2044, - 2106, - 2162, - 2218, - 2288, - 2358, - 2428, - 2470, - 2512, - 2568, - 2610, - 2666, - 2736, - 2778, - 3410, - 3452, - 3500 + 1974, + 2050, + 2092, + 2154, + 2210, + 2266, + 2336, + 2406, + 2476, + 2518, + 2560, + 2616, + 2658, + 2714, + 2784, + 2826, + 3458, + 3500, + 3548 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo = @@ -8061,29 +8325,29 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleHypertext2_FormatStringOffsetTable[] = { - 1816, 1864, + 1912, 84, - 1926, - 2002, - 2044, - 2106, - 2162, - 2218, - 2288, - 2358, - 2428, - 2470, - 2512, - 2568, - 2610, - 2666, - 2736, - 2778, - 3410, - 3452, + 1974, + 2050, + 2092, + 2154, + 2210, + 2266, + 2336, + 2406, + 2476, + 2518, + 2560, + 2616, + 2658, + 2714, + 2784, + 2826, + 3458, 3500, - 3548 + 3548, + 3596 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext2_ProxyInfo = @@ -8155,35 +8419,35 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleTable_FormatStringOffsetTable[] = { - 3596, - 3652, - 3694, - 3750, + 3644, + 3700, + 3742, 3798, - 3854, + 3846, 3902, 3950, - 3284, - 3326, - 3992, - 4034, - 4076, + 3998, + 3332, + 3374, + 4040, + 4082, 4124, - 4180, + 4172, 4228, 4276, - 4332, - 4388, - 4444, - 4486, + 4324, + 4380, + 4436, + 4492, 4534, 4582, - 4638, - 4680, - 4722, - 4764, - 4806, - 4882 + 4630, + 4686, + 4728, + 4770, + 4812, + 4854, + 4930 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo = @@ -8261,26 +8525,26 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleTable2_FormatStringOffsetTable[] = { - 3596, - 3652, + 3644, + 3700, 314, - 4924, - 2002, - 4966, - 5008, - 3950, - 5050, + 4972, + 2050, + 5014, + 5056, + 3998, 5098, 5146, 5194, 5242, - 5284, + 5290, 5332, 5380, - 5422, - 5464, - 5506, - 5548 + 5428, + 5470, + 5512, + 5554, + 5596 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo = @@ -8350,14 +8614,14 @@ static const unsigned short IAccessibleTableCell_FormatStringOffsetTable[] = { 230, - 5590, - 84, - 4924, 5638, - 4966, + 84, + 4972, 5686, - 5728, - 5798 + 5014, + 5734, + 5776, + 5846 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo = @@ -8416,8 +8680,8 @@ static const unsigned short IAccessibleImage_FormatStringOffsetTable[] = { 0, - 5840, - 5896 + 5888, + 5944 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo = @@ -8463,7 +8727,7 @@ }; -/* Standard interface: __MIDL_itf_ia2_api_all_0000_0017, ver. 0.0, +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0018, ver. 0.0, GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ @@ -8475,8 +8739,8 @@ { 0, 42, - 5944, - 5986 + 5992, + 6034 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo = @@ -8529,7 +8793,7 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleDocument_FormatStringOffsetTable[] = { - 6028 + 6076 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleDocument_ProxyInfo = @@ -8573,7 +8837,7 @@ }; -/* Standard interface: __MIDL_itf_ia2_api_all_0000_0019, ver. 0.0, +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0020, ver. 0.0, GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ static const MIDL_STUB_DESC Object_StubDesc = @@ -8619,6 +8883,7 @@ ( CInterfaceProxyVtbl *) &_IAccessibleText2ProxyVtbl, ( CInterfaceProxyVtbl *) &_IAccessibleDocumentProxyVtbl, ( CInterfaceProxyVtbl *) &_IAccessible2_2ProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessible2_4ProxyVtbl, ( CInterfaceProxyVtbl *) &_IAccessibleRelationProxyVtbl, ( CInterfaceProxyVtbl *) &_IAccessibleTextProxyVtbl, 0 @@ -8643,6 +8908,7 @@ ( CInterfaceStubVtbl *) &_IAccessibleText2StubVtbl, ( CInterfaceStubVtbl *) &_IAccessibleDocumentStubVtbl, ( CInterfaceStubVtbl *) &_IAccessible2_2StubVtbl, + ( CInterfaceStubVtbl *) &_IAccessible2_4StubVtbl, ( CInterfaceStubVtbl *) &_IAccessibleRelationStubVtbl, ( CInterfaceStubVtbl *) &_IAccessibleTextStubVtbl, 0 @@ -8667,6 +8933,7 @@ "IAccessibleText2", "IAccessibleDocument", "IAccessible2_2", + "IAccessible2_4", "IAccessibleRelation", "IAccessibleText", 0 @@ -8691,6 +8958,7 @@ 0, 0, &IID_IAccessible, + &IID_IAccessible, 0, 0, 0 @@ -8703,12 +8971,12 @@ { IID_BS_LOOKUP_SETUP - IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 19, 16 ) + IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 20, 16 ) IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 8 ) IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 4 ) IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 2 ) IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 1 ) - IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 19, *pIndex ) + IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 20, *pIndex ) } @@ -8719,7 +8987,7 @@ (const PCInterfaceName * ) & _ia2_api_all_InterfaceNamesList, (const IID ** ) & _ia2_api_all_BaseIIDList, & _ia2_api_all_IID_Lookup, - 19, + 20, 2, 0, /* table of [async_uuid] interfaces */ 0, /* Filler1 */
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all.h b/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all.h index 824482e5..d1d5cfa 100644 --- a/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all.h +++ b/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all.h
@@ -80,6 +80,13 @@ #endif /* __IAccessible2_3_FWD_DEFINED__ */ +#ifndef __IAccessible2_4_FWD_DEFINED__ +#define __IAccessible2_4_FWD_DEFINED__ +typedef interface IAccessible2_4 IAccessible2_4; + +#endif /* __IAccessible2_4_FWD_DEFINED__ */ + + #ifndef __IAccessibleComponent_FWD_DEFINED__ #define __IAccessibleComponent_FWD_DEFINED__ typedef interface IAccessibleComponent IAccessibleComponent; @@ -2243,15 +2250,491 @@ #endif /* __IAccessible2_3_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_ia2_api_all_0000_0005 */ +#ifndef __IAccessible2_4_INTERFACE_DEFINED__ +#define __IAccessible2_4_INTERFACE_DEFINED__ + +/* interface IAccessible2_4 */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessible2_4; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("610a7bec-91bb-444d-a336-a0daf13c4c29") + IAccessible2_4 : public IAccessible2_3 + { + public: + virtual HRESULT STDMETHODCALLTYPE setSelectionRanges( + /* [in] */ long nRanges, + /* [size_is][in] */ IA2Range *ranges) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessible2_4Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessible2_4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessible2_4 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessible2_4 * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IAccessible2_4 * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IAccessible2_4 * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IAccessible2_4 * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IAccessible2_4 * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )( + IAccessible2_4 * This, + /* [retval][out] */ IDispatch **ppdispParent); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )( + IAccessible2_4 * This, + /* [retval][out] */ long *pcountChildren); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )( + IAccessible2_4 * This, + /* [in] */ VARIANT varChild, + /* [retval][out] */ IDispatch **ppdispChild); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszName); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszValue); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszDescription); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ VARIANT *pvarRole); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ VARIANT *pvarState); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszHelp); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )( + IAccessible2_4 * This, + /* [out] */ BSTR *pszHelpFile, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ long *pidTopic); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszKeyboardShortcut); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )( + IAccessible2_4 * This, + /* [retval][out] */ VARIANT *pvarChild); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )( + IAccessible2_4 * This, + /* [retval][out] */ VARIANT *pvarChildren); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszDefaultAction); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )( + IAccessible2_4 * This, + /* [in] */ long flagsSelect, + /* [optional][in] */ VARIANT varChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )( + IAccessible2_4 * This, + /* [out] */ long *pxLeft, + /* [out] */ long *pyTop, + /* [out] */ long *pcxWidth, + /* [out] */ long *pcyHeight, + /* [optional][in] */ VARIANT varChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )( + IAccessible2_4 * This, + /* [in] */ long navDir, + /* [optional][in] */ VARIANT varStart, + /* [retval][out] */ VARIANT *pvarEndUpAt); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )( + IAccessible2_4 * This, + /* [in] */ long xLeft, + /* [in] */ long yTop, + /* [retval][out] */ VARIANT *pvarChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild); + + /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [in] */ BSTR szName); + + /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [in] */ BSTR szValue); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )( + IAccessible2_4 * This, + /* [retval][out] */ long *nRelations); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )( + IAccessible2_4 * This, + /* [in] */ long relationIndex, + /* [retval][out] */ IAccessibleRelation **relation); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )( + IAccessible2_4 * This, + /* [in] */ long maxRelations, + /* [length_is][size_is][out] */ IAccessibleRelation **relations, + /* [retval][out] */ long *nRelations); + + HRESULT ( STDMETHODCALLTYPE *role )( + IAccessible2_4 * This, + /* [retval][out] */ long *role); + + HRESULT ( STDMETHODCALLTYPE *scrollTo )( + IAccessible2_4 * This, + /* [in] */ enum IA2ScrollType scrollType); + + HRESULT ( STDMETHODCALLTYPE *scrollToPoint )( + IAccessible2_4 * This, + /* [in] */ enum IA2CoordinateType coordinateType, + /* [in] */ long x, + /* [in] */ long y); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )( + IAccessible2_4 * This, + /* [out] */ long *groupLevel, + /* [out] */ long *similarItemsInGroup, + /* [retval][out] */ long *positionInGroup); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )( + IAccessible2_4 * This, + /* [retval][out] */ AccessibleStates *states); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )( + IAccessible2_4 * This, + /* [retval][out] */ BSTR *extendedRole); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )( + IAccessible2_4 * This, + /* [retval][out] */ BSTR *localizedExtendedRole); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )( + IAccessible2_4 * This, + /* [retval][out] */ long *nExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )( + IAccessible2_4 * This, + /* [in] */ long maxExtendedStates, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates, + /* [retval][out] */ long *nExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )( + IAccessible2_4 * This, + /* [in] */ long maxLocalizedExtendedStates, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates, + /* [retval][out] */ long *nLocalizedExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )( + IAccessible2_4 * This, + /* [retval][out] */ long *uniqueID); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )( + IAccessible2_4 * This, + /* [retval][out] */ HWND *windowHandle); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )( + IAccessible2_4 * This, + /* [retval][out] */ long *indexInParent); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )( + IAccessible2_4 * This, + /* [retval][out] */ IA2Locale *locale); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )( + IAccessible2_4 * This, + /* [retval][out] */ BSTR *attributes); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attribute )( + IAccessible2_4 * This, + /* [in] */ BSTR name, + /* [retval][out] */ VARIANT *attribute); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleWithCaret )( + IAccessible2_4 * This, + /* [out] */ IUnknown **accessible, + /* [retval][out] */ long *caretOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationTargetsOfType )( + IAccessible2_4 * This, + /* [in] */ BSTR type, + /* [in] */ long maxTargets, + /* [size_is][size_is][out] */ IUnknown ***targets, + /* [retval][out] */ long *nTargets); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectionRanges )( + IAccessible2_4 * This, + /* [size_is][size_is][out] */ IA2Range **ranges, + /* [retval][out] */ long *nRanges); + + HRESULT ( STDMETHODCALLTYPE *setSelectionRanges )( + IAccessible2_4 * This, + /* [in] */ long nRanges, + /* [size_is][in] */ IA2Range *ranges); + + END_INTERFACE + } IAccessible2_4Vtbl; + + interface IAccessible2_4 + { + CONST_VTBL struct IAccessible2_4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessible2_4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessible2_4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessible2_4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessible2_4_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IAccessible2_4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IAccessible2_4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IAccessible2_4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IAccessible2_4_get_accParent(This,ppdispParent) \ + ( (This)->lpVtbl -> get_accParent(This,ppdispParent) ) + +#define IAccessible2_4_get_accChildCount(This,pcountChildren) \ + ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) ) + +#define IAccessible2_4_get_accChild(This,varChild,ppdispChild) \ + ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) ) + +#define IAccessible2_4_get_accName(This,varChild,pszName) \ + ( (This)->lpVtbl -> get_accName(This,varChild,pszName) ) + +#define IAccessible2_4_get_accValue(This,varChild,pszValue) \ + ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) ) + +#define IAccessible2_4_get_accDescription(This,varChild,pszDescription) \ + ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) ) + +#define IAccessible2_4_get_accRole(This,varChild,pvarRole) \ + ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) ) + +#define IAccessible2_4_get_accState(This,varChild,pvarState) \ + ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) ) + +#define IAccessible2_4_get_accHelp(This,varChild,pszHelp) \ + ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) ) + +#define IAccessible2_4_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) \ + ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) ) + +#define IAccessible2_4_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) \ + ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) ) + +#define IAccessible2_4_get_accFocus(This,pvarChild) \ + ( (This)->lpVtbl -> get_accFocus(This,pvarChild) ) + +#define IAccessible2_4_get_accSelection(This,pvarChildren) \ + ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) ) + +#define IAccessible2_4_get_accDefaultAction(This,varChild,pszDefaultAction) \ + ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) ) + +#define IAccessible2_4_accSelect(This,flagsSelect,varChild) \ + ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) ) + +#define IAccessible2_4_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) \ + ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) ) + +#define IAccessible2_4_accNavigate(This,navDir,varStart,pvarEndUpAt) \ + ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) ) + +#define IAccessible2_4_accHitTest(This,xLeft,yTop,pvarChild) \ + ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) ) + +#define IAccessible2_4_accDoDefaultAction(This,varChild) \ + ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) ) + +#define IAccessible2_4_put_accName(This,varChild,szName) \ + ( (This)->lpVtbl -> put_accName(This,varChild,szName) ) + +#define IAccessible2_4_put_accValue(This,varChild,szValue) \ + ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) ) + + +#define IAccessible2_4_get_nRelations(This,nRelations) \ + ( (This)->lpVtbl -> get_nRelations(This,nRelations) ) + +#define IAccessible2_4_get_relation(This,relationIndex,relation) \ + ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) ) + +#define IAccessible2_4_get_relations(This,maxRelations,relations,nRelations) \ + ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) ) + +#define IAccessible2_4_role(This,role) \ + ( (This)->lpVtbl -> role(This,role) ) + +#define IAccessible2_4_scrollTo(This,scrollType) \ + ( (This)->lpVtbl -> scrollTo(This,scrollType) ) + +#define IAccessible2_4_scrollToPoint(This,coordinateType,x,y) \ + ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) ) + +#define IAccessible2_4_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) \ + ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) ) + +#define IAccessible2_4_get_states(This,states) \ + ( (This)->lpVtbl -> get_states(This,states) ) + +#define IAccessible2_4_get_extendedRole(This,extendedRole) \ + ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) ) + +#define IAccessible2_4_get_localizedExtendedRole(This,localizedExtendedRole) \ + ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) ) + +#define IAccessible2_4_get_nExtendedStates(This,nExtendedStates) \ + ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) ) + +#define IAccessible2_4_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) \ + ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) ) + +#define IAccessible2_4_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) \ + ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) ) + +#define IAccessible2_4_get_uniqueID(This,uniqueID) \ + ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) ) + +#define IAccessible2_4_get_windowHandle(This,windowHandle) \ + ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) ) + +#define IAccessible2_4_get_indexInParent(This,indexInParent) \ + ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) ) + +#define IAccessible2_4_get_locale(This,locale) \ + ( (This)->lpVtbl -> get_locale(This,locale) ) + +#define IAccessible2_4_get_attributes(This,attributes) \ + ( (This)->lpVtbl -> get_attributes(This,attributes) ) + + +#define IAccessible2_4_get_attribute(This,name,attribute) \ + ( (This)->lpVtbl -> get_attribute(This,name,attribute) ) + +#define IAccessible2_4_get_accessibleWithCaret(This,accessible,caretOffset) \ + ( (This)->lpVtbl -> get_accessibleWithCaret(This,accessible,caretOffset) ) + +#define IAccessible2_4_get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) \ + ( (This)->lpVtbl -> get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) ) + + +#define IAccessible2_4_get_selectionRanges(This,ranges,nRanges) \ + ( (This)->lpVtbl -> get_selectionRanges(This,ranges,nRanges) ) + + +#define IAccessible2_4_setSelectionRanges(This,nRanges,ranges) \ + ( (This)->lpVtbl -> setSelectionRanges(This,nRanges,ranges) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessible2_4_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_ia2_api_all_0000_0006 */ /* [local] */ typedef long IA2Color; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0005_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0005_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_s_ifspec; #ifndef __IAccessibleComponent_INTERFACE_DEFINED__ #define __IAccessibleComponent_INTERFACE_DEFINED__ @@ -2465,7 +2948,7 @@ #endif /* __IAccessibleValue_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_ia2_api_all_0000_0007 */ +/* interface __MIDL_itf_ia2_api_all_0000_0008 */ /* [local] */ typedef struct IA2TextSegment @@ -2487,8 +2970,8 @@ } ; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0007_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0007_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0008_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0008_v0_0_s_ifspec; #ifndef __IAccessibleText_INTERFACE_DEFINED__ #define __IAccessibleText_INTERFACE_DEFINED__ @@ -4943,7 +5426,7 @@ #endif /* __IAccessibleImage_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_ia2_api_all_0000_0017 */ +/* interface __MIDL_itf_ia2_api_all_0000_0018 */ /* [local] */ @@ -4987,8 +5470,8 @@ } ; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0017_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0017_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_s_ifspec; #ifndef __IAccessibleApplication_INTERFACE_DEFINED__ #define __IAccessibleApplication_INTERFACE_DEFINED__ @@ -5180,7 +5663,7 @@ #endif /* __IAccessibleDocument_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_ia2_api_all_0000_0019 */ +/* interface __MIDL_itf_ia2_api_all_0000_0020 */ /* [local] */ @@ -5188,8 +5671,8 @@ -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0019_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0019_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0020_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0020_v0_0_s_ifspec; #ifndef __IAccessible2Lib_LIBRARY_DEFINED__
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_i.c b/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_i.c index f777216..0ad99c5 100644 --- a/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_i.c +++ b/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_i.c
@@ -82,6 +82,9 @@ MIDL_DEFINE_GUID(IID, IID_IAccessible2_3,0x5BE18059,0x762E,0x4E73,0x94,0x76,0xAB,0xA2,0x94,0xFE,0xD4,0x11); +MIDL_DEFINE_GUID(IID, IID_IAccessible2_4,0x610a7bec,0x91bb,0x444d,0xa3,0x36,0xa0,0xda,0xf1,0x3c,0x4c,0x29); + + MIDL_DEFINE_GUID(IID, IID_IAccessibleComponent,0x1546D4B0,0x4C98,0x4bda,0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4);
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_p.c b/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_p.c index a922f8e..f319be8 100644 --- a/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_p.c +++ b/third_party/win_build_output/midl/third_party/iaccessible2/x64/ia2_api_all_p.c
@@ -46,8 +46,8 @@ #include "ia2_api_all.h" -#define TYPE_FORMAT_STRING_SIZE 1519 -#define PROC_FORMAT_STRING_SIZE 5489 +#define TYPE_FORMAT_STRING_SIZE 1545 +#define PROC_FORMAT_STRING_SIZE 5533 #define EXPR_FORMAT_STRING_SIZE 1 #define TRANSMIT_AS_TABLE_SIZE 0 #define WIRE_MARSHAL_TABLE_SIZE 3 @@ -118,6 +118,13 @@ extern const MIDL_STUB_DESC Object_StubDesc; +extern const MIDL_SERVER_INFO IAccessible2_4_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_4_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + extern const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo; extern const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo; @@ -1514,37 +1521,36 @@ /* 1408 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_locationInParent */ + /* Procedure setSelectionRanges */ /* 1410 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 1412 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1416 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1416 */ NdrFcShort( 0x32 ), /* 50 */ /* 1418 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 1420 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1422 */ NdrFcShort( 0x40 ), /* 64 */ -/* 1424 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1420 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1422 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1424 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x3, /* 3 */ /* 1426 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ /* 1428 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1430 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1430 */ NdrFcShort( 0x1 ), /* 1 */ /* 1432 */ NdrFcShort( 0x0 ), /* 0 */ /* 1434 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter x */ + /* Parameter nRanges */ -/* 1436 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1436 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 1438 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ /* 1440 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter y */ + /* Parameter ranges */ -/* 1442 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1442 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ /* 1444 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1446 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 1446 */ NdrFcShort( 0x51c ), /* Type Offset=1308 */ /* Return value */ @@ -1553,17 +1559,17 @@ /* 1452 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_foreground */ + /* Procedure get_locationInParent */ /* 1454 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 1456 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1460 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1462 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1460 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1462 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 1464 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1466 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1466 */ NdrFcShort( 0x40 ), /* 64 */ /* 1468 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 1470 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ /* 1472 */ NdrFcShort( 0x0 ), /* 0 */ @@ -1571,142 +1577,181 @@ /* 1476 */ NdrFcShort( 0x0 ), /* 0 */ /* 1478 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter foreground */ + /* Parameter x */ /* 1480 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 1482 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ /* 1484 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Parameter y */ -/* 1486 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1486 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 1488 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 1490 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_currentValue */ + /* Return value */ -/* 1492 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1492 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1494 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1496 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_foreground */ + +/* 1498 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1494 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1498 */ NdrFcShort( 0x3 ), /* 3 */ -/* 1500 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 1502 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1504 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1506 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 1500 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1504 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1506 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1508 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1510 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1512 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 1508 */ 0xa, /* 10 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1510 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1512 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1514 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1514 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ /* 1516 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1518 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1520 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1522 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter currentValue */ + /* Parameter foreground */ -/* 1518 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 1520 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 1522 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ +/* 1524 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1526 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1528 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ /* Return value */ -/* 1524 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1526 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1528 */ 0x8, /* FC_LONG */ +/* 1530 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1532 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1534 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_currentValue */ + +/* 1536 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1538 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1542 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1544 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1546 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1548 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1550 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1552 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1554 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1556 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1558 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1560 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter currentValue */ + +/* 1562 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 1564 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1566 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ + + /* Return value */ + +/* 1568 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1570 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1572 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure setCurrentValue */ -/* 1530 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1574 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1532 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1536 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1538 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 1540 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1542 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1544 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ +/* 1576 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1580 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1582 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1584 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1586 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1588 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x2, /* 2 */ -/* 1546 */ 0xa, /* 10 */ +/* 1590 */ 0xa, /* 10 */ 0x85, /* Ext Flags: new corr desc, srv corr check, has big byval param */ -/* 1548 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1550 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1552 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1554 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1592 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1594 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1596 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1598 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter value */ -/* 1556 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ -/* 1558 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 1560 */ NdrFcShort( 0x520 ), /* Type Offset=1312 */ +/* 1600 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 1602 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1604 */ NdrFcShort( 0x53a ), /* Type Offset=1338 */ /* Return value */ -/* 1562 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1564 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1566 */ 0x8, /* FC_LONG */ +/* 1606 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1608 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1610 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_maximumValue */ -/* 1568 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1612 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1570 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1574 */ NdrFcShort( 0x5 ), /* 5 */ -/* 1576 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 1578 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1580 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1582 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 1614 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1618 */ NdrFcShort( 0x5 ), /* 5 */ +/* 1620 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1622 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1624 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1626 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 1584 */ 0xa, /* 10 */ +/* 1628 */ 0xa, /* 10 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1586 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1588 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1590 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1592 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1630 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1632 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1634 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1636 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter maximumValue */ -/* 1594 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 1596 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 1598 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ +/* 1638 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 1640 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1642 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ /* Return value */ -/* 1600 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1602 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1604 */ 0x8, /* FC_LONG */ +/* 1644 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1646 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1648 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_minimumValue */ -/* 1606 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1650 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1608 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1612 */ NdrFcShort( 0x6 ), /* 6 */ -/* 1614 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 1616 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1618 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1620 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 1652 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1656 */ NdrFcShort( 0x6 ), /* 6 */ +/* 1658 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1660 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1662 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1664 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 1622 */ 0xa, /* 10 */ +/* 1666 */ 0xa, /* 10 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1624 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1626 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1628 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1630 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1668 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1670 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1672 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1674 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter minimumValue */ -/* 1632 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 1634 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 1636 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ +/* 1676 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 1678 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1680 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ /* Return value */ -/* 1638 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1640 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1642 */ 0x8, /* FC_LONG */ +/* 1682 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1684 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1686 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure copyText */ @@ -1714,169 +1759,169 @@ /* Procedure addSelection */ -/* 1644 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 1646 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1650 */ NdrFcShort( 0x3 ), /* 3 */ -/* 1652 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 1654 */ NdrFcShort( 0x10 ), /* 16 */ -/* 1656 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1658 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 1660 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 1662 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1664 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1666 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1668 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter startOffset */ - - - /* Parameter startOffset */ - -/* 1670 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1672 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 1674 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter endOffset */ - - - /* Parameter endOffset */ - -/* 1676 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1678 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1680 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Return value */ - - - /* Return value */ - -/* 1682 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1684 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 1686 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_attributes */ - /* 1688 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 1690 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1694 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1696 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ -/* 1698 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1700 */ NdrFcShort( 0x40 ), /* 64 */ -/* 1702 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x5, /* 5 */ +/* 1694 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1696 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1698 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1700 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1702 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ /* 1704 */ 0xa, /* 10 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1706 */ NdrFcShort( 0x1 ), /* 1 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1706 */ NdrFcShort( 0x0 ), /* 0 */ /* 1708 */ NdrFcShort( 0x0 ), /* 0 */ /* 1710 */ NdrFcShort( 0x0 ), /* 0 */ /* 1712 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter offset */ + /* Parameter startOffset */ + + + /* Parameter startOffset */ /* 1714 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 1716 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ /* 1718 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter startOffset */ + /* Parameter endOffset */ -/* 1720 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ + + /* Parameter endOffset */ + +/* 1720 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 1722 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 1724 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter endOffset */ + /* Return value */ -/* 1726 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ + + /* Return value */ + +/* 1726 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ /* 1728 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ /* 1730 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Procedure get_attributes */ + +/* 1732 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1734 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1738 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1740 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 1742 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1744 */ NdrFcShort( 0x40 ), /* 64 */ +/* 1746 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x5, /* 5 */ +/* 1748 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1750 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1752 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1754 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1756 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 1758 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1760 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1762 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter startOffset */ + +/* 1764 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1766 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1768 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 1770 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1772 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1774 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Parameter textAttributes */ -/* 1732 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 1734 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 1736 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 1776 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1778 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1780 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 1738 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1740 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 1742 */ 0x8, /* FC_LONG */ +/* 1782 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1784 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 1786 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_characterExtents */ -/* 1744 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1788 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1746 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1750 */ NdrFcShort( 0x6 ), /* 6 */ -/* 1752 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */ -/* 1754 */ NdrFcShort( 0xe ), /* 14 */ -/* 1756 */ NdrFcShort( 0x78 ), /* 120 */ -/* 1758 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1790 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1794 */ NdrFcShort( 0x6 ), /* 6 */ +/* 1796 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */ +/* 1798 */ NdrFcShort( 0xe ), /* 14 */ +/* 1800 */ NdrFcShort( 0x78 ), /* 120 */ +/* 1802 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x7, /* 7 */ -/* 1760 */ 0xa, /* 10 */ +/* 1804 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 1762 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1764 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1766 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1768 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1806 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1808 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1810 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1812 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter offset */ -/* 1770 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1772 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 1774 */ 0x8, /* FC_LONG */ +/* 1814 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1816 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1818 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter coordType */ -/* 1776 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1778 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1780 */ 0xd, /* FC_ENUM16 */ +/* 1820 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1822 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1824 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter x */ -/* 1782 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1784 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 1786 */ 0x8, /* FC_LONG */ +/* 1826 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1828 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1830 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter y */ -/* 1788 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1790 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 1792 */ 0x8, /* FC_LONG */ +/* 1832 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1834 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1836 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter width */ -/* 1794 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1796 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 1798 */ 0x8, /* FC_LONG */ +/* 1838 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1840 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 1842 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter height */ -/* 1800 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1802 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ -/* 1804 */ 0x8, /* FC_LONG */ +/* 1844 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1846 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 1848 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 1806 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1808 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ -/* 1810 */ 0x8, /* FC_LONG */ +/* 1850 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1852 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 1854 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nRows */ @@ -1884,30 +1929,30 @@ /* Procedure get_nSelections */ -/* 1812 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1856 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1814 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1818 */ NdrFcShort( 0x7 ), /* 7 */ -/* 1820 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 1822 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1824 */ NdrFcShort( 0x24 ), /* 36 */ -/* 1826 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1858 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1862 */ NdrFcShort( 0x7 ), /* 7 */ +/* 1864 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1866 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1868 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1870 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 1828 */ 0xa, /* 10 */ +/* 1872 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 1830 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1832 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1834 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1836 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1874 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1876 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1878 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1880 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter rowCount */ /* Parameter nSelections */ -/* 1838 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1840 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 1842 */ 0x8, /* FC_LONG */ +/* 1882 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1884 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1886 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -1915,769 +1960,731 @@ /* Return value */ -/* 1844 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1846 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1848 */ 0x8, /* FC_LONG */ +/* 1888 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1890 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1892 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_offsetAtPoint */ -/* 1850 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1894 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1852 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1856 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1858 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ -/* 1860 */ NdrFcShort( 0x16 ), /* 22 */ -/* 1862 */ NdrFcShort( 0x24 ), /* 36 */ -/* 1864 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1896 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1900 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1902 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 1904 */ NdrFcShort( 0x16 ), /* 22 */ +/* 1906 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1908 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x5, /* 5 */ -/* 1866 */ 0xa, /* 10 */ +/* 1910 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 1868 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1870 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1872 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1874 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1912 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1914 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1916 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1918 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter x */ -/* 1876 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1878 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 1880 */ 0x8, /* FC_LONG */ +/* 1920 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1922 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1924 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter y */ -/* 1882 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1884 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1886 */ 0x8, /* FC_LONG */ +/* 1926 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1928 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1930 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter coordType */ -/* 1888 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1890 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 1892 */ 0xd, /* FC_ENUM16 */ +/* 1932 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1934 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1936 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter offset */ -/* 1894 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1896 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 1898 */ 0x8, /* FC_LONG */ +/* 1938 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1940 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1942 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 1900 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1902 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 1904 */ 0x8, /* FC_LONG */ +/* 1944 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1946 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 1948 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_selection */ -/* 1906 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1950 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1908 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1912 */ NdrFcShort( 0x9 ), /* 9 */ -/* 1914 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 1916 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1918 */ NdrFcShort( 0x40 ), /* 64 */ -/* 1920 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1952 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1956 */ NdrFcShort( 0x9 ), /* 9 */ +/* 1958 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 1960 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1962 */ NdrFcShort( 0x40 ), /* 64 */ +/* 1964 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 1922 */ 0xa, /* 10 */ +/* 1966 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 1924 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1926 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1928 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1930 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1968 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1970 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1972 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1974 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter selectionIndex */ -/* 1932 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1934 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 1936 */ 0x8, /* FC_LONG */ +/* 1976 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1978 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1980 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 1938 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1940 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1942 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter endOffset */ - -/* 1944 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1946 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 1948 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Return value */ - -/* 1950 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1952 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 1954 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_text */ - -/* 1956 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 1958 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1962 */ NdrFcShort( 0xa ), /* 10 */ -/* 1964 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 1966 */ NdrFcShort( 0x10 ), /* 16 */ -/* 1968 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1970 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x4, /* 4 */ -/* 1972 */ 0xa, /* 10 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1974 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1976 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1978 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1980 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter startOffset */ - -/* 1982 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1984 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1982 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1984 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 1986 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 1988 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1990 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1988 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1990 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ /* 1992 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Return value */ + +/* 1994 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1996 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 1998 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_text */ + +/* 2000 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2002 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2006 */ NdrFcShort( 0xa ), /* 10 */ +/* 2008 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2010 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2012 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2014 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 2016 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2018 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2020 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2022 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2024 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter startOffset */ + +/* 2026 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2028 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2030 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 2032 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2034 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2036 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Parameter text */ -/* 1994 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 1996 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 1998 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 2038 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2040 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2042 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 2000 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2002 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2004 */ 0x8, /* FC_LONG */ +/* 2044 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2046 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2048 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_textBeforeOffset */ -/* 2006 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2050 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2008 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2012 */ NdrFcShort( 0xb ), /* 11 */ -/* 2014 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ -/* 2016 */ NdrFcShort( 0xe ), /* 14 */ -/* 2018 */ NdrFcShort( 0x40 ), /* 64 */ -/* 2020 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2052 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2056 */ NdrFcShort( 0xb ), /* 11 */ +/* 2058 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 2060 */ NdrFcShort( 0xe ), /* 14 */ +/* 2062 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2064 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x6, /* 6 */ -/* 2022 */ 0xa, /* 10 */ +/* 2066 */ 0xa, /* 10 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2024 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2026 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2028 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2030 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2068 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2070 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2072 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2074 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter offset */ -/* 2032 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2034 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2036 */ 0x8, /* FC_LONG */ +/* 2076 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2078 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2080 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter boundaryType */ -/* 2038 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2040 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2042 */ 0xd, /* FC_ENUM16 */ +/* 2082 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2084 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2086 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2044 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2046 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2048 */ 0x8, /* FC_LONG */ +/* 2088 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2090 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2092 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2050 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2052 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2054 */ 0x8, /* FC_LONG */ +/* 2094 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2096 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2098 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 2056 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 2058 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 2060 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 2100 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2102 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2104 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 2062 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2064 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ -/* 2066 */ 0x8, /* FC_LONG */ +/* 2106 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2108 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 2110 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_textAfterOffset */ -/* 2068 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2112 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2070 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2074 */ NdrFcShort( 0xc ), /* 12 */ -/* 2076 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ -/* 2078 */ NdrFcShort( 0xe ), /* 14 */ -/* 2080 */ NdrFcShort( 0x40 ), /* 64 */ -/* 2082 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2114 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2118 */ NdrFcShort( 0xc ), /* 12 */ +/* 2120 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 2122 */ NdrFcShort( 0xe ), /* 14 */ +/* 2124 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2126 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x6, /* 6 */ -/* 2084 */ 0xa, /* 10 */ +/* 2128 */ 0xa, /* 10 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2086 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2088 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2090 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2092 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2130 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2132 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2134 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2136 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter offset */ -/* 2094 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2096 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2098 */ 0x8, /* FC_LONG */ +/* 2138 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2140 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2142 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter boundaryType */ -/* 2100 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2102 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2104 */ 0xd, /* FC_ENUM16 */ +/* 2144 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2146 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2148 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2106 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2108 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2110 */ 0x8, /* FC_LONG */ +/* 2150 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2152 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2154 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2112 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2114 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2116 */ 0x8, /* FC_LONG */ +/* 2156 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2158 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2160 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 2118 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 2120 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 2122 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 2162 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2164 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2166 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 2124 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2126 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ -/* 2128 */ 0x8, /* FC_LONG */ +/* 2168 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2170 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 2172 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_textAtOffset */ -/* 2130 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2174 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2132 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2136 */ NdrFcShort( 0xd ), /* 13 */ -/* 2138 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ -/* 2140 */ NdrFcShort( 0xe ), /* 14 */ -/* 2142 */ NdrFcShort( 0x40 ), /* 64 */ -/* 2144 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2176 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2180 */ NdrFcShort( 0xd ), /* 13 */ +/* 2182 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 2184 */ NdrFcShort( 0xe ), /* 14 */ +/* 2186 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2188 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x6, /* 6 */ -/* 2146 */ 0xa, /* 10 */ +/* 2190 */ 0xa, /* 10 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2148 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2150 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2152 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2154 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2192 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2194 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2196 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2198 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter offset */ -/* 2156 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2158 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2160 */ 0x8, /* FC_LONG */ +/* 2200 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2202 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2204 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter boundaryType */ -/* 2162 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2164 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2166 */ 0xd, /* FC_ENUM16 */ +/* 2206 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2208 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2210 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2168 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2170 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2172 */ 0x8, /* FC_LONG */ +/* 2212 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2214 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2216 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2174 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2176 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2178 */ 0x8, /* FC_LONG */ +/* 2218 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2220 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2222 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 2180 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 2182 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 2184 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 2224 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2226 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2228 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 2186 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2188 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ -/* 2190 */ 0x8, /* FC_LONG */ +/* 2230 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2232 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 2234 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure removeSelection */ -/* 2192 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2236 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2194 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2198 */ NdrFcShort( 0xe ), /* 14 */ -/* 2200 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2202 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2204 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2206 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2238 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2242 */ NdrFcShort( 0xe ), /* 14 */ +/* 2244 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2246 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2248 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2250 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2208 */ 0xa, /* 10 */ +/* 2252 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2210 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2212 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2214 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2216 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2254 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2256 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2258 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2260 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter selectionIndex */ -/* 2218 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2220 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2222 */ 0x8, /* FC_LONG */ +/* 2262 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2264 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2266 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2224 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2226 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2228 */ 0x8, /* FC_LONG */ +/* 2268 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2270 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2272 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure setCaretOffset */ -/* 2230 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2274 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2232 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2236 */ NdrFcShort( 0xf ), /* 15 */ -/* 2238 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2240 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2242 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2244 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2276 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2280 */ NdrFcShort( 0xf ), /* 15 */ +/* 2282 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2284 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2286 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2288 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2246 */ 0xa, /* 10 */ +/* 2290 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2248 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2250 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2252 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2254 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2292 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2294 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2296 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2298 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter offset */ -/* 2256 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2258 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2260 */ 0x8, /* FC_LONG */ +/* 2300 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2302 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2304 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2262 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2264 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2266 */ 0x8, /* FC_LONG */ +/* 2306 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2308 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2310 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure setSelection */ -/* 2268 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2312 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2270 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2274 */ NdrFcShort( 0x10 ), /* 16 */ -/* 2276 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 2278 */ NdrFcShort( 0x18 ), /* 24 */ -/* 2280 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2282 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2314 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2318 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2320 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2322 */ NdrFcShort( 0x18 ), /* 24 */ +/* 2324 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2326 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 2284 */ 0xa, /* 10 */ +/* 2328 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2286 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2288 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2290 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2292 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2330 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2332 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2334 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2336 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter selectionIndex */ -/* 2294 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2296 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2298 */ 0x8, /* FC_LONG */ +/* 2338 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2340 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2342 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2300 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2302 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2304 */ 0x8, /* FC_LONG */ +/* 2344 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2346 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2348 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2306 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2308 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2310 */ 0x8, /* FC_LONG */ +/* 2350 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2352 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2354 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2312 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2314 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2316 */ 0x8, /* FC_LONG */ +/* 2356 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2358 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2360 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nCharacters */ -/* 2318 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2362 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2320 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2324 */ NdrFcShort( 0x11 ), /* 17 */ -/* 2326 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2328 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2330 */ NdrFcShort( 0x24 ), /* 36 */ -/* 2332 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2364 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2368 */ NdrFcShort( 0x11 ), /* 17 */ +/* 2370 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2372 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2374 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2376 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2334 */ 0xa, /* 10 */ +/* 2378 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2336 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2338 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2340 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2342 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2380 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2382 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2384 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2386 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter nCharacters */ -/* 2344 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2346 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2348 */ 0x8, /* FC_LONG */ +/* 2388 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2390 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2392 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2350 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2352 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2354 */ 0x8, /* FC_LONG */ +/* 2394 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2396 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2398 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure scrollSubstringTo */ -/* 2356 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2400 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2358 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2362 */ NdrFcShort( 0x12 ), /* 18 */ -/* 2364 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 2366 */ NdrFcShort( 0x16 ), /* 22 */ -/* 2368 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2370 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2402 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2406 */ NdrFcShort( 0x12 ), /* 18 */ +/* 2408 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2410 */ NdrFcShort( 0x16 ), /* 22 */ +/* 2412 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2414 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 2372 */ 0xa, /* 10 */ +/* 2416 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2374 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2376 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2378 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2380 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2418 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2420 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2422 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2424 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter startIndex */ -/* 2382 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2384 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2386 */ 0x8, /* FC_LONG */ +/* 2426 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2428 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2430 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endIndex */ -/* 2388 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2390 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2392 */ 0x8, /* FC_LONG */ +/* 2432 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2434 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2436 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter scrollType */ -/* 2394 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2396 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2398 */ 0xd, /* FC_ENUM16 */ +/* 2438 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2440 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2442 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Return value */ -/* 2400 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2402 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2404 */ 0x8, /* FC_LONG */ +/* 2444 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2446 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2448 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure scrollSubstringToPoint */ -/* 2406 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2450 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2408 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2412 */ NdrFcShort( 0x13 ), /* 19 */ -/* 2414 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ -/* 2416 */ NdrFcShort( 0x26 ), /* 38 */ -/* 2418 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2420 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2452 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2456 */ NdrFcShort( 0x13 ), /* 19 */ +/* 2458 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 2460 */ NdrFcShort( 0x26 ), /* 38 */ +/* 2462 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2464 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x6, /* 6 */ -/* 2422 */ 0xa, /* 10 */ +/* 2466 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2424 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2426 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2428 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2430 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2468 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2470 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2472 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2474 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter startIndex */ -/* 2432 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2434 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2436 */ 0x8, /* FC_LONG */ +/* 2476 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2478 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2480 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endIndex */ -/* 2438 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2440 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2442 */ 0x8, /* FC_LONG */ +/* 2482 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2484 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2486 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter coordinateType */ -/* 2444 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2446 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2448 */ 0xd, /* FC_ENUM16 */ +/* 2488 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2490 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2492 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter x */ -/* 2450 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2452 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2454 */ 0x8, /* FC_LONG */ +/* 2494 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2496 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2498 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter y */ -/* 2456 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2458 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 2460 */ 0x8, /* FC_LONG */ +/* 2500 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2502 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2504 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2462 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2464 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ -/* 2466 */ 0x8, /* FC_LONG */ +/* 2506 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2508 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 2510 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_newText */ -/* 2468 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2512 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2470 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2474 */ NdrFcShort( 0x14 ), /* 20 */ -/* 2476 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2478 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2480 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2482 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2514 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2518 */ NdrFcShort( 0x14 ), /* 20 */ +/* 2520 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2522 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2524 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2526 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 2484 */ 0xa, /* 10 */ +/* 2528 */ 0xa, /* 10 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2486 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2488 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2490 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2492 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2530 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2532 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2534 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2536 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter newText */ -/* 2494 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ -/* 2496 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2498 */ NdrFcShort( 0x52e ), /* Type Offset=1326 */ +/* 2538 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +/* 2540 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2542 */ NdrFcShort( 0x548 ), /* Type Offset=1352 */ /* Return value */ -/* 2500 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2502 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2504 */ 0x8, /* FC_LONG */ +/* 2544 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2546 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2548 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_oldText */ -/* 2506 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2550 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2508 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2512 */ NdrFcShort( 0x15 ), /* 21 */ -/* 2514 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2516 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2518 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2520 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2552 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2556 */ NdrFcShort( 0x15 ), /* 21 */ +/* 2558 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2560 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2562 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2564 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 2522 */ 0xa, /* 10 */ +/* 2566 */ 0xa, /* 10 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2524 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2526 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2528 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2530 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2568 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2570 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2572 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2574 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter oldText */ -/* 2532 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ -/* 2534 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2536 */ NdrFcShort( 0x52e ), /* Type Offset=1326 */ +/* 2576 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +/* 2578 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2580 */ NdrFcShort( 0x548 ), /* Type Offset=1352 */ /* Return value */ -/* 2538 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2540 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2542 */ 0x8, /* FC_LONG */ +/* 2582 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2584 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2586 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_attributeRange */ -/* 2544 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2588 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2546 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2550 */ NdrFcShort( 0x16 ), /* 22 */ -/* 2552 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ -/* 2554 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2556 */ NdrFcShort( 0x40 ), /* 64 */ -/* 2558 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ +/* 2590 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2594 */ NdrFcShort( 0x16 ), /* 22 */ +/* 2596 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 2598 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2600 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2602 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ 0x6, /* 6 */ -/* 2560 */ 0xa, /* 10 */ +/* 2604 */ 0xa, /* 10 */ 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */ -/* 2562 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2564 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2566 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2568 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2606 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2608 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2610 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2612 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter offset */ -/* 2570 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2572 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2574 */ 0x8, /* FC_LONG */ +/* 2614 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2616 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2618 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter filter */ -/* 2576 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ -/* 2578 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2580 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ +/* 2620 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 2622 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2624 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ /* Parameter startOffset */ -/* 2582 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2584 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2586 */ 0x8, /* FC_LONG */ +/* 2626 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2628 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2630 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2588 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2590 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2592 */ 0x8, /* FC_LONG */ +/* 2632 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2634 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2636 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter attributeValues */ -/* 2594 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 2596 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 2598 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - - /* Return value */ - -/* 2600 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2602 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ -/* 2604 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure deleteText */ - -/* 2606 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 2608 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2612 */ NdrFcShort( 0x4 ), /* 4 */ -/* 2614 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2616 */ NdrFcShort( 0x10 ), /* 16 */ -/* 2618 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2620 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 2622 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 2624 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2626 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2628 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2630 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter startOffset */ - -/* 2632 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2634 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2636 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter endOffset */ - -/* 2638 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2640 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2642 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 2638 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2640 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2642 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ /* 2644 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2646 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2646 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ /* 2648 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure insertText */ + /* Procedure deleteText */ /* 2650 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 2652 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2656 */ NdrFcShort( 0x5 ), /* 5 */ +/* 2656 */ NdrFcShort( 0x4 ), /* 4 */ /* 2658 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2660 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2660 */ NdrFcShort( 0x10 ), /* 16 */ /* 2662 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2664 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ +/* 2664 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x3, /* 3 */ /* 2666 */ 0xa, /* 10 */ - 0x5, /* Ext Flags: new corr desc, srv corr check, */ + 0x1, /* Ext Flags: new corr desc, */ /* 2668 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2670 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2670 */ NdrFcShort( 0x0 ), /* 0 */ /* 2672 */ NdrFcShort( 0x0 ), /* 0 */ /* 2674 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter offset */ + /* Parameter startOffset */ /* 2676 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 2678 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ /* 2680 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter text */ + /* Parameter endOffset */ -/* 2682 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2682 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 2684 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2686 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ +/* 2686 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ /* Return value */ @@ -2686,37 +2693,36 @@ /* 2692 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure cutText */ + /* Procedure insertText */ /* 2694 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 2696 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2700 */ NdrFcShort( 0x6 ), /* 6 */ +/* 2700 */ NdrFcShort( 0x5 ), /* 5 */ /* 2702 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2704 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2704 */ NdrFcShort( 0x8 ), /* 8 */ /* 2706 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2708 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2708 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x3, /* 3 */ /* 2710 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ /* 2712 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2714 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2714 */ NdrFcShort( 0x1 ), /* 1 */ /* 2716 */ NdrFcShort( 0x0 ), /* 0 */ /* 2718 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter startOffset */ + /* Parameter offset */ /* 2720 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 2722 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ /* 2724 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter endOffset */ + /* Parameter text */ -/* 2726 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2726 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ /* 2728 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2730 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 2730 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ /* Return value */ @@ -2725,17 +2731,17 @@ /* 2736 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure pasteText */ + /* Procedure cutText */ /* 2738 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 2740 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2744 */ NdrFcShort( 0x7 ), /* 7 */ -/* 2746 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2748 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2744 */ NdrFcShort( 0x6 ), /* 6 */ +/* 2746 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2748 */ NdrFcShort( 0x10 ), /* 16 */ /* 2750 */ NdrFcShort( 0x8 ), /* 8 */ /* 2752 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 2754 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ /* 2756 */ NdrFcShort( 0x0 ), /* 0 */ @@ -2743,154 +2749,155 @@ /* 2760 */ NdrFcShort( 0x0 ), /* 0 */ /* 2762 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter offset */ + /* Parameter startOffset */ /* 2764 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 2766 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ /* 2768 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Parameter endOffset */ -/* 2770 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2770 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 2772 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 2774 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Return value */ + +/* 2776 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2778 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2780 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure pasteText */ + +/* 2782 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2784 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2788 */ NdrFcShort( 0x7 ), /* 7 */ +/* 2790 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2792 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2794 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2796 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2798 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2800 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2802 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2804 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2806 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 2808 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2810 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2812 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2814 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2816 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2818 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure replaceText */ -/* 2776 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2820 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2778 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2782 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2784 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 2786 */ NdrFcShort( 0x10 ), /* 16 */ -/* 2788 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2790 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ +/* 2822 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2826 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2828 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2830 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2832 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2834 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x4, /* 4 */ -/* 2792 */ 0xa, /* 10 */ +/* 2836 */ 0xa, /* 10 */ 0x5, /* Ext Flags: new corr desc, srv corr check, */ -/* 2794 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2796 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2798 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2800 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2838 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2840 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2842 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2844 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter startOffset */ -/* 2802 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2804 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2806 */ 0x8, /* FC_LONG */ +/* 2846 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2848 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2850 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2808 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2810 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2812 */ 0x8, /* FC_LONG */ +/* 2852 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2854 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2856 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 2814 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ -/* 2816 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2818 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ +/* 2858 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2860 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2862 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ /* Return value */ -/* 2820 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2822 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2824 */ 0x8, /* FC_LONG */ +/* 2864 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2866 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2868 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure setAttributes */ -/* 2826 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2870 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2828 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2832 */ NdrFcShort( 0x9 ), /* 9 */ -/* 2834 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 2836 */ NdrFcShort( 0x10 ), /* 16 */ -/* 2838 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2840 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ +/* 2872 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2876 */ NdrFcShort( 0x9 ), /* 9 */ +/* 2878 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 2880 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2882 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2884 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x4, /* 4 */ -/* 2842 */ 0xa, /* 10 */ +/* 2886 */ 0xa, /* 10 */ 0x5, /* Ext Flags: new corr desc, srv corr check, */ -/* 2844 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2846 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2848 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2850 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2888 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2890 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2892 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2894 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter startOffset */ -/* 2852 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2854 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2856 */ 0x8, /* FC_LONG */ +/* 2896 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2898 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2900 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2858 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2860 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2862 */ 0x8, /* FC_LONG */ +/* 2902 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2904 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 2906 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter attributes */ -/* 2864 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ -/* 2866 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2868 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ - - /* Return value */ - -/* 2870 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2872 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2874 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_anchor */ - -/* 2876 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 2878 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2882 */ NdrFcShort( 0x9 ), /* 9 */ -/* 2884 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 2886 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2888 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2890 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 2892 */ 0xa, /* 10 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2894 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2896 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2898 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2900 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter index */ - -/* 2902 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2904 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2906 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter anchor */ - -/* 2908 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 2910 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 2912 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ +/* 2908 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2910 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2912 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ /* Return value */ /* 2914 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2916 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 2916 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 2918 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_anchorTarget */ + /* Procedure get_anchor */ /* 2920 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 2922 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2926 */ NdrFcShort( 0xa ), /* 10 */ +/* 2926 */ NdrFcShort( 0x9 ), /* 9 */ /* 2928 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 2930 */ NdrFcShort( 0x8 ), /* 8 */ /* 2932 */ NdrFcShort( 0x8 ), /* 8 */ @@ -2910,7 +2917,7 @@ /* 2950 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter anchorTarget */ + /* Parameter anchor */ /* 2952 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ /* 2954 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ @@ -2923,35 +2930,73 @@ /* 2962 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Procedure get_anchorTarget */ + +/* 2964 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2966 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2970 */ NdrFcShort( 0xa ), /* 10 */ +/* 2972 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 2974 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2976 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2978 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 2980 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2982 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2984 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2986 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2988 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter index */ + +/* 2990 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2992 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 2994 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter anchorTarget */ + +/* 2996 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 2998 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3000 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */ + + /* Return value */ + +/* 3002 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3004 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3006 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure get_nRows */ /* Procedure get_startIndex */ -/* 2964 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3008 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2966 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2970 */ NdrFcShort( 0xb ), /* 11 */ -/* 2972 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 2974 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2976 */ NdrFcShort( 0x24 ), /* 36 */ -/* 2978 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3010 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3014 */ NdrFcShort( 0xb ), /* 11 */ +/* 3016 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3018 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3020 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3022 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2980 */ 0xa, /* 10 */ +/* 3024 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2982 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2984 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2986 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2988 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3026 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3028 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3030 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3032 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter rowCount */ /* Parameter index */ -/* 2990 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2992 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 2994 */ 0x8, /* FC_LONG */ +/* 3034 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3036 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3038 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -2959,9 +3004,9 @@ /* Return value */ -/* 2996 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2998 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3000 */ 0x8, /* FC_LONG */ +/* 3040 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3042 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3044 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nSelectedChildren */ @@ -2969,30 +3014,30 @@ /* Procedure get_endIndex */ -/* 3002 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3046 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3004 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3008 */ NdrFcShort( 0xc ), /* 12 */ -/* 3010 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 3012 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3014 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3016 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3048 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3052 */ NdrFcShort( 0xc ), /* 12 */ +/* 3054 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3056 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3058 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3060 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 3018 */ 0xa, /* 10 */ +/* 3062 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3020 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3022 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3024 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3026 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3064 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3066 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3068 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3070 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter cellCount */ /* Parameter index */ -/* 3028 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3030 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3032 */ 0x8, /* FC_LONG */ +/* 3072 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3074 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3076 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -3000,123 +3045,85 @@ /* Return value */ -/* 3034 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3036 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3038 */ 0x8, /* FC_LONG */ +/* 3078 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3080 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3082 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_valid */ -/* 3040 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3084 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3042 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3046 */ NdrFcShort( 0xd ), /* 13 */ -/* 3048 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 3050 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3052 */ NdrFcShort( 0x21 ), /* 33 */ -/* 3054 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3086 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3090 */ NdrFcShort( 0xd ), /* 13 */ +/* 3092 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3094 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3096 */ NdrFcShort( 0x21 ), /* 33 */ +/* 3098 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 3056 */ 0xa, /* 10 */ +/* 3100 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3058 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3060 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3062 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3064 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3102 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3104 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3106 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3108 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter valid */ -/* 3066 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3068 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3070 */ 0x3, /* FC_SMALL */ +/* 3110 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3112 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3114 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 3072 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3074 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3076 */ 0x8, /* FC_LONG */ +/* 3116 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3118 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3120 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nHyperlinks */ -/* 3078 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3122 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3080 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3084 */ NdrFcShort( 0x16 ), /* 22 */ -/* 3086 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 3088 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3090 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3092 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3124 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3128 */ NdrFcShort( 0x16 ), /* 22 */ +/* 3130 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3132 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3134 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3136 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 3094 */ 0xa, /* 10 */ +/* 3138 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3096 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3098 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3100 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3102 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3140 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3142 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3144 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3146 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter hyperlinkCount */ -/* 3104 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3106 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3108 */ 0x8, /* FC_LONG */ +/* 3148 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3150 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3152 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 3110 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3112 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3114 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_hyperlink */ - -/* 3116 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3118 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3122 */ NdrFcShort( 0x17 ), /* 23 */ -/* 3124 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3126 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3128 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3130 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3132 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3134 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3136 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3138 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3140 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter index */ - -/* 3142 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3144 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3146 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter hyperlink */ - -/* 3148 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3150 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3152 */ NdrFcShort( 0x546 ), /* Type Offset=1350 */ - - /* Return value */ - /* 3154 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3156 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3156 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 3158 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_hyperlinkIndex */ + /* Procedure get_hyperlink */ /* 3160 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3162 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3166 */ NdrFcShort( 0x18 ), /* 24 */ +/* 3166 */ NdrFcShort( 0x17 ), /* 23 */ /* 3168 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 3170 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3172 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3174 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3172 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3174 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x3, /* 3 */ /* 3176 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ @@ -3125,19 +3132,18 @@ /* 3182 */ NdrFcShort( 0x0 ), /* 0 */ /* 3184 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter charIndex */ + /* Parameter index */ /* 3186 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3188 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ /* 3190 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter hyperlinkIndex */ + /* Parameter hyperlink */ -/* 3192 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3192 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ /* 3194 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3196 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3196 */ NdrFcShort( 0x560 ), /* Type Offset=1376 */ /* Return value */ @@ -3146,31 +3152,32 @@ /* 3202 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_hyperlinks */ + /* Procedure get_hyperlinkIndex */ /* 3204 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3206 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3210 */ NdrFcShort( 0x19 ), /* 25 */ +/* 3210 */ NdrFcShort( 0x18 ), /* 24 */ /* 3212 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3214 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3214 */ NdrFcShort( 0x8 ), /* 8 */ /* 3216 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3218 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3218 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x3, /* 3 */ /* 3220 */ 0xa, /* 10 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3222 */ NdrFcShort( 0x1 ), /* 1 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3222 */ NdrFcShort( 0x0 ), /* 0 */ /* 3224 */ NdrFcShort( 0x0 ), /* 0 */ /* 3226 */ NdrFcShort( 0x0 ), /* 0 */ /* 3228 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter hyperlinks */ + /* Parameter charIndex */ -/* 3230 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3230 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3232 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3234 */ NdrFcShort( 0x55c ), /* Type Offset=1372 */ +/* 3234 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ - /* Parameter nHyperlinks */ + /* Parameter hyperlinkIndex */ /* 3236 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3238 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ @@ -3184,35 +3191,73 @@ /* 3246 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Procedure get_hyperlinks */ + +/* 3248 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3250 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3254 */ NdrFcShort( 0x19 ), /* 25 */ +/* 3256 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3258 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3260 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3262 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3264 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3266 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3268 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3270 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3272 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter hyperlinks */ + +/* 3274 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3276 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3278 */ NdrFcShort( 0x576 ), /* Type Offset=1398 */ + + /* Parameter nHyperlinks */ + +/* 3280 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3282 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3284 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3286 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3288 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3290 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure get_cellAt */ /* Procedure get_accessibleAt */ -/* 3248 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3292 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3250 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3254 */ NdrFcShort( 0x3 ), /* 3 */ -/* 3256 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 3258 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3260 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3262 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3294 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3298 */ NdrFcShort( 0x3 ), /* 3 */ +/* 3300 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3302 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3304 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3306 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x4, /* 4 */ -/* 3264 */ 0xa, /* 10 */ +/* 3308 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3266 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3268 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3270 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3272 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3310 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3312 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3314 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3316 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter row */ /* Parameter row */ -/* 3274 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3276 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3278 */ 0x8, /* FC_LONG */ +/* 3318 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3320 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3322 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter column */ @@ -3220,9 +3265,9 @@ /* Parameter column */ -/* 3280 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3282 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3284 */ 0x8, /* FC_LONG */ +/* 3324 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3326 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3328 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter cell */ @@ -3230,18 +3275,18 @@ /* Parameter accessible */ -/* 3286 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3288 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 3290 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 3330 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3332 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3334 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ /* Return value */ -/* 3292 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3294 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3296 */ 0x8, /* FC_LONG */ +/* 3336 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3338 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3340 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_caption */ @@ -3249,219 +3294,181 @@ /* Procedure get_caption */ -/* 3298 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3342 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3300 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3304 */ NdrFcShort( 0x4 ), /* 4 */ -/* 3306 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 3308 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3310 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3312 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3344 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3348 */ NdrFcShort( 0x4 ), /* 4 */ +/* 3350 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3352 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3354 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3356 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 3314 */ 0xa, /* 10 */ +/* 3358 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3316 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3318 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3320 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3322 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3360 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3362 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3364 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3366 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter accessible */ /* Parameter accessible */ -/* 3324 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3326 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3328 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 3368 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3370 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3372 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ /* Return value */ -/* 3330 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3332 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3334 */ 0x8, /* FC_LONG */ +/* 3374 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3376 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3378 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_childIndex */ -/* 3336 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3380 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3338 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3342 */ NdrFcShort( 0x5 ), /* 5 */ -/* 3344 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 3346 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3348 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3350 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3382 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3386 */ NdrFcShort( 0x5 ), /* 5 */ +/* 3388 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3390 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3392 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3394 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 3352 */ 0xa, /* 10 */ +/* 3396 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3354 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3356 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3358 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3360 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3398 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3400 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3402 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3404 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter rowIndex */ -/* 3362 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3364 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3366 */ 0x8, /* FC_LONG */ +/* 3406 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3408 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3410 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter columnIndex */ -/* 3368 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3370 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3372 */ 0x8, /* FC_LONG */ +/* 3412 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3414 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3416 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter cellIndex */ -/* 3374 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3376 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 3378 */ 0x8, /* FC_LONG */ +/* 3418 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3420 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3422 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 3380 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3382 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3384 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_columnDescription */ - -/* 3386 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3388 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3392 */ NdrFcShort( 0x6 ), /* 6 */ -/* 3394 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3396 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3398 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3400 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3402 */ 0xa, /* 10 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3404 */ NdrFcShort( 0x1 ), /* 1 */ -/* 3406 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3408 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3410 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter column */ - -/* 3412 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3414 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3416 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter description */ - -/* 3418 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 3420 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3422 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - - /* Return value */ - /* 3424 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3426 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3426 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 3428 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_columnExtentAt */ + /* Procedure get_columnDescription */ /* 3430 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3432 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3436 */ NdrFcShort( 0x7 ), /* 7 */ -/* 3438 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 3440 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3442 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3444 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x4, /* 4 */ +/* 3436 */ NdrFcShort( 0x6 ), /* 6 */ +/* 3438 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3440 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3442 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3444 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ /* 3446 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3448 */ NdrFcShort( 0x0 ), /* 0 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3448 */ NdrFcShort( 0x1 ), /* 1 */ /* 3450 */ NdrFcShort( 0x0 ), /* 0 */ /* 3452 */ NdrFcShort( 0x0 ), /* 0 */ /* 3454 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter row */ + /* Parameter column */ /* 3456 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3458 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ /* 3460 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter column */ + /* Parameter description */ -/* 3462 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3462 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ /* 3464 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3466 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3466 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - /* Parameter nColumnsSpanned */ + /* Return value */ -/* 3468 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3468 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ /* 3470 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ /* 3472 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Procedure get_columnExtentAt */ -/* 3474 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3476 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3478 */ 0x8, /* FC_LONG */ +/* 3474 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3476 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3480 */ NdrFcShort( 0x7 ), /* 7 */ +/* 3482 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3484 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3486 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3488 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 3490 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3492 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3494 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3496 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3498 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 3500 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3502 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3504 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_columnHeader */ + /* Parameter column */ -/* 3480 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3482 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3486 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3488 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3490 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3492 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3494 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3496 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3498 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3500 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3502 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3504 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3506 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3508 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3510 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ - /* Parameter accessibleTable */ - -/* 3506 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3508 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3510 */ NdrFcShort( 0x57a ), /* Type Offset=1402 */ - - /* Parameter startingRowIndex */ + /* Parameter nColumnsSpanned */ /* 3512 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3514 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3514 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ /* 3516 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ /* 3518 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3520 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3520 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 3522 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_columnIndex */ + /* Procedure get_columnHeader */ /* 3524 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3526 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3530 */ NdrFcShort( 0x9 ), /* 9 */ +/* 3530 */ NdrFcShort( 0x8 ), /* 8 */ /* 3532 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3534 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3534 */ NdrFcShort( 0x0 ), /* 0 */ /* 3536 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3538 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3538 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x3, /* 3 */ /* 3540 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ @@ -3470,14 +3477,13 @@ /* 3546 */ NdrFcShort( 0x0 ), /* 0 */ /* 3548 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter cellIndex */ + /* Parameter accessibleTable */ -/* 3550 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3550 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ /* 3552 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3554 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3554 */ NdrFcShort( 0x594 ), /* Type Offset=1428 */ - /* Parameter columnIndex */ + /* Parameter startingRowIndex */ /* 3556 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3558 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ @@ -3491,20 +3497,17 @@ /* 3566 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_nSelectedRows */ - - - /* Procedure get_nColumns */ + /* Procedure get_columnIndex */ /* 3568 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3570 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3574 */ NdrFcShort( 0xa ), /* 10 */ -/* 3576 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 3578 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3574 */ NdrFcShort( 0x9 ), /* 9 */ +/* 3576 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3578 */ NdrFcShort( 0x8 ), /* 8 */ /* 3580 */ NdrFcShort( 0x24 ), /* 36 */ /* 3582 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 3584 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ /* 3586 */ NdrFcShort( 0x0 ), /* 0 */ @@ -3512,142 +3515,146 @@ /* 3590 */ NdrFcShort( 0x0 ), /* 0 */ /* 3592 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter rowCount */ + /* Parameter cellIndex */ - - /* Parameter columnCount */ - -/* 3594 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3594 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3596 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ /* 3598 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Parameter columnIndex */ - - /* Return value */ - -/* 3600 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3600 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3602 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 3604 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_nSelectedColumns */ - -/* 3606 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3608 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3612 */ NdrFcShort( 0xd ), /* 13 */ -/* 3614 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 3616 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3618 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3620 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ -/* 3622 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3624 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3626 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3628 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3630 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter columnCount */ - -/* 3632 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3634 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3636 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - /* Return value */ -/* 3638 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3640 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3642 */ 0x8, /* FC_LONG */ +/* 3606 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3608 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3610 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nSelectedRows */ -/* 3644 */ 0x33, /* FC_AUTO_HANDLE */ + + /* Procedure get_nColumns */ + +/* 3612 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3646 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3650 */ NdrFcShort( 0xe ), /* 14 */ -/* 3652 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 3654 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3656 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3658 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3614 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3618 */ NdrFcShort( 0xa ), /* 10 */ +/* 3620 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3622 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3624 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3626 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 3660 */ 0xa, /* 10 */ +/* 3628 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3662 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3664 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3666 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3668 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3630 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3632 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3634 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3636 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter rowCount */ -/* 3670 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3672 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3674 */ 0x8, /* FC_LONG */ + + /* Parameter columnCount */ + +/* 3638 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3640 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3642 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 3676 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3678 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ + + /* Return value */ + +/* 3644 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3646 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3648 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nSelectedColumns */ + +/* 3650 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3652 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3656 */ NdrFcShort( 0xd ), /* 13 */ +/* 3658 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3660 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3662 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3664 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3666 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3668 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3670 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3672 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3674 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter columnCount */ + +/* 3676 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3678 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ /* 3680 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowDescription */ + /* Return value */ -/* 3682 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3684 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3688 */ NdrFcShort( 0xf ), /* 15 */ -/* 3690 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3692 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3694 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3696 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3698 */ 0xa, /* 10 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3700 */ NdrFcShort( 0x1 ), /* 1 */ -/* 3702 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3704 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3706 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter row */ - -/* 3708 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3710 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3712 */ 0x8, /* FC_LONG */ +/* 3682 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3684 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3686 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter description */ + /* Procedure get_nSelectedRows */ -/* 3714 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 3716 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3718 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 3688 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3690 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3694 */ NdrFcShort( 0xe ), /* 14 */ +/* 3696 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3698 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3700 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3702 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3704 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3706 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3708 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3710 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3712 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter rowCount */ + +/* 3714 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3716 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3718 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ /* Return value */ /* 3720 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3722 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3722 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 3724 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowExtentAt */ + /* Procedure get_rowDescription */ /* 3726 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3728 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3732 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3734 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 3736 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3738 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3740 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x4, /* 4 */ +/* 3732 */ NdrFcShort( 0xf ), /* 15 */ +/* 3734 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3736 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3738 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3740 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ /* 3742 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3744 */ NdrFcShort( 0x0 ), /* 0 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3744 */ NdrFcShort( 0x1 ), /* 1 */ /* 3746 */ NdrFcShort( 0x0 ), /* 0 */ /* 3748 */ NdrFcShort( 0x0 ), /* 0 */ /* 3750 */ NdrFcShort( 0x0 ), /* 0 */ @@ -3659,75 +3666,75 @@ /* 3756 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter column */ + /* Parameter description */ -/* 3758 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3758 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ /* 3760 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3762 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3762 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - /* Parameter nRowsSpanned */ + /* Return value */ -/* 3764 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3764 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ /* 3766 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ /* 3768 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Procedure get_rowExtentAt */ -/* 3770 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3772 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3774 */ 0x8, /* FC_LONG */ +/* 3770 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3772 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3776 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3778 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3780 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3782 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3784 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 3786 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3788 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3790 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3792 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3794 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 3796 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3798 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3800 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowHeader */ + /* Parameter column */ -/* 3776 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3778 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3782 */ NdrFcShort( 0x11 ), /* 17 */ -/* 3784 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3786 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3788 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3790 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3792 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3794 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3796 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3798 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3800 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3802 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3804 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3806 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ - /* Parameter accessibleTable */ - -/* 3802 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3804 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3806 */ NdrFcShort( 0x57a ), /* Type Offset=1402 */ - - /* Parameter startingColumnIndex */ + /* Parameter nRowsSpanned */ /* 3808 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3810 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3810 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ /* 3812 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ /* 3814 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3816 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3816 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 3818 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowIndex */ + /* Procedure get_rowHeader */ /* 3820 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3822 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3826 */ NdrFcShort( 0x12 ), /* 18 */ +/* 3826 */ NdrFcShort( 0x11 ), /* 17 */ /* 3828 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3830 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3830 */ NdrFcShort( 0x0 ), /* 0 */ /* 3832 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3834 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3834 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x3, /* 3 */ /* 3836 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ @@ -3736,14 +3743,13 @@ /* 3842 */ NdrFcShort( 0x0 ), /* 0 */ /* 3844 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter cellIndex */ + /* Parameter accessibleTable */ -/* 3846 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3846 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ /* 3848 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3850 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3850 */ NdrFcShort( 0x594 ), /* Type Offset=1428 */ - /* Parameter rowIndex */ + /* Parameter startingColumnIndex */ /* 3852 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3854 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ @@ -3757,217 +3763,217 @@ /* 3862 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_selectedChildren */ + /* Procedure get_rowIndex */ /* 3864 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3866 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3870 */ NdrFcShort( 0x13 ), /* 19 */ -/* 3872 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3870 */ NdrFcShort( 0x12 ), /* 18 */ +/* 3872 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 3874 */ NdrFcShort( 0x8 ), /* 8 */ /* 3876 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3878 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x4, /* 4 */ +/* 3878 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ /* 3880 */ 0xa, /* 10 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3882 */ NdrFcShort( 0x1 ), /* 1 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3882 */ NdrFcShort( 0x0 ), /* 0 */ /* 3884 */ NdrFcShort( 0x0 ), /* 0 */ /* 3886 */ NdrFcShort( 0x0 ), /* 0 */ /* 3888 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter maxChildren */ + /* Parameter cellIndex */ /* 3890 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3892 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ /* 3894 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter children */ + /* Parameter rowIndex */ -/* 3896 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3896 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3898 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3900 */ NdrFcShort( 0x590 ), /* Type Offset=1424 */ +/* 3900 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ - /* Parameter nChildren */ + /* Return value */ -/* 3902 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3902 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ /* 3904 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ /* 3906 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Procedure get_selectedChildren */ + +/* 3908 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3910 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3914 */ NdrFcShort( 0x13 ), /* 19 */ +/* 3916 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3918 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3920 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3922 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 3924 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3926 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3928 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3930 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3932 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter maxChildren */ + +/* 3934 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3936 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3938 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter children */ + +/* 3940 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3942 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3944 */ NdrFcShort( 0x5aa ), /* Type Offset=1450 */ + + /* Parameter nChildren */ + +/* 3946 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3948 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 3950 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Return value */ -/* 3908 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3910 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3912 */ 0x8, /* FC_LONG */ +/* 3952 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3954 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 3956 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_selectedColumns */ -/* 3914 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3958 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3916 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3920 */ NdrFcShort( 0x14 ), /* 20 */ -/* 3922 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 3924 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3926 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3928 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3960 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3964 */ NdrFcShort( 0x14 ), /* 20 */ +/* 3966 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 3968 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3970 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3972 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x4, /* 4 */ -/* 3930 */ 0xa, /* 10 */ +/* 3974 */ 0xa, /* 10 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3932 */ NdrFcShort( 0x1 ), /* 1 */ -/* 3934 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3936 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3938 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3976 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3978 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3980 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3982 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter maxColumns */ -/* 3940 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3942 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3944 */ 0x8, /* FC_LONG */ +/* 3984 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3986 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 3988 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter columns */ -/* 3946 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ -/* 3948 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 3950 */ NdrFcShort( 0x590 ), /* Type Offset=1424 */ +/* 3990 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3992 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 3994 */ NdrFcShort( 0x5aa ), /* Type Offset=1450 */ /* Parameter nColumns */ -/* 3952 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3954 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 3956 */ 0x8, /* FC_LONG */ +/* 3996 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3998 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4000 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 3958 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3960 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 3962 */ 0x8, /* FC_LONG */ +/* 4002 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4004 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4006 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_selectedRows */ -/* 3964 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4008 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3966 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3970 */ NdrFcShort( 0x15 ), /* 21 */ -/* 3972 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 3974 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3976 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3978 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 4010 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4014 */ NdrFcShort( 0x15 ), /* 21 */ +/* 4016 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 4018 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4020 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4022 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x4, /* 4 */ -/* 3980 */ 0xa, /* 10 */ +/* 4024 */ 0xa, /* 10 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3982 */ NdrFcShort( 0x1 ), /* 1 */ -/* 3984 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3986 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3988 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4026 */ NdrFcShort( 0x1 ), /* 1 */ +/* 4028 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4030 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4032 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter maxRows */ -/* 3990 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3992 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 3994 */ 0x8, /* FC_LONG */ +/* 4034 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4036 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4038 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter rows */ -/* 3996 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ -/* 3998 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4000 */ NdrFcShort( 0x590 ), /* Type Offset=1424 */ +/* 4040 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 4042 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4044 */ NdrFcShort( 0x5aa ), /* Type Offset=1450 */ /* Parameter nRows */ -/* 4002 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4004 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4006 */ 0x8, /* FC_LONG */ +/* 4046 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4048 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4050 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4008 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4010 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 4012 */ 0x8, /* FC_LONG */ +/* 4052 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4054 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4056 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_summary */ -/* 4014 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4058 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4016 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4020 */ NdrFcShort( 0x16 ), /* 22 */ -/* 4022 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4024 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4026 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4028 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 4060 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4064 */ NdrFcShort( 0x16 ), /* 22 */ +/* 4066 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4068 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4070 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4072 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 4030 */ 0xa, /* 10 */ +/* 4074 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4032 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4034 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4036 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4038 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4076 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4078 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4080 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4082 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter accessible */ -/* 4040 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 4042 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4044 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ - - /* Return value */ - -/* 4046 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4048 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4050 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_isColumnSelected */ - -/* 4052 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 4054 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4058 */ NdrFcShort( 0x17 ), /* 23 */ -/* 4060 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 4062 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4064 */ NdrFcShort( 0x21 ), /* 33 */ -/* 4066 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 4068 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 4070 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4072 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4074 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4076 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter column */ - -/* 4078 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4080 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4082 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter isSelected */ - -/* 4084 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4086 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4088 */ 0x3, /* FC_SMALL */ - 0x0, /* 0 */ +/* 4084 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 4086 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4088 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ /* 4090 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4092 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4092 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 4094 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isRowSelected */ + /* Procedure get_isColumnSelected */ /* 4096 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4098 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4102 */ NdrFcShort( 0x18 ), /* 24 */ +/* 4102 */ NdrFcShort( 0x17 ), /* 23 */ /* 4104 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 4106 */ NdrFcShort( 0x8 ), /* 8 */ /* 4108 */ NdrFcShort( 0x21 ), /* 33 */ @@ -3980,7 +3986,7 @@ /* 4118 */ NdrFcShort( 0x0 ), /* 0 */ /* 4120 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter row */ + /* Parameter column */ /* 4122 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 4124 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ @@ -4001,17 +4007,17 @@ /* 4138 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isSelected */ + /* Procedure get_isRowSelected */ /* 4140 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4142 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4146 */ NdrFcShort( 0x19 ), /* 25 */ -/* 4148 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 4150 */ NdrFcShort( 0x10 ), /* 16 */ +/* 4146 */ NdrFcShort( 0x18 ), /* 24 */ +/* 4148 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4150 */ NdrFcShort( 0x8 ), /* 8 */ /* 4152 */ NdrFcShort( 0x21 ), /* 33 */ /* 4154 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x4, /* 4 */ + 0x3, /* 3 */ /* 4156 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ /* 4158 */ NdrFcShort( 0x0 ), /* 0 */ @@ -4026,251 +4032,290 @@ /* 4170 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter column */ - -/* 4172 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4174 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4176 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - /* Parameter isSelected */ -/* 4178 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4180 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4182 */ 0x3, /* FC_SMALL */ +/* 4172 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4174 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4176 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 4184 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4186 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 4188 */ 0x8, /* FC_LONG */ +/* 4178 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4180 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4182 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isSelected */ + +/* 4184 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4186 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4190 */ NdrFcShort( 0x19 ), /* 25 */ +/* 4192 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 4194 */ NdrFcShort( 0x10 ), /* 16 */ +/* 4196 */ NdrFcShort( 0x21 ), /* 33 */ +/* 4198 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 4200 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4202 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4204 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4206 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4208 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 4210 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4212 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4214 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter column */ + +/* 4216 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4218 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4220 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter isSelected */ + +/* 4222 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4224 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4226 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4228 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4230 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4232 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure selectRow */ -/* 4190 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4234 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4192 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4196 */ NdrFcShort( 0x1a ), /* 26 */ -/* 4198 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4200 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4202 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4204 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4236 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4240 */ NdrFcShort( 0x1a ), /* 26 */ +/* 4242 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4244 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4246 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4248 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4206 */ 0xa, /* 10 */ +/* 4250 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4208 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4210 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4212 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4214 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4252 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4254 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4256 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4258 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter row */ -/* 4216 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4218 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4220 */ 0x8, /* FC_LONG */ +/* 4260 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4262 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4264 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4222 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4224 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4226 */ 0x8, /* FC_LONG */ +/* 4266 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4268 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4270 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure selectColumn */ -/* 4228 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4272 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4230 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4234 */ NdrFcShort( 0x1b ), /* 27 */ -/* 4236 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4238 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4240 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4242 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4274 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4278 */ NdrFcShort( 0x1b ), /* 27 */ +/* 4280 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4282 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4284 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4286 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4244 */ 0xa, /* 10 */ +/* 4288 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4246 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4248 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4250 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4252 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4290 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4292 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4294 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4296 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter column */ -/* 4254 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4256 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4258 */ 0x8, /* FC_LONG */ +/* 4298 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4300 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4302 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4260 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4262 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4264 */ 0x8, /* FC_LONG */ +/* 4304 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4306 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4308 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure unselectRow */ -/* 4266 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4310 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4268 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4272 */ NdrFcShort( 0x1c ), /* 28 */ -/* 4274 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4276 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4278 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4280 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4312 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4316 */ NdrFcShort( 0x1c ), /* 28 */ +/* 4318 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4320 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4322 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4324 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4282 */ 0xa, /* 10 */ +/* 4326 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4284 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4286 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4288 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4290 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4328 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4330 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4332 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4334 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter row */ -/* 4292 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4294 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4296 */ 0x8, /* FC_LONG */ +/* 4336 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4338 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4340 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4298 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4300 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4302 */ 0x8, /* FC_LONG */ +/* 4342 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4344 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4346 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure unselectColumn */ -/* 4304 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4348 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4306 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4310 */ NdrFcShort( 0x1d ), /* 29 */ -/* 4312 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4314 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4316 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4318 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4350 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4354 */ NdrFcShort( 0x1d ), /* 29 */ +/* 4356 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4358 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4360 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4362 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4320 */ 0xa, /* 10 */ +/* 4364 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4322 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4324 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4326 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4328 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4366 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4368 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4370 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4372 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter column */ -/* 4330 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4332 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4334 */ 0x8, /* FC_LONG */ +/* 4374 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4376 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4378 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4336 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4338 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4340 */ 0x8, /* FC_LONG */ +/* 4380 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4382 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4384 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_rowColumnExtentsAtIndex */ -/* 4342 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4386 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4344 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4348 */ NdrFcShort( 0x1e ), /* 30 */ -/* 4350 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */ -/* 4352 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4354 */ NdrFcShort( 0x91 ), /* 145 */ -/* 4356 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4388 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4392 */ NdrFcShort( 0x1e ), /* 30 */ +/* 4394 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */ +/* 4396 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4398 */ NdrFcShort( 0x91 ), /* 145 */ +/* 4400 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x7, /* 7 */ -/* 4358 */ 0xa, /* 10 */ +/* 4402 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4360 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4362 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4364 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4366 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4404 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4406 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4408 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4410 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter index */ -/* 4368 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4370 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4372 */ 0x8, /* FC_LONG */ +/* 4412 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4414 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4416 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter row */ -/* 4374 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4376 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4378 */ 0x8, /* FC_LONG */ +/* 4418 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4420 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4422 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter column */ -/* 4380 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4382 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4384 */ 0x8, /* FC_LONG */ +/* 4424 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4426 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4428 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter rowExtents */ -/* 4386 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4388 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 4390 */ 0x8, /* FC_LONG */ +/* 4430 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4432 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 4434 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter columnExtents */ -/* 4392 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4394 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 4396 */ 0x8, /* FC_LONG */ +/* 4436 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4438 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 4440 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter isSelected */ -/* 4398 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4400 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ -/* 4402 */ 0x3, /* FC_SMALL */ +/* 4442 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4444 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 4446 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 4404 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4406 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ -/* 4408 */ 0x8, /* FC_LONG */ +/* 4448 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4450 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 4452 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_modelChange */ -/* 4410 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4454 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4412 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4416 */ NdrFcShort( 0x1f ), /* 31 */ -/* 4418 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4420 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4422 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4424 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 4456 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4460 */ NdrFcShort( 0x1f ), /* 31 */ +/* 4462 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4464 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4466 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4468 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 4426 */ 0xa, /* 10 */ +/* 4470 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4428 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4430 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4432 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4434 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4472 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4474 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4476 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4478 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter modelChange */ -/* 4436 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 4438 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4440 */ NdrFcShort( 0x5ae ), /* Type Offset=1454 */ +/* 4480 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 4482 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4484 */ NdrFcShort( 0x5c8 ), /* Type Offset=1480 */ /* Return value */ -/* 4442 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4444 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4446 */ 0x8, /* FC_LONG */ +/* 4486 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4488 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4490 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_rowExtent */ @@ -4278,30 +4323,30 @@ /* Procedure get_nColumns */ -/* 4448 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4492 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4450 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4454 */ NdrFcShort( 0x6 ), /* 6 */ -/* 4456 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4458 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4460 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4462 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4494 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4498 */ NdrFcShort( 0x6 ), /* 6 */ +/* 4500 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4502 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4504 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4506 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4464 */ 0xa, /* 10 */ +/* 4508 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4466 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4468 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4470 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4472 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4510 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4512 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4514 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4516 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter nRowsSpanned */ /* Parameter columnCount */ -/* 4474 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4476 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4478 */ 0x8, /* FC_LONG */ +/* 4518 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4520 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4522 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -4309,9 +4354,9 @@ /* Return value */ -/* 4480 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4482 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4484 */ 0x8, /* FC_LONG */ +/* 4524 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4526 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4528 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_rowIndex */ @@ -4319,30 +4364,30 @@ /* Procedure get_nSelectedCells */ -/* 4486 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4530 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4488 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4492 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4494 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4496 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4498 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4500 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4532 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4536 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4538 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4540 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4542 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4544 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4502 */ 0xa, /* 10 */ +/* 4546 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4504 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4506 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4508 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4510 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4548 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4550 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4552 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4554 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter rowIndex */ /* Parameter cellCount */ -/* 4512 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4514 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4516 */ 0x8, /* FC_LONG */ +/* 4556 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4558 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4560 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -4350,90 +4395,52 @@ /* Return value */ -/* 4518 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4520 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4522 */ 0x8, /* FC_LONG */ +/* 4562 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4564 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4566 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nSelectedColumns */ -/* 4524 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4568 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4526 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4530 */ NdrFcShort( 0x9 ), /* 9 */ -/* 4532 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4534 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4536 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4538 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4570 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4574 */ NdrFcShort( 0x9 ), /* 9 */ +/* 4576 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4578 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4580 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4582 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4540 */ 0xa, /* 10 */ +/* 4584 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4542 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4544 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4546 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4548 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4586 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4588 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4590 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4592 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter columnCount */ -/* 4550 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4552 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4554 */ 0x8, /* FC_LONG */ +/* 4594 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4596 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4598 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4556 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4558 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4560 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_rowDescription */ - -/* 4562 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 4564 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4568 */ NdrFcShort( 0xb ), /* 11 */ -/* 4570 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 4572 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4574 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4576 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 4578 */ 0xa, /* 10 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 4580 */ NdrFcShort( 0x1 ), /* 1 */ -/* 4582 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4584 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4586 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter row */ - -/* 4588 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4590 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4592 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter description */ - -/* 4594 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 4596 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4598 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - - /* Return value */ - /* 4600 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4602 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4602 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 4604 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_selectedCells */ + /* Procedure get_rowDescription */ /* 4606 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4608 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4612 */ NdrFcShort( 0xc ), /* 12 */ +/* 4612 */ NdrFcShort( 0xb ), /* 11 */ /* 4614 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 4616 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4618 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4616 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4618 */ NdrFcShort( 0x8 ), /* 8 */ /* 4620 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x3, /* 3 */ /* 4622 */ 0xa, /* 10 */ @@ -4443,19 +4450,19 @@ /* 4628 */ NdrFcShort( 0x0 ), /* 0 */ /* 4630 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter cells */ + /* Parameter row */ -/* 4632 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 4632 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 4634 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4636 */ NdrFcShort( 0x5bc ), /* Type Offset=1468 */ - - /* Parameter nSelectedCells */ - -/* 4638 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4640 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4642 */ 0x8, /* FC_LONG */ +/* 4636 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Parameter description */ + +/* 4638 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 4640 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4642 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + /* Return value */ /* 4644 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ @@ -4463,12 +4470,12 @@ /* 4648 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_selectedColumns */ + /* Procedure get_selectedCells */ /* 4650 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4652 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4656 */ NdrFcShort( 0xd ), /* 13 */ +/* 4656 */ NdrFcShort( 0xc ), /* 12 */ /* 4658 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 4660 */ NdrFcShort( 0x0 ), /* 0 */ /* 4662 */ NdrFcShort( 0x24 ), /* 36 */ @@ -4481,13 +4488,13 @@ /* 4672 */ NdrFcShort( 0x0 ), /* 0 */ /* 4674 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter selectedColumns */ + /* Parameter cells */ /* 4676 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 4678 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4680 */ NdrFcShort( 0x5da ), /* Type Offset=1498 */ +/* 4680 */ NdrFcShort( 0x5d6 ), /* Type Offset=1494 */ - /* Parameter nColumns */ + /* Parameter nSelectedCells */ /* 4682 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 4684 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ @@ -4501,12 +4508,12 @@ /* 4692 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_selectedRows */ + /* Procedure get_selectedColumns */ /* 4694 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4696 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4700 */ NdrFcShort( 0xe ), /* 14 */ +/* 4700 */ NdrFcShort( 0xd ), /* 13 */ /* 4702 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 4704 */ NdrFcShort( 0x0 ), /* 0 */ /* 4706 */ NdrFcShort( 0x24 ), /* 36 */ @@ -4519,13 +4526,13 @@ /* 4716 */ NdrFcShort( 0x0 ), /* 0 */ /* 4718 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter selectedRows */ + /* Parameter selectedColumns */ /* 4720 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 4722 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4724 */ NdrFcShort( 0x5da ), /* Type Offset=1498 */ +/* 4724 */ NdrFcShort( 0x5f4 ), /* Type Offset=1524 */ - /* Parameter nRows */ + /* Parameter nColumns */ /* 4726 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 4728 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ @@ -4539,82 +4546,81 @@ /* 4736 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_summary */ + /* Procedure get_selectedRows */ /* 4738 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4740 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4744 */ NdrFcShort( 0xf ), /* 15 */ -/* 4746 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4744 */ NdrFcShort( 0xe ), /* 14 */ +/* 4746 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 4748 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4750 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4750 */ NdrFcShort( 0x24 ), /* 36 */ /* 4752 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 4754 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 4756 */ NdrFcShort( 0x0 ), /* 0 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 4756 */ NdrFcShort( 0x1 ), /* 1 */ /* 4758 */ NdrFcShort( 0x0 ), /* 0 */ /* 4760 */ NdrFcShort( 0x0 ), /* 0 */ /* 4762 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter accessible */ + /* Parameter selectedRows */ -/* 4764 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 4764 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 4766 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4768 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 4768 */ NdrFcShort( 0x5f4 ), /* Type Offset=1524 */ - /* Return value */ + /* Parameter nRows */ -/* 4770 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4770 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 4772 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 4774 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isColumnSelected */ + /* Return value */ -/* 4776 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4776 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4778 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4780 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_summary */ + +/* 4782 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4778 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4782 */ NdrFcShort( 0x10 ), /* 16 */ -/* 4784 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 4786 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4788 */ NdrFcShort( 0x21 ), /* 33 */ -/* 4790 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 4792 */ 0xa, /* 10 */ +/* 4784 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4788 */ NdrFcShort( 0xf ), /* 15 */ +/* 4790 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4792 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4794 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4796 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 4798 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4794 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4796 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4798 */ NdrFcShort( 0x0 ), /* 0 */ /* 4800 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4802 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4804 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4806 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter column */ + /* Parameter accessible */ -/* 4802 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4804 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4806 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter isSelected */ - -/* 4808 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4810 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4812 */ 0x3, /* FC_SMALL */ - 0x0, /* 0 */ +/* 4808 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 4810 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4812 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ /* 4814 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4816 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4816 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 4818 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isRowSelected */ + /* Procedure get_isColumnSelected */ /* 4820 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4822 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4826 */ NdrFcShort( 0x11 ), /* 17 */ +/* 4826 */ NdrFcShort( 0x10 ), /* 16 */ /* 4828 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 4830 */ NdrFcShort( 0x8 ), /* 8 */ /* 4832 */ NdrFcShort( 0x21 ), /* 33 */ @@ -4627,7 +4633,7 @@ /* 4842 */ NdrFcShort( 0x0 ), /* 0 */ /* 4844 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter row */ + /* Parameter column */ /* 4846 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 4848 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ @@ -4648,17 +4654,17 @@ /* 4862 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure selectRow */ + /* Procedure get_isRowSelected */ /* 4864 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4866 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4870 */ NdrFcShort( 0x12 ), /* 18 */ -/* 4872 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4870 */ NdrFcShort( 0x11 ), /* 17 */ +/* 4872 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 4874 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4876 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4876 */ NdrFcShort( 0x21 ), /* 33 */ /* 4878 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 4880 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ /* 4882 */ NdrFcShort( 0x0 ), /* 0 */ @@ -4673,184 +4679,185 @@ /* 4894 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Parameter isSelected */ + +/* 4896 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4898 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4900 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + /* Return value */ -/* 4896 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4898 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4900 */ 0x8, /* FC_LONG */ +/* 4902 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4904 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4906 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure selectRow */ + +/* 4908 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4910 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4914 */ NdrFcShort( 0x12 ), /* 18 */ +/* 4916 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4918 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4920 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4922 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4924 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4926 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4928 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4930 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4932 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 4934 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4936 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4938 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4940 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4942 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4944 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure selectColumn */ -/* 4902 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4946 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4904 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4908 */ NdrFcShort( 0x13 ), /* 19 */ -/* 4910 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4912 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4914 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4916 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4948 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4952 */ NdrFcShort( 0x13 ), /* 19 */ +/* 4954 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4956 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4958 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4960 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4918 */ 0xa, /* 10 */ +/* 4962 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4920 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4922 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4924 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4926 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4964 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4966 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4968 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4970 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter column */ -/* 4928 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4930 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4932 */ 0x8, /* FC_LONG */ +/* 4972 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4974 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 4976 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4934 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4936 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4938 */ 0x8, /* FC_LONG */ +/* 4978 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4980 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 4982 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure unselectRow */ -/* 4940 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4984 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4942 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4946 */ NdrFcShort( 0x14 ), /* 20 */ -/* 4948 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4950 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4952 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4954 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4986 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4990 */ NdrFcShort( 0x14 ), /* 20 */ +/* 4992 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 4994 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4996 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4998 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4956 */ 0xa, /* 10 */ +/* 5000 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4958 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4960 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4962 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4964 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5002 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5004 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5006 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5008 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter row */ -/* 4966 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4968 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 4970 */ 0x8, /* FC_LONG */ +/* 5010 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 5012 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5014 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4972 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4974 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 4976 */ 0x8, /* FC_LONG */ +/* 5016 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5018 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5020 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure unselectColumn */ -/* 4978 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5022 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4980 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4984 */ NdrFcShort( 0x15 ), /* 21 */ -/* 4986 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 4988 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4990 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4992 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 5024 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5028 */ NdrFcShort( 0x15 ), /* 21 */ +/* 5030 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5032 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5034 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5036 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4994 */ 0xa, /* 10 */ +/* 5038 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4996 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4998 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5000 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5002 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5040 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5042 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5044 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5046 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter column */ -/* 5004 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 5006 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 5008 */ 0x8, /* FC_LONG */ +/* 5048 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 5050 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5052 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 5010 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5012 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 5014 */ 0x8, /* FC_LONG */ +/* 5054 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5056 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5058 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_modelChange */ -/* 5016 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5060 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5018 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5022 */ NdrFcShort( 0x16 ), /* 22 */ -/* 5024 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 5026 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5028 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5030 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 5062 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5066 */ NdrFcShort( 0x16 ), /* 22 */ +/* 5068 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5070 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5072 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5074 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 5032 */ 0xa, /* 10 */ +/* 5076 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5034 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5036 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5038 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5040 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5078 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5080 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5082 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5084 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter modelChange */ -/* 5042 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 5044 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 5046 */ NdrFcShort( 0x5ae ), /* Type Offset=1454 */ - - /* Return value */ - -/* 5048 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5050 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 5052 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_columnHeaderCells */ - -/* 5054 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 5056 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5060 */ NdrFcShort( 0x4 ), /* 4 */ -/* 5062 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 5064 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5066 */ NdrFcShort( 0x24 ), /* 36 */ -/* 5068 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 5070 */ 0xa, /* 10 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 5072 */ NdrFcShort( 0x1 ), /* 1 */ -/* 5074 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5076 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5078 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter cellAccessibles */ - -/* 5080 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ -/* 5082 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 5084 */ NdrFcShort( 0x5bc ), /* Type Offset=1468 */ - - /* Parameter nColumnHeaderCells */ - -/* 5086 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5088 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 5090 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 5086 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 5088 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5090 */ NdrFcShort( 0x5c8 ), /* Type Offset=1480 */ /* Return value */ /* 5092 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5094 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5094 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 5096 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowHeaderCells */ + /* Procedure get_columnHeaderCells */ /* 5098 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5100 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5104 */ NdrFcShort( 0x7 ), /* 7 */ +/* 5104 */ NdrFcShort( 0x4 ), /* 4 */ /* 5106 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 5108 */ NdrFcShort( 0x0 ), /* 0 */ /* 5110 */ NdrFcShort( 0x24 ), /* 36 */ @@ -4867,9 +4874,9 @@ /* 5124 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 5126 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 5128 */ NdrFcShort( 0x5bc ), /* Type Offset=1468 */ +/* 5128 */ NdrFcShort( 0x5d6 ), /* Type Offset=1494 */ - /* Parameter nRowHeaderCells */ + /* Parameter nColumnHeaderCells */ /* 5130 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5132 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ @@ -4883,305 +4890,343 @@ /* 5140 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isSelected */ + /* Procedure get_rowHeaderCells */ /* 5142 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5144 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5148 */ NdrFcShort( 0x9 ), /* 9 */ -/* 5150 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5148 */ NdrFcShort( 0x7 ), /* 7 */ +/* 5150 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 5152 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5154 */ NdrFcShort( 0x21 ), /* 33 */ -/* 5156 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ +/* 5154 */ NdrFcShort( 0x24 ), /* 36 */ +/* 5156 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ /* 5158 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 5160 */ NdrFcShort( 0x0 ), /* 0 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 5160 */ NdrFcShort( 0x1 ), /* 1 */ /* 5162 */ NdrFcShort( 0x0 ), /* 0 */ /* 5164 */ NdrFcShort( 0x0 ), /* 0 */ /* 5166 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter isSelected */ + /* Parameter cellAccessibles */ -/* 5168 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5168 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 5170 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 5172 */ 0x3, /* FC_SMALL */ - 0x0, /* 0 */ +/* 5172 */ NdrFcShort( 0x5d6 ), /* Type Offset=1494 */ - /* Return value */ + /* Parameter nRowHeaderCells */ -/* 5174 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5174 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5176 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 5178 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Return value */ + +/* 5180 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5182 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5184 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isSelected */ + +/* 5186 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5188 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5192 */ NdrFcShort( 0x9 ), /* 9 */ +/* 5194 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5196 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5198 */ NdrFcShort( 0x21 ), /* 33 */ +/* 5200 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 5202 */ 0xa, /* 10 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5204 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5206 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5208 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5210 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter isSelected */ + +/* 5212 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5214 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5216 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 5218 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5220 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5222 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure get_rowColumnExtents */ -/* 5180 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5224 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5182 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5186 */ NdrFcShort( 0xa ), /* 10 */ -/* 5188 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ -/* 5190 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5192 */ NdrFcShort( 0x91 ), /* 145 */ -/* 5194 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 5226 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5230 */ NdrFcShort( 0xa ), /* 10 */ +/* 5232 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */ +/* 5234 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5236 */ NdrFcShort( 0x91 ), /* 145 */ +/* 5238 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x6, /* 6 */ -/* 5196 */ 0xa, /* 10 */ +/* 5240 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5198 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5200 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5202 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5204 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5242 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5244 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5246 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5248 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter row */ -/* 5206 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5208 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 5210 */ 0x8, /* FC_LONG */ +/* 5250 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5252 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5254 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter column */ -/* 5212 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5214 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 5216 */ 0x8, /* FC_LONG */ +/* 5256 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5258 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5260 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter rowExtents */ -/* 5218 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5220 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 5222 */ 0x8, /* FC_LONG */ +/* 5262 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5264 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5266 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter columnExtents */ -/* 5224 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5226 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 5228 */ 0x8, /* FC_LONG */ +/* 5268 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5270 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ +/* 5272 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter isSelected */ -/* 5230 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5232 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 5234 */ 0x3, /* FC_SMALL */ +/* 5274 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5276 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 5278 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 5236 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5238 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ -/* 5240 */ 0x8, /* FC_LONG */ +/* 5280 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5282 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */ +/* 5284 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_table */ -/* 5242 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5286 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5244 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5248 */ NdrFcShort( 0xb ), /* 11 */ -/* 5250 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 5252 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5254 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5256 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 5288 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5292 */ NdrFcShort( 0xb ), /* 11 */ +/* 5294 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5296 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5298 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5300 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 5258 */ 0xa, /* 10 */ +/* 5302 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5260 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5262 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5264 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5266 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5304 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5306 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5308 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5310 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter table */ -/* 5268 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 5270 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 5272 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 5312 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 5314 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5316 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ -/* 5274 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5276 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 5278 */ 0x8, /* FC_LONG */ +/* 5318 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5320 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5322 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_imagePosition */ -/* 5280 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5324 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5282 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5286 */ NdrFcShort( 0x4 ), /* 4 */ -/* 5288 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ -/* 5290 */ NdrFcShort( 0x6 ), /* 6 */ -/* 5292 */ NdrFcShort( 0x40 ), /* 64 */ -/* 5294 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 5326 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5330 */ NdrFcShort( 0x4 ), /* 4 */ +/* 5332 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */ +/* 5334 */ NdrFcShort( 0x6 ), /* 6 */ +/* 5336 */ NdrFcShort( 0x40 ), /* 64 */ +/* 5338 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 5296 */ 0xa, /* 10 */ +/* 5340 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5298 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5300 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5302 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5304 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5342 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5344 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5346 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5348 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter coordinateType */ -/* 5306 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 5308 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 5310 */ 0xd, /* FC_ENUM16 */ +/* 5350 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 5352 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5354 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter x */ -/* 5312 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5314 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 5316 */ 0x8, /* FC_LONG */ +/* 5356 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5358 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5360 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter y */ -/* 5318 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5320 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 5322 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Return value */ - -/* 5324 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5326 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 5328 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_imageSize */ - -/* 5330 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 5332 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5336 */ NdrFcShort( 0x5 ), /* 5 */ -/* 5338 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ -/* 5340 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5342 */ NdrFcShort( 0x40 ), /* 64 */ -/* 5344 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 5346 */ 0xa, /* 10 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 5348 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5350 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5352 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5354 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter height */ - -/* 5356 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5358 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 5360 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter width */ - /* 5362 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5364 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5364 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ /* 5366 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ /* 5368 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5370 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5370 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 5372 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_toolkitName */ + /* Procedure get_imageSize */ /* 5374 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5376 */ NdrFcLong( 0x0 ), /* 0 */ /* 5380 */ NdrFcShort( 0x5 ), /* 5 */ -/* 5382 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5382 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */ /* 5384 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5386 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5388 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x2, /* 2 */ +/* 5386 */ NdrFcShort( 0x40 ), /* 64 */ +/* 5388 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ /* 5390 */ 0xa, /* 10 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 5392 */ NdrFcShort( 0x1 ), /* 1 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5392 */ NdrFcShort( 0x0 ), /* 0 */ /* 5394 */ NdrFcShort( 0x0 ), /* 0 */ /* 5396 */ NdrFcShort( 0x0 ), /* 0 */ /* 5398 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter name */ + /* Parameter height */ -/* 5400 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 5400 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5402 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 5404 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 5404 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ - /* Return value */ + /* Parameter width */ -/* 5406 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5406 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5408 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ /* 5410 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_toolkitVersion */ + /* Return value */ -/* 5412 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5412 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5414 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5416 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_toolkitName */ + +/* 5418 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5414 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5418 */ NdrFcShort( 0x6 ), /* 6 */ -/* 5420 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 5422 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5424 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5426 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 5420 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5424 */ NdrFcShort( 0x5 ), /* 5 */ +/* 5426 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5428 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5430 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5432 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 5428 */ 0xa, /* 10 */ +/* 5434 */ 0xa, /* 10 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 5430 */ NdrFcShort( 0x1 ), /* 1 */ -/* 5432 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5434 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5436 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5436 */ NdrFcShort( 0x1 ), /* 1 */ +/* 5438 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5440 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5442 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter version */ + /* Parameter name */ -/* 5438 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 5440 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 5442 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 5444 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 5446 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5448 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 5444 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5446 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 5448 */ 0x8, /* FC_LONG */ +/* 5450 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5452 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5454 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_toolkitVersion */ + +/* 5456 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5458 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5462 */ NdrFcShort( 0x6 ), /* 6 */ +/* 5464 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5466 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5468 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5470 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 5472 */ 0xa, /* 10 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 5474 */ NdrFcShort( 0x1 ), /* 1 */ +/* 5476 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5478 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5480 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter version */ + +/* 5482 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 5484 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5486 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 5488 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5490 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5492 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_anchorTarget */ -/* 5450 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5494 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5452 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5456 */ NdrFcShort( 0x3 ), /* 3 */ -/* 5458 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 5460 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5462 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5464 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 5496 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5500 */ NdrFcShort( 0x3 ), /* 3 */ +/* 5502 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 5504 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5506 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5508 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 5466 */ 0xa, /* 10 */ +/* 5510 */ 0xa, /* 10 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5468 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5470 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5472 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5474 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5512 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5514 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5516 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5518 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter accessible */ -/* 5476 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 5478 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 5480 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 5520 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 5522 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 5524 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ -/* 5482 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5484 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 5486 */ 0x8, /* FC_LONG */ +/* 5526 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5528 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 5530 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ 0x0 @@ -6053,165 +6098,183 @@ 0x5b, /* FC_END */ /* 1304 */ 0x11, 0x0, /* FC_RP */ -/* 1306 */ NdrFcShort( 0x6 ), /* Offset= 6 (1312) */ +/* 1306 */ NdrFcShort( 0x2 ), /* Offset= 2 (1308) */ /* 1308 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 1310 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1312 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 1314 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1316 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1318 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 1322 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1324 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1326 */ NdrFcShort( 0xffbe ), /* Offset= -66 (1260) */ +/* 1328 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1330 */ + 0x11, 0x0, /* FC_RP */ +/* 1332 */ NdrFcShort( 0x6 ), /* Offset= 6 (1338) */ +/* 1334 */ 0x12, 0x0, /* FC_UP */ -/* 1310 */ NdrFcShort( 0xff8a ), /* Offset= -118 (1192) */ -/* 1312 */ 0xb4, /* FC_USER_MARSHAL */ +/* 1336 */ NdrFcShort( 0xff70 ), /* Offset= -144 (1192) */ +/* 1338 */ 0xb4, /* FC_USER_MARSHAL */ 0x83, /* 131 */ -/* 1314 */ NdrFcShort( 0x2 ), /* 2 */ -/* 1316 */ NdrFcShort( 0x18 ), /* 24 */ -/* 1318 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1320 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1308) */ -/* 1322 */ +/* 1340 */ NdrFcShort( 0x2 ), /* 2 */ +/* 1342 */ NdrFcShort( 0x18 ), /* 24 */ +/* 1344 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1346 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1334) */ +/* 1348 */ 0x11, 0x4, /* FC_RP [alloced_on_stack] */ -/* 1324 */ NdrFcShort( 0x2 ), /* Offset= 2 (1326) */ -/* 1326 */ +/* 1350 */ NdrFcShort( 0x2 ), /* Offset= 2 (1352) */ +/* 1352 */ 0x1a, /* FC_BOGUS_STRUCT */ 0x3, /* 3 */ -/* 1328 */ NdrFcShort( 0x10 ), /* 16 */ -/* 1330 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1332 */ NdrFcShort( 0x0 ), /* Offset= 0 (1332) */ -/* 1334 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 1354 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1356 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1358 */ NdrFcShort( 0x0 ), /* Offset= 0 (1358) */ +/* 1360 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ 0x0, /* 0 */ -/* 1336 */ NdrFcShort( 0xfae8 ), /* Offset= -1304 (32) */ -/* 1338 */ 0x8, /* FC_LONG */ +/* 1362 */ NdrFcShort( 0xface ), /* Offset= -1330 (32) */ +/* 1364 */ 0x8, /* FC_LONG */ 0x8, /* FC_LONG */ -/* 1340 */ 0x5c, /* FC_PAD */ +/* 1366 */ 0x5c, /* FC_PAD */ 0x5b, /* FC_END */ -/* 1342 */ +/* 1368 */ 0x11, 0x0, /* FC_RP */ -/* 1344 */ NdrFcShort( 0xfbce ), /* Offset= -1074 (270) */ -/* 1346 */ - 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ -/* 1348 */ 0x3, /* FC_SMALL */ - 0x5c, /* FC_PAD */ -/* 1350 */ - 0x11, 0x10, /* FC_RP [pointer_deref] */ -/* 1352 */ NdrFcShort( 0x2 ), /* Offset= 2 (1354) */ -/* 1354 */ - 0x2f, /* FC_IP */ - 0x5a, /* FC_CONSTANT_IID */ -/* 1356 */ NdrFcLong( 0x1c20f2b ), /* 29495083 */ -/* 1360 */ NdrFcShort( 0x3dd2 ), /* 15826 */ -/* 1362 */ NdrFcShort( 0x400f ), /* 16399 */ -/* 1364 */ 0x94, /* 148 */ - 0x9f, /* 159 */ -/* 1366 */ 0xad, /* 173 */ - 0x0, /* 0 */ -/* 1368 */ 0xbd, /* 189 */ - 0xab, /* 171 */ -/* 1370 */ 0x1d, /* 29 */ - 0x41, /* 65 */ +/* 1370 */ NdrFcShort( 0xfbb4 ), /* Offset= -1100 (270) */ /* 1372 */ - 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ -/* 1374 */ NdrFcShort( 0x2 ), /* Offset= 2 (1376) */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 1374 */ 0x3, /* FC_SMALL */ + 0x5c, /* FC_PAD */ /* 1376 */ - 0x13, 0x0, /* FC_OP */ + 0x11, 0x10, /* FC_RP [pointer_deref] */ /* 1378 */ NdrFcShort( 0x2 ), /* Offset= 2 (1380) */ /* 1380 */ - 0x21, /* FC_BOGUS_ARRAY */ - 0x3, /* 3 */ -/* 1382 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1384 */ 0x28, /* Corr desc: parameter, FC_LONG */ - 0x54, /* FC_DEREFERENCE */ -/* 1386 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1388 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1390 */ NdrFcLong( 0xffffffff ), /* -1 */ -/* 1394 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1396 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ - 0x0, /* 0 */ -/* 1398 */ NdrFcShort( 0xffd4 ), /* Offset= -44 (1354) */ -/* 1400 */ 0x5c, /* FC_PAD */ - 0x5b, /* FC_END */ -/* 1402 */ - 0x11, 0x10, /* FC_RP [pointer_deref] */ -/* 1404 */ NdrFcShort( 0x2 ), /* Offset= 2 (1406) */ -/* 1406 */ 0x2f, /* FC_IP */ 0x5a, /* FC_CONSTANT_IID */ -/* 1408 */ NdrFcLong( 0x35ad8070 ), /* 900563056 */ -/* 1412 */ NdrFcShort( 0xc20c ), /* -15860 */ -/* 1414 */ NdrFcShort( 0x4fb4 ), /* 20404 */ -/* 1416 */ 0xb0, /* 176 */ - 0x94, /* 148 */ -/* 1418 */ 0xf4, /* 244 */ - 0xf7, /* 247 */ -/* 1420 */ 0x27, /* 39 */ - 0x5d, /* 93 */ -/* 1422 */ 0xd4, /* 212 */ - 0x69, /* 105 */ -/* 1424 */ +/* 1382 */ NdrFcLong( 0x1c20f2b ), /* 29495083 */ +/* 1386 */ NdrFcShort( 0x3dd2 ), /* 15826 */ +/* 1388 */ NdrFcShort( 0x400f ), /* 16399 */ +/* 1390 */ 0x94, /* 148 */ + 0x9f, /* 159 */ +/* 1392 */ 0xad, /* 173 */ + 0x0, /* 0 */ +/* 1394 */ 0xbd, /* 189 */ + 0xab, /* 171 */ +/* 1396 */ 0x1d, /* 29 */ + 0x41, /* 65 */ +/* 1398 */ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ -/* 1426 */ NdrFcShort( 0x2 ), /* Offset= 2 (1428) */ -/* 1428 */ +/* 1400 */ NdrFcShort( 0x2 ), /* Offset= 2 (1402) */ +/* 1402 */ 0x13, 0x0, /* FC_OP */ -/* 1430 */ NdrFcShort( 0x2 ), /* Offset= 2 (1432) */ -/* 1432 */ - 0x1c, /* FC_CVARRAY */ - 0x3, /* 3 */ -/* 1434 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1436 */ 0x28, /* Corr desc: parameter, FC_LONG */ - 0x0, /* */ -/* 1438 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ -/* 1440 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ -/* 1442 */ 0x28, /* Corr desc: parameter, FC_LONG */ - 0x54, /* FC_DEREFERENCE */ -/* 1444 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ -/* 1446 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1448 */ 0x8, /* FC_LONG */ - 0x5b, /* FC_END */ -/* 1450 */ - 0x11, 0x4, /* FC_RP [alloced_on_stack] */ -/* 1452 */ NdrFcShort( 0x2 ), /* Offset= 2 (1454) */ -/* 1454 */ - 0x1a, /* FC_BOGUS_STRUCT */ - 0x3, /* 3 */ -/* 1456 */ NdrFcShort( 0x14 ), /* 20 */ -/* 1458 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1460 */ NdrFcShort( 0x0 ), /* Offset= 0 (1460) */ -/* 1462 */ 0xd, /* FC_ENUM16 */ - 0x8, /* FC_LONG */ -/* 1464 */ 0x8, /* FC_LONG */ - 0x8, /* FC_LONG */ -/* 1466 */ 0x8, /* FC_LONG */ - 0x5b, /* FC_END */ -/* 1468 */ - 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ -/* 1470 */ NdrFcShort( 0x2 ), /* Offset= 2 (1472) */ -/* 1472 */ - 0x13, 0x0, /* FC_OP */ -/* 1474 */ NdrFcShort( 0x2 ), /* Offset= 2 (1476) */ -/* 1476 */ +/* 1404 */ NdrFcShort( 0x2 ), /* Offset= 2 (1406) */ +/* 1406 */ 0x21, /* FC_BOGUS_ARRAY */ 0x3, /* 3 */ -/* 1478 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1480 */ 0x28, /* Corr desc: parameter, FC_LONG */ +/* 1408 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1410 */ 0x28, /* Corr desc: parameter, FC_LONG */ 0x54, /* FC_DEREFERENCE */ -/* 1482 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1484 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1486 */ NdrFcLong( 0xffffffff ), /* -1 */ -/* 1490 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1492 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 1412 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1414 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1416 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 1420 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1422 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ 0x0, /* 0 */ -/* 1494 */ NdrFcShort( 0xfa5c ), /* Offset= -1444 (50) */ -/* 1496 */ 0x5c, /* FC_PAD */ +/* 1424 */ NdrFcShort( 0xffd4 ), /* Offset= -44 (1380) */ +/* 1426 */ 0x5c, /* FC_PAD */ 0x5b, /* FC_END */ -/* 1498 */ +/* 1428 */ + 0x11, 0x10, /* FC_RP [pointer_deref] */ +/* 1430 */ NdrFcShort( 0x2 ), /* Offset= 2 (1432) */ +/* 1432 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 1434 */ NdrFcLong( 0x35ad8070 ), /* 900563056 */ +/* 1438 */ NdrFcShort( 0xc20c ), /* -15860 */ +/* 1440 */ NdrFcShort( 0x4fb4 ), /* 20404 */ +/* 1442 */ 0xb0, /* 176 */ + 0x94, /* 148 */ +/* 1444 */ 0xf4, /* 244 */ + 0xf7, /* 247 */ +/* 1446 */ 0x27, /* 39 */ + 0x5d, /* 93 */ +/* 1448 */ 0xd4, /* 212 */ + 0x69, /* 105 */ +/* 1450 */ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1452 */ NdrFcShort( 0x2 ), /* Offset= 2 (1454) */ +/* 1454 */ + 0x13, 0x0, /* FC_OP */ +/* 1456 */ NdrFcShort( 0x2 ), /* Offset= 2 (1458) */ +/* 1458 */ + 0x1c, /* FC_CVARRAY */ + 0x3, /* 3 */ +/* 1460 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1462 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 1464 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */ +/* 1466 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1468 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 1470 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */ +/* 1472 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1474 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 1476 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 1478 */ NdrFcShort( 0x2 ), /* Offset= 2 (1480) */ +/* 1480 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 1482 */ NdrFcShort( 0x14 ), /* 20 */ +/* 1484 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1486 */ NdrFcShort( 0x0 ), /* Offset= 0 (1486) */ +/* 1488 */ 0xd, /* FC_ENUM16 */ + 0x8, /* FC_LONG */ +/* 1490 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 1492 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 1494 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1496 */ NdrFcShort( 0x2 ), /* Offset= 2 (1498) */ +/* 1498 */ + 0x13, 0x0, /* FC_OP */ /* 1500 */ NdrFcShort( 0x2 ), /* Offset= 2 (1502) */ /* 1502 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 1504 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1506 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 1508 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1510 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1512 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 1516 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1518 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1520 */ NdrFcShort( 0xfa42 ), /* Offset= -1470 (50) */ +/* 1522 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1524 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1526 */ NdrFcShort( 0x2 ), /* Offset= 2 (1528) */ +/* 1528 */ 0x13, 0x0, /* FC_OP */ -/* 1504 */ NdrFcShort( 0x2 ), /* Offset= 2 (1506) */ -/* 1506 */ +/* 1530 */ NdrFcShort( 0x2 ), /* Offset= 2 (1532) */ +/* 1532 */ 0x1b, /* FC_CARRAY */ 0x3, /* 3 */ -/* 1508 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1510 */ 0x28, /* Corr desc: parameter, FC_LONG */ +/* 1534 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1536 */ 0x28, /* Corr desc: parameter, FC_LONG */ 0x54, /* FC_DEREFERENCE */ -/* 1512 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ -/* 1514 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1516 */ 0x8, /* FC_LONG */ +/* 1538 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */ +/* 1540 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1542 */ 0x8, /* FC_LONG */ 0x5b, /* FC_END */ 0x0 @@ -6957,7 +7020,204 @@ }; -/* Standard interface: __MIDL_itf_ia2_api_all_0000_0005, ver. 0.0, +/* Object interface: IAccessible2_4, ver. 0.0, + GUID={0x610a7bec,0x91bb,0x444d,{0xa3,0x36,0xa0,0xda,0xf1,0x3c,0x4c,0x29}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessible2_4_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 472, + 510, + 554, + 604, + 642, + 680, + 730, + 780, + 818, + 856, + 894, + 932, + 982, + 1032, + 1070, + 1108, + 1146, + 1184, + 1222, + 1266, + 1310, + 1366, + 1410 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessible2_4_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessible2_4_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessible2_4_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessible2_4_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(51) _IAccessible2_4ProxyVtbl = +{ + &IAccessible2_4_ProxyInfo, + &IID_IAccessible2_4, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + 0 /* IAccessible::get_accParent */ , + 0 /* IAccessible::get_accChildCount */ , + 0 /* IAccessible::get_accChild */ , + 0 /* IAccessible::get_accName */ , + 0 /* IAccessible::get_accValue */ , + 0 /* IAccessible::get_accDescription */ , + 0 /* IAccessible::get_accRole */ , + 0 /* IAccessible::get_accState */ , + 0 /* IAccessible::get_accHelp */ , + 0 /* IAccessible::get_accHelpTopic */ , + 0 /* IAccessible::get_accKeyboardShortcut */ , + 0 /* IAccessible::get_accFocus */ , + 0 /* IAccessible::get_accSelection */ , + 0 /* IAccessible::get_accDefaultAction */ , + 0 /* IAccessible::accSelect */ , + 0 /* IAccessible::accLocation */ , + 0 /* IAccessible::accNavigate */ , + 0 /* IAccessible::accHitTest */ , + 0 /* IAccessible::accDoDefaultAction */ , + 0 /* IAccessible::put_accName */ , + 0 /* IAccessible::put_accValue */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ , + (void *) (INT_PTR) -1 /* IAccessible2::role */ , + (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ , + (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_states */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */ , + (void *) (INT_PTR) -1 /* IAccessible2_2::get_attribute */ , + (void *) (INT_PTR) -1 /* IAccessible2_2::get_accessibleWithCaret */ , + (void *) (INT_PTR) -1 /* IAccessible2_2::get_relationTargetsOfType */ , + (void *) (INT_PTR) -1 /* IAccessible2_3::get_selectionRanges */ , + (void *) (INT_PTR) -1 /* IAccessible2_4::setSelectionRanges */ +}; + + +static const PRPC_STUB_FUNCTION IAccessible2_4_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAccessible2_4StubVtbl = +{ + &IID_IAccessible2_4, + &IAccessible2_4_ServerInfo, + 51, + &IAccessible2_4_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0006, ver. 0.0, GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ @@ -6967,8 +7227,8 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleComponent_FormatStringOffsetTable[] = { - 1410, 1454, + 1498, 76 }; @@ -7021,10 +7281,10 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleValue_FormatStringOffsetTable[] = { - 1492, - 1530, - 1568, - 1606 + 1536, + 1574, + 1612, + 1650 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo = @@ -7071,7 +7331,7 @@ }; -/* Standard interface: __MIDL_itf_ia2_api_all_0000_0007, ver. 0.0, +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0008, ver. 0.0, GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ @@ -7081,25 +7341,25 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleText_FormatStringOffsetTable[] = { - 1644, 1688, + 1732, 76, - 1744, - 1812, - 1850, - 1906, - 1956, - 2006, - 2068, - 2130, - 2192, - 2230, - 2268, - 2318, - 2356, - 2406, - 2468, - 2506 + 1788, + 1856, + 1894, + 1950, + 2000, + 2050, + 2112, + 2174, + 2236, + 2274, + 2312, + 2362, + 2400, + 2450, + 2512, + 2550 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo = @@ -7167,26 +7427,26 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleText2_FormatStringOffsetTable[] = { - 1644, 1688, + 1732, 76, - 1744, - 1812, - 1850, - 1906, - 1956, - 2006, - 2068, - 2130, - 2192, - 2230, - 2268, - 2318, - 2356, - 2406, - 2468, - 2506, - 2544 + 1788, + 1856, + 1894, + 1950, + 2000, + 2050, + 2112, + 2174, + 2236, + 2274, + 2312, + 2362, + 2400, + 2450, + 2512, + 2550, + 2588 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleText2_ProxyInfo = @@ -7255,13 +7515,13 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleEditableText_FormatStringOffsetTable[] = { - 1644, - 2606, + 1688, 2650, 2694, 2738, - 2776, - 2826 + 2782, + 2820, + 2870 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo = @@ -7323,11 +7583,11 @@ 328, 384, 428, - 2876, 2920, 2964, - 3002, - 3040 + 3008, + 3046, + 3084 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo = @@ -7387,28 +7647,28 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleHypertext_FormatStringOffsetTable[] = { - 1644, 1688, + 1732, 76, - 1744, - 1812, - 1850, - 1906, - 1956, - 2006, - 2068, - 2130, - 2192, - 2230, - 2268, - 2318, - 2356, - 2406, - 2468, - 2506, - 3078, - 3116, - 3160 + 1788, + 1856, + 1894, + 1950, + 2000, + 2050, + 2112, + 2174, + 2236, + 2274, + 2312, + 2362, + 2400, + 2450, + 2512, + 2550, + 3122, + 3160, + 3204 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo = @@ -7479,29 +7739,29 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleHypertext2_FormatStringOffsetTable[] = { - 1644, 1688, + 1732, 76, - 1744, - 1812, - 1850, - 1906, - 1956, - 2006, - 2068, - 2130, - 2192, - 2230, - 2268, - 2318, - 2356, - 2406, - 2468, - 2506, - 3078, - 3116, + 1788, + 1856, + 1894, + 1950, + 2000, + 2050, + 2112, + 2174, + 2236, + 2274, + 2312, + 2362, + 2400, + 2450, + 2512, + 2550, + 3122, 3160, - 3204 + 3204, + 3248 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext2_ProxyInfo = @@ -7573,35 +7833,35 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleTable_FormatStringOffsetTable[] = { - 3248, - 3298, - 3336, - 3386, + 3292, + 3342, + 3380, 3430, - 3480, + 3474, 3524, 3568, - 2964, - 3002, - 3606, - 3644, - 3682, + 3612, + 3008, + 3046, + 3650, + 3688, 3726, - 3776, + 3770, 3820, 3864, - 3914, - 3964, - 4014, - 4052, + 3908, + 3958, + 4008, + 4058, 4096, 4140, - 4190, - 4228, - 4266, - 4304, - 4342, - 4410 + 4184, + 4234, + 4272, + 4310, + 4348, + 4386, + 4454 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo = @@ -7679,26 +7939,26 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleTable2_FormatStringOffsetTable[] = { - 3248, - 3298, + 3292, + 3342, 284, - 4448, - 1812, - 4486, - 4524, - 3568, - 4562, + 4492, + 1856, + 4530, + 4568, + 3612, 4606, 4650, 4694, 4738, - 4776, + 4782, 4820, 4864, - 4902, - 4940, - 4978, - 5016 + 4908, + 4946, + 4984, + 5022, + 5060 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo = @@ -7768,14 +8028,14 @@ static const unsigned short IAccessibleTableCell_FormatStringOffsetTable[] = { 208, - 5054, - 76, - 4448, 5098, - 4486, + 76, + 4492, 5142, - 5180, - 5242 + 4530, + 5186, + 5224, + 5286 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo = @@ -7834,8 +8094,8 @@ static const unsigned short IAccessibleImage_FormatStringOffsetTable[] = { 0, - 5280, - 5330 + 5324, + 5374 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo = @@ -7881,7 +8141,7 @@ }; -/* Standard interface: __MIDL_itf_ia2_api_all_0000_0017, ver. 0.0, +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0018, ver. 0.0, GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ @@ -7893,8 +8153,8 @@ { 0, 38, - 5374, - 5412 + 5418, + 5456 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo = @@ -7947,7 +8207,7 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleDocument_FormatStringOffsetTable[] = { - 5450 + 5494 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleDocument_ProxyInfo = @@ -7991,7 +8251,7 @@ }; -/* Standard interface: __MIDL_itf_ia2_api_all_0000_0019, ver. 0.0, +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0020, ver. 0.0, GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ static const MIDL_STUB_DESC Object_StubDesc = @@ -8037,6 +8297,7 @@ ( CInterfaceProxyVtbl *) &_IAccessibleText2ProxyVtbl, ( CInterfaceProxyVtbl *) &_IAccessibleDocumentProxyVtbl, ( CInterfaceProxyVtbl *) &_IAccessible2_2ProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessible2_4ProxyVtbl, ( CInterfaceProxyVtbl *) &_IAccessibleRelationProxyVtbl, ( CInterfaceProxyVtbl *) &_IAccessibleTextProxyVtbl, 0 @@ -8061,6 +8322,7 @@ ( CInterfaceStubVtbl *) &_IAccessibleText2StubVtbl, ( CInterfaceStubVtbl *) &_IAccessibleDocumentStubVtbl, ( CInterfaceStubVtbl *) &_IAccessible2_2StubVtbl, + ( CInterfaceStubVtbl *) &_IAccessible2_4StubVtbl, ( CInterfaceStubVtbl *) &_IAccessibleRelationStubVtbl, ( CInterfaceStubVtbl *) &_IAccessibleTextStubVtbl, 0 @@ -8085,6 +8347,7 @@ "IAccessibleText2", "IAccessibleDocument", "IAccessible2_2", + "IAccessible2_4", "IAccessibleRelation", "IAccessibleText", 0 @@ -8109,6 +8372,7 @@ 0, 0, &IID_IAccessible, + &IID_IAccessible, 0, 0, 0 @@ -8121,12 +8385,12 @@ { IID_BS_LOOKUP_SETUP - IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 19, 16 ) + IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 20, 16 ) IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 8 ) IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 4 ) IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 2 ) IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 1 ) - IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 19, *pIndex ) + IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 20, *pIndex ) } @@ -8137,7 +8401,7 @@ (const PCInterfaceName * ) & _ia2_api_all_InterfaceNamesList, (const IID ** ) & _ia2_api_all_BaseIIDList, & _ia2_api_all_IID_Lookup, - 19, + 20, 2, 0, /* table of [async_uuid] interfaces */ 0, /* Filler1 */
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all.h b/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all.h index 1f9c421..5632075 100644 --- a/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all.h +++ b/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all.h
@@ -80,6 +80,13 @@ #endif /* __IAccessible2_3_FWD_DEFINED__ */ +#ifndef __IAccessible2_4_FWD_DEFINED__ +#define __IAccessible2_4_FWD_DEFINED__ +typedef interface IAccessible2_4 IAccessible2_4; + +#endif /* __IAccessible2_4_FWD_DEFINED__ */ + + #ifndef __IAccessibleComponent_FWD_DEFINED__ #define __IAccessibleComponent_FWD_DEFINED__ typedef interface IAccessibleComponent IAccessibleComponent; @@ -2243,15 +2250,491 @@ #endif /* __IAccessible2_3_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_ia2_api_all_0000_0005 */ +#ifndef __IAccessible2_4_INTERFACE_DEFINED__ +#define __IAccessible2_4_INTERFACE_DEFINED__ + +/* interface IAccessible2_4 */ +/* [uuid][object] */ + + +EXTERN_C const IID IID_IAccessible2_4; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("610a7bec-91bb-444d-a336-a0daf13c4c29") + IAccessible2_4 : public IAccessible2_3 + { + public: + virtual HRESULT STDMETHODCALLTYPE setSelectionRanges( + /* [in] */ long nRanges, + /* [size_is][in] */ IA2Range *ranges) = 0; + + }; + + +#else /* C style interface */ + + typedef struct IAccessible2_4Vtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IAccessible2_4 * This, + /* [in] */ REFIID riid, + /* [annotation][iid_is][out] */ + _COM_Outptr_ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IAccessible2_4 * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IAccessible2_4 * This); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( + IAccessible2_4 * This, + /* [out] */ UINT *pctinfo); + + HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( + IAccessible2_4 * This, + /* [in] */ UINT iTInfo, + /* [in] */ LCID lcid, + /* [out] */ ITypeInfo **ppTInfo); + + HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( + IAccessible2_4 * This, + /* [in] */ REFIID riid, + /* [size_is][in] */ LPOLESTR *rgszNames, + /* [range][in] */ UINT cNames, + /* [in] */ LCID lcid, + /* [size_is][out] */ DISPID *rgDispId); + + /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( + IAccessible2_4 * This, + /* [annotation][in] */ + _In_ DISPID dispIdMember, + /* [annotation][in] */ + _In_ REFIID riid, + /* [annotation][in] */ + _In_ LCID lcid, + /* [annotation][in] */ + _In_ WORD wFlags, + /* [annotation][out][in] */ + _In_ DISPPARAMS *pDispParams, + /* [annotation][out] */ + _Out_opt_ VARIANT *pVarResult, + /* [annotation][out] */ + _Out_opt_ EXCEPINFO *pExcepInfo, + /* [annotation][out] */ + _Out_opt_ UINT *puArgErr); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )( + IAccessible2_4 * This, + /* [retval][out] */ IDispatch **ppdispParent); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )( + IAccessible2_4 * This, + /* [retval][out] */ long *pcountChildren); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )( + IAccessible2_4 * This, + /* [in] */ VARIANT varChild, + /* [retval][out] */ IDispatch **ppdispChild); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszName); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszValue); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszDescription); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ VARIANT *pvarRole); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ VARIANT *pvarState); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszHelp); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )( + IAccessible2_4 * This, + /* [out] */ BSTR *pszHelpFile, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ long *pidTopic); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszKeyboardShortcut); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )( + IAccessible2_4 * This, + /* [retval][out] */ VARIANT *pvarChild); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )( + IAccessible2_4 * This, + /* [retval][out] */ VARIANT *pvarChildren); + + /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [retval][out] */ BSTR *pszDefaultAction); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )( + IAccessible2_4 * This, + /* [in] */ long flagsSelect, + /* [optional][in] */ VARIANT varChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )( + IAccessible2_4 * This, + /* [out] */ long *pxLeft, + /* [out] */ long *pyTop, + /* [out] */ long *pcxWidth, + /* [out] */ long *pcyHeight, + /* [optional][in] */ VARIANT varChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )( + IAccessible2_4 * This, + /* [in] */ long navDir, + /* [optional][in] */ VARIANT varStart, + /* [retval][out] */ VARIANT *pvarEndUpAt); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )( + IAccessible2_4 * This, + /* [in] */ long xLeft, + /* [in] */ long yTop, + /* [retval][out] */ VARIANT *pvarChild); + + /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild); + + /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [in] */ BSTR szName); + + /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )( + IAccessible2_4 * This, + /* [optional][in] */ VARIANT varChild, + /* [in] */ BSTR szValue); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )( + IAccessible2_4 * This, + /* [retval][out] */ long *nRelations); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )( + IAccessible2_4 * This, + /* [in] */ long relationIndex, + /* [retval][out] */ IAccessibleRelation **relation); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )( + IAccessible2_4 * This, + /* [in] */ long maxRelations, + /* [length_is][size_is][out] */ IAccessibleRelation **relations, + /* [retval][out] */ long *nRelations); + + HRESULT ( STDMETHODCALLTYPE *role )( + IAccessible2_4 * This, + /* [retval][out] */ long *role); + + HRESULT ( STDMETHODCALLTYPE *scrollTo )( + IAccessible2_4 * This, + /* [in] */ enum IA2ScrollType scrollType); + + HRESULT ( STDMETHODCALLTYPE *scrollToPoint )( + IAccessible2_4 * This, + /* [in] */ enum IA2CoordinateType coordinateType, + /* [in] */ long x, + /* [in] */ long y); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )( + IAccessible2_4 * This, + /* [out] */ long *groupLevel, + /* [out] */ long *similarItemsInGroup, + /* [retval][out] */ long *positionInGroup); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )( + IAccessible2_4 * This, + /* [retval][out] */ AccessibleStates *states); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )( + IAccessible2_4 * This, + /* [retval][out] */ BSTR *extendedRole); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )( + IAccessible2_4 * This, + /* [retval][out] */ BSTR *localizedExtendedRole); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )( + IAccessible2_4 * This, + /* [retval][out] */ long *nExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )( + IAccessible2_4 * This, + /* [in] */ long maxExtendedStates, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates, + /* [retval][out] */ long *nExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )( + IAccessible2_4 * This, + /* [in] */ long maxLocalizedExtendedStates, + /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates, + /* [retval][out] */ long *nLocalizedExtendedStates); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )( + IAccessible2_4 * This, + /* [retval][out] */ long *uniqueID); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )( + IAccessible2_4 * This, + /* [retval][out] */ HWND *windowHandle); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )( + IAccessible2_4 * This, + /* [retval][out] */ long *indexInParent); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )( + IAccessible2_4 * This, + /* [retval][out] */ IA2Locale *locale); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )( + IAccessible2_4 * This, + /* [retval][out] */ BSTR *attributes); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attribute )( + IAccessible2_4 * This, + /* [in] */ BSTR name, + /* [retval][out] */ VARIANT *attribute); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleWithCaret )( + IAccessible2_4 * This, + /* [out] */ IUnknown **accessible, + /* [retval][out] */ long *caretOffset); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationTargetsOfType )( + IAccessible2_4 * This, + /* [in] */ BSTR type, + /* [in] */ long maxTargets, + /* [size_is][size_is][out] */ IUnknown ***targets, + /* [retval][out] */ long *nTargets); + + /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectionRanges )( + IAccessible2_4 * This, + /* [size_is][size_is][out] */ IA2Range **ranges, + /* [retval][out] */ long *nRanges); + + HRESULT ( STDMETHODCALLTYPE *setSelectionRanges )( + IAccessible2_4 * This, + /* [in] */ long nRanges, + /* [size_is][in] */ IA2Range *ranges); + + END_INTERFACE + } IAccessible2_4Vtbl; + + interface IAccessible2_4 + { + CONST_VTBL struct IAccessible2_4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IAccessible2_4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define IAccessible2_4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define IAccessible2_4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define IAccessible2_4_GetTypeInfoCount(This,pctinfo) \ + ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) + +#define IAccessible2_4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ + ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) + +#define IAccessible2_4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ + ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) + +#define IAccessible2_4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ + ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) + + +#define IAccessible2_4_get_accParent(This,ppdispParent) \ + ( (This)->lpVtbl -> get_accParent(This,ppdispParent) ) + +#define IAccessible2_4_get_accChildCount(This,pcountChildren) \ + ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) ) + +#define IAccessible2_4_get_accChild(This,varChild,ppdispChild) \ + ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) ) + +#define IAccessible2_4_get_accName(This,varChild,pszName) \ + ( (This)->lpVtbl -> get_accName(This,varChild,pszName) ) + +#define IAccessible2_4_get_accValue(This,varChild,pszValue) \ + ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) ) + +#define IAccessible2_4_get_accDescription(This,varChild,pszDescription) \ + ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) ) + +#define IAccessible2_4_get_accRole(This,varChild,pvarRole) \ + ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) ) + +#define IAccessible2_4_get_accState(This,varChild,pvarState) \ + ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) ) + +#define IAccessible2_4_get_accHelp(This,varChild,pszHelp) \ + ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) ) + +#define IAccessible2_4_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) \ + ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) ) + +#define IAccessible2_4_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) \ + ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) ) + +#define IAccessible2_4_get_accFocus(This,pvarChild) \ + ( (This)->lpVtbl -> get_accFocus(This,pvarChild) ) + +#define IAccessible2_4_get_accSelection(This,pvarChildren) \ + ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) ) + +#define IAccessible2_4_get_accDefaultAction(This,varChild,pszDefaultAction) \ + ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) ) + +#define IAccessible2_4_accSelect(This,flagsSelect,varChild) \ + ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) ) + +#define IAccessible2_4_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) \ + ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) ) + +#define IAccessible2_4_accNavigate(This,navDir,varStart,pvarEndUpAt) \ + ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) ) + +#define IAccessible2_4_accHitTest(This,xLeft,yTop,pvarChild) \ + ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) ) + +#define IAccessible2_4_accDoDefaultAction(This,varChild) \ + ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) ) + +#define IAccessible2_4_put_accName(This,varChild,szName) \ + ( (This)->lpVtbl -> put_accName(This,varChild,szName) ) + +#define IAccessible2_4_put_accValue(This,varChild,szValue) \ + ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) ) + + +#define IAccessible2_4_get_nRelations(This,nRelations) \ + ( (This)->lpVtbl -> get_nRelations(This,nRelations) ) + +#define IAccessible2_4_get_relation(This,relationIndex,relation) \ + ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) ) + +#define IAccessible2_4_get_relations(This,maxRelations,relations,nRelations) \ + ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) ) + +#define IAccessible2_4_role(This,role) \ + ( (This)->lpVtbl -> role(This,role) ) + +#define IAccessible2_4_scrollTo(This,scrollType) \ + ( (This)->lpVtbl -> scrollTo(This,scrollType) ) + +#define IAccessible2_4_scrollToPoint(This,coordinateType,x,y) \ + ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) ) + +#define IAccessible2_4_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) \ + ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) ) + +#define IAccessible2_4_get_states(This,states) \ + ( (This)->lpVtbl -> get_states(This,states) ) + +#define IAccessible2_4_get_extendedRole(This,extendedRole) \ + ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) ) + +#define IAccessible2_4_get_localizedExtendedRole(This,localizedExtendedRole) \ + ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) ) + +#define IAccessible2_4_get_nExtendedStates(This,nExtendedStates) \ + ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) ) + +#define IAccessible2_4_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) \ + ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) ) + +#define IAccessible2_4_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) \ + ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) ) + +#define IAccessible2_4_get_uniqueID(This,uniqueID) \ + ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) ) + +#define IAccessible2_4_get_windowHandle(This,windowHandle) \ + ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) ) + +#define IAccessible2_4_get_indexInParent(This,indexInParent) \ + ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) ) + +#define IAccessible2_4_get_locale(This,locale) \ + ( (This)->lpVtbl -> get_locale(This,locale) ) + +#define IAccessible2_4_get_attributes(This,attributes) \ + ( (This)->lpVtbl -> get_attributes(This,attributes) ) + + +#define IAccessible2_4_get_attribute(This,name,attribute) \ + ( (This)->lpVtbl -> get_attribute(This,name,attribute) ) + +#define IAccessible2_4_get_accessibleWithCaret(This,accessible,caretOffset) \ + ( (This)->lpVtbl -> get_accessibleWithCaret(This,accessible,caretOffset) ) + +#define IAccessible2_4_get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) \ + ( (This)->lpVtbl -> get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) ) + + +#define IAccessible2_4_get_selectionRanges(This,ranges,nRanges) \ + ( (This)->lpVtbl -> get_selectionRanges(This,ranges,nRanges) ) + + +#define IAccessible2_4_setSelectionRanges(This,nRanges,ranges) \ + ( (This)->lpVtbl -> setSelectionRanges(This,nRanges,ranges) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __IAccessible2_4_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_ia2_api_all_0000_0006 */ /* [local] */ typedef long IA2Color; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0005_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0005_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_s_ifspec; #ifndef __IAccessibleComponent_INTERFACE_DEFINED__ #define __IAccessibleComponent_INTERFACE_DEFINED__ @@ -2465,7 +2948,7 @@ #endif /* __IAccessibleValue_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_ia2_api_all_0000_0007 */ +/* interface __MIDL_itf_ia2_api_all_0000_0008 */ /* [local] */ typedef struct IA2TextSegment @@ -2487,8 +2970,8 @@ } ; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0007_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0007_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0008_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0008_v0_0_s_ifspec; #ifndef __IAccessibleText_INTERFACE_DEFINED__ #define __IAccessibleText_INTERFACE_DEFINED__ @@ -4943,7 +5426,7 @@ #endif /* __IAccessibleImage_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_ia2_api_all_0000_0017 */ +/* interface __MIDL_itf_ia2_api_all_0000_0018 */ /* [local] */ @@ -4987,8 +5470,8 @@ } ; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0017_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0017_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_s_ifspec; #ifndef __IAccessibleApplication_INTERFACE_DEFINED__ #define __IAccessibleApplication_INTERFACE_DEFINED__ @@ -5180,7 +5663,7 @@ #endif /* __IAccessibleDocument_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_ia2_api_all_0000_0019 */ +/* interface __MIDL_itf_ia2_api_all_0000_0020 */ /* [local] */ @@ -5188,8 +5671,8 @@ -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0019_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0019_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0020_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0020_v0_0_s_ifspec; #ifndef __IAccessible2Lib_LIBRARY_DEFINED__
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_i.c b/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_i.c index 513877b..2edf9310 100644 --- a/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_i.c +++ b/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_i.c
@@ -82,6 +82,9 @@ MIDL_DEFINE_GUID(IID, IID_IAccessible2_3,0x5BE18059,0x762E,0x4E73,0x94,0x76,0xAB,0xA2,0x94,0xFE,0xD4,0x11); +MIDL_DEFINE_GUID(IID, IID_IAccessible2_4,0x610a7bec,0x91bb,0x444d,0xa3,0x36,0xa0,0xda,0xf1,0x3c,0x4c,0x29); + + MIDL_DEFINE_GUID(IID, IID_IAccessibleComponent,0x1546D4B0,0x4C98,0x4bda,0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4);
diff --git a/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_p.c b/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_p.c index 76491ae9..86483ef 100644 --- a/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_p.c +++ b/third_party/win_build_output/midl/third_party/iaccessible2/x86/ia2_api_all_p.c
@@ -49,8 +49,8 @@ #include "ia2_api_all.h" -#define TYPE_FORMAT_STRING_SIZE 1563 -#define PROC_FORMAT_STRING_SIZE 5239 +#define TYPE_FORMAT_STRING_SIZE 1589 +#define PROC_FORMAT_STRING_SIZE 5281 #define EXPR_FORMAT_STRING_SIZE 1 #define TRANSMIT_AS_TABLE_SIZE 0 #define WIRE_MARSHAL_TABLE_SIZE 3 @@ -121,6 +121,13 @@ extern const MIDL_STUB_DESC Object_StubDesc; +extern const MIDL_SERVER_INFO IAccessible2_4_ServerInfo; +extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_4_ProxyInfo; + + +extern const MIDL_STUB_DESC Object_StubDesc; + + extern const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo; extern const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo; @@ -1492,36 +1499,35 @@ /* 1342 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_locationInParent */ + /* Procedure setSelectionRanges */ /* 1344 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 1346 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1350 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1350 */ NdrFcShort( 0x32 ), /* 50 */ /* 1352 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 1354 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1356 */ NdrFcShort( 0x40 ), /* 64 */ -/* 1358 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1354 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1356 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1358 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x3, /* 3 */ /* 1360 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ /* 1362 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1364 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1364 */ NdrFcShort( 0x1 ), /* 1 */ /* 1366 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter x */ + /* Parameter nRanges */ -/* 1368 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1368 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 1370 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 1372 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter y */ + /* Parameter ranges */ -/* 1374 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1374 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ /* 1376 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1378 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 1378 */ NdrFcShort( 0x54c ), /* Type Offset=1356 */ /* Return value */ @@ -1530,155 +1536,193 @@ /* 1384 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_foreground */ + /* Procedure get_locationInParent */ /* 1386 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 1388 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1392 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1394 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1392 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1394 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 1396 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1398 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1398 */ NdrFcShort( 0x40 ), /* 64 */ /* 1400 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 1402 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ /* 1404 */ NdrFcShort( 0x0 ), /* 0 */ /* 1406 */ NdrFcShort( 0x0 ), /* 0 */ /* 1408 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter foreground */ + /* Parameter x */ /* 1410 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 1412 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 1414 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Parameter y */ -/* 1416 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1416 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 1418 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 1420 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_currentValue */ + /* Return value */ -/* 1422 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1422 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1424 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1426 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_foreground */ + +/* 1428 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1424 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1428 */ NdrFcShort( 0x3 ), /* 3 */ -/* 1430 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 1432 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1434 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1436 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 1430 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1434 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1436 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1438 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1440 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1442 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 1438 */ 0x8, /* 8 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1440 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1442 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1444 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1444 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1446 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1448 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1450 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter currentValue */ + /* Parameter foreground */ -/* 1446 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ -/* 1448 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 1450 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */ +/* 1452 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1454 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1456 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ /* Return value */ -/* 1452 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1454 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1456 */ 0x8, /* FC_LONG */ +/* 1458 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1460 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1462 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_currentValue */ + +/* 1464 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1466 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1470 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1472 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1474 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1476 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1478 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 1480 */ 0x8, /* 8 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1482 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1484 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1486 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter currentValue */ + +/* 1488 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +/* 1490 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1492 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */ + + /* Return value */ + +/* 1494 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1496 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1498 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure setCurrentValue */ -/* 1458 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1500 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1460 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1464 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1466 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ -/* 1468 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1470 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1472 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ +/* 1502 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1506 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1508 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 1510 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1512 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1514 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x2, /* 2 */ -/* 1474 */ 0x8, /* 8 */ +/* 1516 */ 0x8, /* 8 */ 0x5, /* Ext Flags: new corr desc, srv corr check, */ -/* 1476 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1478 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1480 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1518 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1520 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1522 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter value */ -/* 1482 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ -/* 1484 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 1486 */ NdrFcShort( 0x54c ), /* Type Offset=1356 */ +/* 1524 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 1526 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1528 */ NdrFcShort( 0x566 ), /* Type Offset=1382 */ /* Return value */ -/* 1488 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1490 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 1492 */ 0x8, /* FC_LONG */ +/* 1530 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1532 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 1534 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_maximumValue */ -/* 1494 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1536 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1496 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1500 */ NdrFcShort( 0x5 ), /* 5 */ -/* 1502 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 1504 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1506 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1508 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 1538 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1542 */ NdrFcShort( 0x5 ), /* 5 */ +/* 1544 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1546 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1548 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1550 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 1510 */ 0x8, /* 8 */ +/* 1552 */ 0x8, /* 8 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1512 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1514 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1516 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1554 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1556 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1558 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter maximumValue */ -/* 1518 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ -/* 1520 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 1522 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */ +/* 1560 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +/* 1562 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1564 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */ /* Return value */ -/* 1524 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1526 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1528 */ 0x8, /* FC_LONG */ +/* 1566 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1568 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1570 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_minimumValue */ -/* 1530 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1572 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1532 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1536 */ NdrFcShort( 0x6 ), /* 6 */ -/* 1538 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 1540 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1542 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1544 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 1574 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1578 */ NdrFcShort( 0x6 ), /* 6 */ +/* 1580 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1582 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1584 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1586 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 1546 */ 0x8, /* 8 */ +/* 1588 */ 0x8, /* 8 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1548 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1550 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1552 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1590 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1592 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1594 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter minimumValue */ -/* 1554 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ -/* 1556 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 1558 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */ +/* 1596 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +/* 1598 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1600 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */ /* Return value */ -/* 1560 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1562 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1564 */ 0x8, /* FC_LONG */ +/* 1602 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1604 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1606 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure copyText */ @@ -1686,166 +1730,166 @@ /* Procedure addSelection */ -/* 1566 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 1568 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1572 */ NdrFcShort( 0x3 ), /* 3 */ -/* 1574 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 1576 */ NdrFcShort( 0x10 ), /* 16 */ -/* 1578 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1580 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 1582 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 1584 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1586 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1588 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter startOffset */ - - - /* Parameter startOffset */ - -/* 1590 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1592 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 1594 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter endOffset */ - - - /* Parameter endOffset */ - -/* 1596 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1598 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1600 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Return value */ - - - /* Return value */ - -/* 1602 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1604 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 1606 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_attributes */ - /* 1608 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 1610 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1614 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1616 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ -/* 1618 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1620 */ NdrFcShort( 0x40 ), /* 64 */ -/* 1622 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x5, /* 5 */ +/* 1614 */ NdrFcShort( 0x3 ), /* 3 */ +/* 1616 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 1618 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1620 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1622 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ /* 1624 */ 0x8, /* 8 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1626 */ NdrFcShort( 0x1 ), /* 1 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 1626 */ NdrFcShort( 0x0 ), /* 0 */ /* 1628 */ NdrFcShort( 0x0 ), /* 0 */ /* 1630 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter offset */ + /* Parameter startOffset */ + + + /* Parameter startOffset */ /* 1632 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 1634 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 1636 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter startOffset */ + /* Parameter endOffset */ -/* 1638 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ + + /* Parameter endOffset */ + +/* 1638 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 1640 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 1642 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter endOffset */ + /* Return value */ -/* 1644 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ + + /* Return value */ + +/* 1644 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ /* 1646 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 1648 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Procedure get_attributes */ + +/* 1650 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1652 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1656 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1658 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 1660 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1662 */ NdrFcShort( 0x40 ), /* 64 */ +/* 1664 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x5, /* 5 */ +/* 1666 */ 0x8, /* 8 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1668 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1670 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1672 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 1674 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1676 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1678 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter startOffset */ + +/* 1680 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1682 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1684 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 1686 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1688 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1690 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Parameter textAttributes */ -/* 1650 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 1652 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 1654 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 1692 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1694 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 1696 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 1656 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1658 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 1660 */ 0x8, /* FC_LONG */ +/* 1698 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1700 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 1702 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_characterExtents */ -/* 1662 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1704 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1664 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1668 */ NdrFcShort( 0x6 ), /* 6 */ -/* 1670 */ NdrFcShort( 0x20 ), /* x86 Stack size/offset = 32 */ -/* 1672 */ NdrFcShort( 0xe ), /* 14 */ -/* 1674 */ NdrFcShort( 0x78 ), /* 120 */ -/* 1676 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1706 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1710 */ NdrFcShort( 0x6 ), /* 6 */ +/* 1712 */ NdrFcShort( 0x20 ), /* x86 Stack size/offset = 32 */ +/* 1714 */ NdrFcShort( 0xe ), /* 14 */ +/* 1716 */ NdrFcShort( 0x78 ), /* 120 */ +/* 1718 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x7, /* 7 */ -/* 1678 */ 0x8, /* 8 */ +/* 1720 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 1680 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1682 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1684 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1722 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1724 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1726 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter offset */ -/* 1686 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1688 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 1690 */ 0x8, /* FC_LONG */ +/* 1728 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1730 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1732 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter coordType */ -/* 1692 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1694 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1696 */ 0xd, /* FC_ENUM16 */ +/* 1734 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1736 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1738 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter x */ -/* 1698 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1700 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 1702 */ 0x8, /* FC_LONG */ +/* 1740 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1742 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1744 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter y */ -/* 1704 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1706 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 1708 */ 0x8, /* FC_LONG */ +/* 1746 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1748 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 1750 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter width */ -/* 1710 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1712 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 1714 */ 0x8, /* FC_LONG */ +/* 1752 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1754 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 1756 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter height */ -/* 1716 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1718 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ -/* 1720 */ 0x8, /* FC_LONG */ +/* 1758 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1760 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 1762 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 1722 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1724 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ -/* 1726 */ 0x8, /* FC_LONG */ +/* 1764 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1766 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ +/* 1768 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nRows */ @@ -1853,29 +1897,29 @@ /* Procedure get_nSelections */ -/* 1728 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1770 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1730 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1734 */ NdrFcShort( 0x7 ), /* 7 */ -/* 1736 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 1738 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1740 */ NdrFcShort( 0x24 ), /* 36 */ -/* 1742 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1772 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1776 */ NdrFcShort( 0x7 ), /* 7 */ +/* 1778 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1780 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1782 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1784 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 1744 */ 0x8, /* 8 */ +/* 1786 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 1746 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1748 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1750 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1788 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1790 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1792 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter rowCount */ /* Parameter nSelections */ -/* 1752 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1754 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 1756 */ 0x8, /* FC_LONG */ +/* 1794 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1796 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1798 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -1883,752 +1927,715 @@ /* Return value */ -/* 1758 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1760 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1762 */ 0x8, /* FC_LONG */ +/* 1800 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1802 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1804 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_offsetAtPoint */ -/* 1764 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1806 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1766 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1770 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1772 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ -/* 1774 */ NdrFcShort( 0x16 ), /* 22 */ -/* 1776 */ NdrFcShort( 0x24 ), /* 36 */ -/* 1778 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1808 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1812 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1814 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 1816 */ NdrFcShort( 0x16 ), /* 22 */ +/* 1818 */ NdrFcShort( 0x24 ), /* 36 */ +/* 1820 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x5, /* 5 */ -/* 1780 */ 0x8, /* 8 */ +/* 1822 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 1782 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1784 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1786 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1824 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1826 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1828 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter x */ -/* 1788 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1790 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 1792 */ 0x8, /* FC_LONG */ +/* 1830 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1832 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1834 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter y */ -/* 1794 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1796 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1798 */ 0x8, /* FC_LONG */ +/* 1836 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1838 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1840 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter coordType */ -/* 1800 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1802 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 1804 */ 0xd, /* FC_ENUM16 */ +/* 1842 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1844 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1846 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter offset */ -/* 1806 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1808 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 1810 */ 0x8, /* FC_LONG */ +/* 1848 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1850 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 1852 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 1812 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1814 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 1816 */ 0x8, /* FC_LONG */ +/* 1854 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1856 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 1858 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_selection */ -/* 1818 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1860 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1820 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1824 */ NdrFcShort( 0x9 ), /* 9 */ -/* 1826 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 1828 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1830 */ NdrFcShort( 0x40 ), /* 64 */ -/* 1832 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 1862 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1866 */ NdrFcShort( 0x9 ), /* 9 */ +/* 1868 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 1870 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1872 */ NdrFcShort( 0x40 ), /* 64 */ +/* 1874 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 1834 */ 0x8, /* 8 */ +/* 1876 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 1836 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1838 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1840 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1878 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1880 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1882 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter selectionIndex */ -/* 1842 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1844 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 1846 */ 0x8, /* FC_LONG */ +/* 1884 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1886 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1888 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 1848 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1850 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1852 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter endOffset */ - -/* 1854 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1856 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 1858 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Return value */ - -/* 1860 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1862 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 1864 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_text */ - -/* 1866 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 1868 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1872 */ NdrFcShort( 0xa ), /* 10 */ -/* 1874 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 1876 */ NdrFcShort( 0x10 ), /* 16 */ -/* 1878 */ NdrFcShort( 0x8 ), /* 8 */ -/* 1880 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x4, /* 4 */ -/* 1882 */ 0x8, /* 8 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1884 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1886 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1888 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter startOffset */ - -/* 1890 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1892 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1890 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1892 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 1894 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 1896 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1898 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1896 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1898 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 1900 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Return value */ + +/* 1902 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1904 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 1906 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_text */ + +/* 1908 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 1910 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1914 */ NdrFcShort( 0xa ), /* 10 */ +/* 1916 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 1918 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1920 */ NdrFcShort( 0x8 ), /* 8 */ +/* 1922 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 1924 */ 0x8, /* 8 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 1926 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1928 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1930 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter startOffset */ + +/* 1932 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1934 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1936 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter endOffset */ + +/* 1938 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1940 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1942 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Parameter text */ -/* 1902 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 1904 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 1906 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 1944 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 1946 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1948 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 1908 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1910 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 1912 */ 0x8, /* FC_LONG */ +/* 1950 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 1952 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 1954 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_textBeforeOffset */ -/* 1914 */ 0x33, /* FC_AUTO_HANDLE */ +/* 1956 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1916 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1920 */ NdrFcShort( 0xb ), /* 11 */ -/* 1922 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ -/* 1924 */ NdrFcShort( 0xe ), /* 14 */ -/* 1926 */ NdrFcShort( 0x40 ), /* 64 */ -/* 1928 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 1958 */ NdrFcLong( 0x0 ), /* 0 */ +/* 1962 */ NdrFcShort( 0xb ), /* 11 */ +/* 1964 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ +/* 1966 */ NdrFcShort( 0xe ), /* 14 */ +/* 1968 */ NdrFcShort( 0x40 ), /* 64 */ +/* 1970 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x6, /* 6 */ -/* 1930 */ 0x8, /* 8 */ +/* 1972 */ 0x8, /* 8 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1932 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1934 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1936 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1974 */ NdrFcShort( 0x1 ), /* 1 */ +/* 1976 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1978 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter offset */ -/* 1938 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1940 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 1942 */ 0x8, /* FC_LONG */ +/* 1980 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1982 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1984 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter boundaryType */ -/* 1944 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 1946 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1948 */ 0xd, /* FC_ENUM16 */ +/* 1986 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 1988 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1990 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 1950 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1952 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 1954 */ 0x8, /* FC_LONG */ +/* 1992 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 1994 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1996 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 1956 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 1958 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 1960 */ 0x8, /* FC_LONG */ +/* 1998 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2000 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 2002 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 1962 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 1964 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 1966 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 2004 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2006 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 2008 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 1968 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 1970 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ -/* 1972 */ 0x8, /* FC_LONG */ +/* 2010 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2012 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 2014 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_textAfterOffset */ -/* 1974 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2016 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 1976 */ NdrFcLong( 0x0 ), /* 0 */ -/* 1980 */ NdrFcShort( 0xc ), /* 12 */ -/* 1982 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ -/* 1984 */ NdrFcShort( 0xe ), /* 14 */ -/* 1986 */ NdrFcShort( 0x40 ), /* 64 */ -/* 1988 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2018 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2022 */ NdrFcShort( 0xc ), /* 12 */ +/* 2024 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ +/* 2026 */ NdrFcShort( 0xe ), /* 14 */ +/* 2028 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2030 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x6, /* 6 */ -/* 1990 */ 0x8, /* 8 */ +/* 2032 */ 0x8, /* 8 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 1992 */ NdrFcShort( 0x1 ), /* 1 */ -/* 1994 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1996 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2034 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2036 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2038 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter offset */ -/* 1998 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2000 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2002 */ 0x8, /* FC_LONG */ +/* 2040 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2042 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2044 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter boundaryType */ -/* 2004 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2006 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2008 */ 0xd, /* FC_ENUM16 */ +/* 2046 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2048 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2050 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2010 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2012 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2014 */ 0x8, /* FC_LONG */ +/* 2052 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2054 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2056 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2016 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2018 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2020 */ 0x8, /* FC_LONG */ +/* 2058 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2060 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 2062 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 2022 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 2024 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 2026 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 2064 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2066 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 2068 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 2028 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2030 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ -/* 2032 */ 0x8, /* FC_LONG */ +/* 2070 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2072 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 2074 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_textAtOffset */ -/* 2034 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2076 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2036 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2040 */ NdrFcShort( 0xd ), /* 13 */ -/* 2042 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ -/* 2044 */ NdrFcShort( 0xe ), /* 14 */ -/* 2046 */ NdrFcShort( 0x40 ), /* 64 */ -/* 2048 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2078 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2082 */ NdrFcShort( 0xd ), /* 13 */ +/* 2084 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ +/* 2086 */ NdrFcShort( 0xe ), /* 14 */ +/* 2088 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2090 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x6, /* 6 */ -/* 2050 */ 0x8, /* 8 */ +/* 2092 */ 0x8, /* 8 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2052 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2054 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2056 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2094 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2096 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2098 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter offset */ -/* 2058 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2060 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2062 */ 0x8, /* FC_LONG */ +/* 2100 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2102 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2104 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter boundaryType */ -/* 2064 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2066 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2068 */ 0xd, /* FC_ENUM16 */ +/* 2106 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2108 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2110 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2070 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2072 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2074 */ 0x8, /* FC_LONG */ +/* 2112 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2114 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2116 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2076 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2078 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2080 */ 0x8, /* FC_LONG */ +/* 2118 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2120 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 2122 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 2082 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 2084 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 2086 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 2124 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2126 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 2128 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 2088 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2090 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ -/* 2092 */ 0x8, /* FC_LONG */ +/* 2130 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2132 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 2134 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure removeSelection */ -/* 2094 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2136 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2096 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2100 */ NdrFcShort( 0xe ), /* 14 */ -/* 2102 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2104 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2106 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2108 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2138 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2142 */ NdrFcShort( 0xe ), /* 14 */ +/* 2144 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2146 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2148 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2150 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2110 */ 0x8, /* 8 */ +/* 2152 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2112 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2114 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2116 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2154 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2156 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2158 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter selectionIndex */ -/* 2118 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2120 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2122 */ 0x8, /* FC_LONG */ +/* 2160 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2162 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2164 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2124 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2126 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2128 */ 0x8, /* FC_LONG */ +/* 2166 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2168 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2170 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure setCaretOffset */ -/* 2130 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2172 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2132 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2136 */ NdrFcShort( 0xf ), /* 15 */ -/* 2138 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2140 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2142 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2144 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2174 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2178 */ NdrFcShort( 0xf ), /* 15 */ +/* 2180 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2182 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2184 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2186 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2146 */ 0x8, /* 8 */ +/* 2188 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2148 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2150 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2152 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2190 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2192 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2194 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter offset */ -/* 2154 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2156 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2158 */ 0x8, /* FC_LONG */ +/* 2196 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2198 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2200 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2160 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2162 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2164 */ 0x8, /* FC_LONG */ +/* 2202 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2204 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2206 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure setSelection */ -/* 2166 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2208 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2168 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2172 */ NdrFcShort( 0x10 ), /* 16 */ -/* 2174 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 2176 */ NdrFcShort( 0x18 ), /* 24 */ -/* 2178 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2180 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2210 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2214 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2216 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 2218 */ NdrFcShort( 0x18 ), /* 24 */ +/* 2220 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2222 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 2182 */ 0x8, /* 8 */ +/* 2224 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2184 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2186 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2188 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2226 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2228 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2230 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter selectionIndex */ -/* 2190 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2192 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2194 */ 0x8, /* FC_LONG */ +/* 2232 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2234 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2236 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter startOffset */ -/* 2196 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2198 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2200 */ 0x8, /* FC_LONG */ +/* 2238 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2240 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2242 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2202 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2204 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2206 */ 0x8, /* FC_LONG */ +/* 2244 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2246 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2248 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2208 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2210 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2212 */ 0x8, /* FC_LONG */ +/* 2250 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2252 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 2254 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nCharacters */ -/* 2214 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2256 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2216 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2220 */ NdrFcShort( 0x11 ), /* 17 */ -/* 2222 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2224 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2226 */ NdrFcShort( 0x24 ), /* 36 */ -/* 2228 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2258 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2262 */ NdrFcShort( 0x11 ), /* 17 */ +/* 2264 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2266 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2268 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2270 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2230 */ 0x8, /* 8 */ +/* 2272 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2232 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2234 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2236 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2274 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2276 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2278 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter nCharacters */ -/* 2238 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2240 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2242 */ 0x8, /* FC_LONG */ +/* 2280 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2282 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2284 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2244 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2246 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2248 */ 0x8, /* FC_LONG */ +/* 2286 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2288 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2290 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure scrollSubstringTo */ -/* 2250 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2292 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2252 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2256 */ NdrFcShort( 0x12 ), /* 18 */ -/* 2258 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 2260 */ NdrFcShort( 0x16 ), /* 22 */ -/* 2262 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2264 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2294 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2298 */ NdrFcShort( 0x12 ), /* 18 */ +/* 2300 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 2302 */ NdrFcShort( 0x16 ), /* 22 */ +/* 2304 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2306 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 2266 */ 0x8, /* 8 */ +/* 2308 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2268 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2270 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2272 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2310 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2312 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2314 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter startIndex */ -/* 2274 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2276 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2278 */ 0x8, /* FC_LONG */ +/* 2316 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2318 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2320 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endIndex */ -/* 2280 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2282 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2284 */ 0x8, /* FC_LONG */ +/* 2322 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2324 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2326 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter scrollType */ -/* 2286 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2288 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2290 */ 0xd, /* FC_ENUM16 */ +/* 2328 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2330 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2332 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Return value */ -/* 2292 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2294 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2296 */ 0x8, /* FC_LONG */ +/* 2334 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2336 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 2338 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure scrollSubstringToPoint */ -/* 2298 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2340 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2300 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2304 */ NdrFcShort( 0x13 ), /* 19 */ -/* 2306 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ -/* 2308 */ NdrFcShort( 0x26 ), /* 38 */ -/* 2310 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2312 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2342 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2346 */ NdrFcShort( 0x13 ), /* 19 */ +/* 2348 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ +/* 2350 */ NdrFcShort( 0x26 ), /* 38 */ +/* 2352 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2354 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x6, /* 6 */ -/* 2314 */ 0x8, /* 8 */ +/* 2356 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2316 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2318 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2320 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2358 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2360 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2362 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter startIndex */ -/* 2322 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2324 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2326 */ 0x8, /* FC_LONG */ +/* 2364 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2366 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2368 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endIndex */ -/* 2328 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2330 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2332 */ 0x8, /* FC_LONG */ +/* 2370 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2372 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2374 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter coordinateType */ -/* 2334 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2336 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2338 */ 0xd, /* FC_ENUM16 */ +/* 2376 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2378 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2380 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter x */ -/* 2340 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2342 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2344 */ 0x8, /* FC_LONG */ +/* 2382 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2384 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 2386 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter y */ -/* 2346 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2348 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 2350 */ 0x8, /* FC_LONG */ +/* 2388 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2390 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 2392 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2352 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2354 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ -/* 2356 */ 0x8, /* FC_LONG */ +/* 2394 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2396 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 2398 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_newText */ -/* 2358 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2400 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2360 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2364 */ NdrFcShort( 0x14 ), /* 20 */ -/* 2366 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2368 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2370 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2372 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2402 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2406 */ NdrFcShort( 0x14 ), /* 20 */ +/* 2408 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2410 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2412 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2414 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 2374 */ 0x8, /* 8 */ +/* 2416 */ 0x8, /* 8 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2376 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2378 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2380 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2418 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2420 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2422 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter newText */ -/* 2382 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ -/* 2384 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2386 */ NdrFcShort( 0x55a ), /* Type Offset=1370 */ +/* 2424 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +/* 2426 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2428 */ NdrFcShort( 0x574 ), /* Type Offset=1396 */ /* Return value */ -/* 2388 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2390 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2392 */ 0x8, /* FC_LONG */ +/* 2430 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2432 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2434 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_oldText */ -/* 2394 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2436 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2396 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2400 */ NdrFcShort( 0x15 ), /* 21 */ -/* 2402 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2404 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2406 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2408 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 2438 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2442 */ NdrFcShort( 0x15 ), /* 21 */ +/* 2444 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2446 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2448 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2450 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 2410 */ 0x8, /* 8 */ +/* 2452 */ 0x8, /* 8 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2412 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2414 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2416 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2454 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2456 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2458 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter oldText */ -/* 2418 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ -/* 2420 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2422 */ NdrFcShort( 0x55a ), /* Type Offset=1370 */ +/* 2460 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +/* 2462 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2464 */ NdrFcShort( 0x574 ), /* Type Offset=1396 */ /* Return value */ -/* 2424 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2426 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2428 */ 0x8, /* FC_LONG */ +/* 2466 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2468 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2470 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_attributeRange */ -/* 2430 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2472 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2432 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2436 */ NdrFcShort( 0x16 ), /* 22 */ -/* 2438 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ -/* 2440 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2442 */ NdrFcShort( 0x40 ), /* 64 */ -/* 2444 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ +/* 2474 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2478 */ NdrFcShort( 0x16 ), /* 22 */ +/* 2480 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ +/* 2482 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2484 */ NdrFcShort( 0x40 ), /* 64 */ +/* 2486 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */ 0x6, /* 6 */ -/* 2446 */ 0x8, /* 8 */ +/* 2488 */ 0x8, /* 8 */ 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */ -/* 2448 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2450 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2452 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2490 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2492 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2494 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter offset */ -/* 2454 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2456 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2458 */ 0x8, /* FC_LONG */ +/* 2496 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2498 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2500 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter filter */ -/* 2460 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ -/* 2462 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2464 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ +/* 2502 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */ +/* 2504 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2506 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ /* Parameter startOffset */ -/* 2466 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2468 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2470 */ 0x8, /* FC_LONG */ +/* 2508 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2510 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2512 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2472 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2474 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2476 */ 0x8, /* FC_LONG */ +/* 2514 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2516 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 2518 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter attributeValues */ -/* 2478 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 2480 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 2482 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - - /* Return value */ - -/* 2484 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2486 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ -/* 2488 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure deleteText */ - -/* 2490 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 2492 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2496 */ NdrFcShort( 0x4 ), /* 4 */ -/* 2498 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2500 */ NdrFcShort( 0x10 ), /* 16 */ -/* 2502 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2504 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 2506 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 2508 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2510 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2512 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter startOffset */ - -/* 2514 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2516 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2518 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter endOffset */ - -/* 2520 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2522 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2524 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 2520 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 2522 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 2524 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ /* 2526 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2528 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2528 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ /* 2530 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure insertText */ + /* Procedure deleteText */ /* 2532 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 2534 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2538 */ NdrFcShort( 0x5 ), /* 5 */ +/* 2538 */ NdrFcShort( 0x4 ), /* 4 */ /* 2540 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2542 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2542 */ NdrFcShort( 0x10 ), /* 16 */ /* 2544 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2546 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ +/* 2546 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x3, /* 3 */ /* 2548 */ 0x8, /* 8 */ - 0x5, /* Ext Flags: new corr desc, srv corr check, */ + 0x1, /* Ext Flags: new corr desc, */ /* 2550 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2552 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2552 */ NdrFcShort( 0x0 ), /* 0 */ /* 2554 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter offset */ + /* Parameter startOffset */ /* 2556 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 2558 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 2560 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter text */ + /* Parameter endOffset */ -/* 2562 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2562 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 2564 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2566 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ +/* 2566 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ /* Return value */ @@ -2637,36 +2644,35 @@ /* 2572 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure cutText */ + /* Procedure insertText */ /* 2574 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 2576 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2580 */ NdrFcShort( 0x6 ), /* 6 */ +/* 2580 */ NdrFcShort( 0x5 ), /* 5 */ /* 2582 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2584 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2584 */ NdrFcShort( 0x8 ), /* 8 */ /* 2586 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2588 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2588 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x3, /* 3 */ /* 2590 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ + 0x5, /* Ext Flags: new corr desc, srv corr check, */ /* 2592 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2594 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2594 */ NdrFcShort( 0x1 ), /* 1 */ /* 2596 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter startOffset */ + /* Parameter offset */ /* 2598 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 2600 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 2602 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter endOffset */ + /* Parameter text */ -/* 2604 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2604 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ /* 2606 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2608 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 2608 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ /* Return value */ @@ -2675,168 +2681,169 @@ /* 2614 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure pasteText */ + /* Procedure cutText */ /* 2616 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 2618 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2622 */ NdrFcShort( 0x7 ), /* 7 */ -/* 2624 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2626 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2622 */ NdrFcShort( 0x6 ), /* 6 */ +/* 2624 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 2626 */ NdrFcShort( 0x10 ), /* 16 */ /* 2628 */ NdrFcShort( 0x8 ), /* 8 */ /* 2630 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 2632 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ /* 2634 */ NdrFcShort( 0x0 ), /* 0 */ /* 2636 */ NdrFcShort( 0x0 ), /* 0 */ /* 2638 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter offset */ + /* Parameter startOffset */ /* 2640 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 2642 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 2644 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Parameter endOffset */ -/* 2646 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2646 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 2648 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 2650 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Return value */ + +/* 2652 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2654 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2656 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure pasteText */ + +/* 2658 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2660 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2664 */ NdrFcShort( 0x7 ), /* 7 */ +/* 2666 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2668 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2670 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2672 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 2674 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 2676 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2678 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2680 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter offset */ + +/* 2682 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2684 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2686 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 2688 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2690 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2692 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure replaceText */ -/* 2652 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2694 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2654 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2658 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2660 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 2662 */ NdrFcShort( 0x10 ), /* 16 */ -/* 2664 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2666 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ +/* 2696 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2700 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2702 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 2704 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2706 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2708 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x4, /* 4 */ -/* 2668 */ 0x8, /* 8 */ +/* 2710 */ 0x8, /* 8 */ 0x5, /* Ext Flags: new corr desc, srv corr check, */ -/* 2670 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2672 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2674 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2712 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2714 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2716 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter startOffset */ -/* 2676 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2678 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2680 */ 0x8, /* FC_LONG */ +/* 2718 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2720 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2722 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2682 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2684 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2686 */ 0x8, /* FC_LONG */ +/* 2724 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2726 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2728 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter text */ -/* 2688 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ -/* 2690 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2692 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ +/* 2730 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2732 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2734 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ /* Return value */ -/* 2694 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2696 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2698 */ 0x8, /* FC_LONG */ +/* 2736 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2738 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 2740 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure setAttributes */ -/* 2700 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2742 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2702 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2706 */ NdrFcShort( 0x9 ), /* 9 */ -/* 2708 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 2710 */ NdrFcShort( 0x10 ), /* 16 */ -/* 2712 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2714 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ +/* 2744 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2748 */ NdrFcShort( 0x9 ), /* 9 */ +/* 2750 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 2752 */ NdrFcShort( 0x10 ), /* 16 */ +/* 2754 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2756 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */ 0x4, /* 4 */ -/* 2716 */ 0x8, /* 8 */ +/* 2758 */ 0x8, /* 8 */ 0x5, /* Ext Flags: new corr desc, srv corr check, */ -/* 2718 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2720 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2722 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2760 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2762 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2764 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter startOffset */ -/* 2724 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2726 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2728 */ 0x8, /* FC_LONG */ +/* 2766 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2768 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2770 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter endOffset */ -/* 2730 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2732 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2734 */ 0x8, /* FC_LONG */ +/* 2772 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2774 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2776 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter attributes */ -/* 2736 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ -/* 2738 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2740 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ - - /* Return value */ - -/* 2742 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2744 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2746 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_anchor */ - -/* 2748 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 2750 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2754 */ NdrFcShort( 0x9 ), /* 9 */ -/* 2756 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2758 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2760 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2762 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 2764 */ 0x8, /* 8 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 2766 */ NdrFcShort( 0x1 ), /* 1 */ -/* 2768 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2770 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter index */ - -/* 2772 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 2774 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2776 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter anchor */ - -/* 2778 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ -/* 2780 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2782 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */ +/* 2778 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */ +/* 2780 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2782 */ NdrFcShort( 0x10e ), /* Type Offset=270 */ /* Return value */ /* 2784 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2786 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2786 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 2788 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_anchorTarget */ + /* Procedure get_anchor */ /* 2790 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 2792 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2796 */ NdrFcShort( 0xa ), /* 10 */ +/* 2796 */ NdrFcShort( 0x9 ), /* 9 */ /* 2798 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 2800 */ NdrFcShort( 0x8 ), /* 8 */ /* 2802 */ NdrFcShort( 0x8 ), /* 8 */ @@ -2855,7 +2862,7 @@ /* 2818 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter anchorTarget */ + /* Parameter anchor */ /* 2820 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ /* 2822 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ @@ -2868,34 +2875,71 @@ /* 2830 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Procedure get_anchorTarget */ + +/* 2832 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 2834 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2838 */ NdrFcShort( 0xa ), /* 10 */ +/* 2840 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 2842 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2844 */ NdrFcShort( 0x8 ), /* 8 */ +/* 2846 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 2848 */ 0x8, /* 8 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 2850 */ NdrFcShort( 0x1 ), /* 1 */ +/* 2852 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2854 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter index */ + +/* 2856 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 2858 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2860 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter anchorTarget */ + +/* 2862 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */ +/* 2864 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2866 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */ + + /* Return value */ + +/* 2868 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2870 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2872 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure get_nRows */ /* Procedure get_startIndex */ -/* 2832 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2874 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2834 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2838 */ NdrFcShort( 0xb ), /* 11 */ -/* 2840 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2842 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2844 */ NdrFcShort( 0x24 ), /* 36 */ -/* 2846 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2876 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2880 */ NdrFcShort( 0xb ), /* 11 */ +/* 2882 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2884 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2886 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2888 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2848 */ 0x8, /* 8 */ +/* 2890 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2850 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2852 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2854 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2892 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2894 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2896 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter rowCount */ /* Parameter index */ -/* 2856 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2858 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2860 */ 0x8, /* FC_LONG */ +/* 2898 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2900 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2902 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -2903,9 +2947,9 @@ /* Return value */ -/* 2862 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2864 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2866 */ 0x8, /* FC_LONG */ +/* 2904 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2906 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2908 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nSelectedChildren */ @@ -2913,29 +2957,29 @@ /* Procedure get_endIndex */ -/* 2868 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2910 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2870 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2874 */ NdrFcShort( 0xc ), /* 12 */ -/* 2876 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2878 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2880 */ NdrFcShort( 0x24 ), /* 36 */ -/* 2882 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2912 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2916 */ NdrFcShort( 0xc ), /* 12 */ +/* 2918 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2920 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2922 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2924 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2884 */ 0x8, /* 8 */ +/* 2926 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2886 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2888 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2890 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2928 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2930 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2932 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter cellCount */ /* Parameter index */ -/* 2892 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2894 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2896 */ 0x8, /* FC_LONG */ +/* 2934 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2936 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2938 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -2943,120 +2987,83 @@ /* Return value */ -/* 2898 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2900 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2902 */ 0x8, /* FC_LONG */ +/* 2940 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2942 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2944 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_valid */ -/* 2904 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2946 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2906 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2910 */ NdrFcShort( 0xd ), /* 13 */ -/* 2912 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2914 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2916 */ NdrFcShort( 0x21 ), /* 33 */ -/* 2918 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2948 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2952 */ NdrFcShort( 0xd ), /* 13 */ +/* 2954 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2956 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2958 */ NdrFcShort( 0x21 ), /* 33 */ +/* 2960 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2920 */ 0x8, /* 8 */ +/* 2962 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2922 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2924 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2926 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2964 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2966 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2968 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter valid */ -/* 2928 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2930 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2932 */ 0x3, /* FC_SMALL */ +/* 2970 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 2972 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 2974 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 2934 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2936 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2938 */ 0x8, /* FC_LONG */ +/* 2976 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 2978 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 2980 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nHyperlinks */ -/* 2940 */ 0x33, /* FC_AUTO_HANDLE */ +/* 2982 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 2942 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2946 */ NdrFcShort( 0x16 ), /* 22 */ -/* 2948 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 2950 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2952 */ NdrFcShort( 0x24 ), /* 36 */ -/* 2954 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 2984 */ NdrFcLong( 0x0 ), /* 0 */ +/* 2988 */ NdrFcShort( 0x16 ), /* 22 */ +/* 2990 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 2992 */ NdrFcShort( 0x0 ), /* 0 */ +/* 2994 */ NdrFcShort( 0x24 ), /* 36 */ +/* 2996 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 2956 */ 0x8, /* 8 */ +/* 2998 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 2958 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2960 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2962 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3000 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3002 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3004 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter hyperlinkCount */ -/* 2964 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 2966 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 2968 */ 0x8, /* FC_LONG */ +/* 3006 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3008 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3010 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 2970 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 2972 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 2974 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_hyperlink */ - -/* 2976 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 2978 */ NdrFcLong( 0x0 ), /* 0 */ -/* 2982 */ NdrFcShort( 0x17 ), /* 23 */ -/* 2984 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 2986 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2988 */ NdrFcShort( 0x8 ), /* 8 */ -/* 2990 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 2992 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 2994 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2996 */ NdrFcShort( 0x0 ), /* 0 */ -/* 2998 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter index */ - -/* 3000 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3002 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3004 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter hyperlink */ - -/* 3006 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3008 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3010 */ NdrFcShort( 0x572 ), /* Type Offset=1394 */ - - /* Return value */ - /* 3012 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3014 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3014 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 3016 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_hyperlinkIndex */ + /* Procedure get_hyperlink */ /* 3018 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3020 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3024 */ NdrFcShort( 0x18 ), /* 24 */ +/* 3024 */ NdrFcShort( 0x17 ), /* 23 */ /* 3026 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 3028 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3030 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3032 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3030 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3032 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x3, /* 3 */ /* 3034 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ @@ -3064,19 +3071,18 @@ /* 3038 */ NdrFcShort( 0x0 ), /* 0 */ /* 3040 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter charIndex */ + /* Parameter index */ /* 3042 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3044 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 3046 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter hyperlinkIndex */ + /* Parameter hyperlink */ -/* 3048 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3048 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ /* 3050 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3052 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3052 */ NdrFcShort( 0x58c ), /* Type Offset=1420 */ /* Return value */ @@ -3085,30 +3091,31 @@ /* 3058 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_hyperlinks */ + /* Procedure get_hyperlinkIndex */ /* 3060 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3062 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3066 */ NdrFcShort( 0x19 ), /* 25 */ +/* 3066 */ NdrFcShort( 0x18 ), /* 24 */ /* 3068 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3070 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3070 */ NdrFcShort( 0x8 ), /* 8 */ /* 3072 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3074 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3074 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x3, /* 3 */ /* 3076 */ 0x8, /* 8 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3078 */ NdrFcShort( 0x1 ), /* 1 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3078 */ NdrFcShort( 0x0 ), /* 0 */ /* 3080 */ NdrFcShort( 0x0 ), /* 0 */ /* 3082 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter hyperlinks */ + /* Parameter charIndex */ -/* 3084 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3084 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3086 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3088 */ NdrFcShort( 0x588 ), /* Type Offset=1416 */ +/* 3088 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ - /* Parameter nHyperlinks */ + /* Parameter hyperlinkIndex */ /* 3090 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3092 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ @@ -3122,34 +3129,71 @@ /* 3100 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Procedure get_hyperlinks */ + +/* 3102 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3104 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3108 */ NdrFcShort( 0x19 ), /* 25 */ +/* 3110 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 3112 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3114 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3116 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ +/* 3118 */ 0x8, /* 8 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3120 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3122 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3124 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter hyperlinks */ + +/* 3126 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3128 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3130 */ NdrFcShort( 0x5a2 ), /* Type Offset=1442 */ + + /* Parameter nHyperlinks */ + +/* 3132 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3134 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3136 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 3138 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3140 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3142 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure get_cellAt */ /* Procedure get_accessibleAt */ -/* 3102 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3144 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3104 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3108 */ NdrFcShort( 0x3 ), /* 3 */ -/* 3110 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 3112 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3114 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3116 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3146 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3150 */ NdrFcShort( 0x3 ), /* 3 */ +/* 3152 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 3154 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3156 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3158 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x4, /* 4 */ -/* 3118 */ 0x8, /* 8 */ +/* 3160 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3120 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3122 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3124 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3162 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3164 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3166 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter row */ /* Parameter row */ -/* 3126 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3128 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3130 */ 0x8, /* FC_LONG */ +/* 3168 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3170 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3172 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter column */ @@ -3157,9 +3201,9 @@ /* Parameter column */ -/* 3132 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3134 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3136 */ 0x8, /* FC_LONG */ +/* 3174 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3176 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3178 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter cell */ @@ -3167,18 +3211,18 @@ /* Parameter accessible */ -/* 3138 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3140 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 3142 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 3180 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3182 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3184 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ /* Return value */ -/* 3144 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3146 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3148 */ 0x8, /* FC_LONG */ +/* 3186 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3188 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 3190 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_caption */ @@ -3186,214 +3230,177 @@ /* Procedure get_caption */ -/* 3150 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3192 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3152 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3156 */ NdrFcShort( 0x4 ), /* 4 */ -/* 3158 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 3160 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3162 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3164 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3194 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3198 */ NdrFcShort( 0x4 ), /* 4 */ +/* 3200 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3202 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3204 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3206 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 3166 */ 0x8, /* 8 */ +/* 3208 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3168 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3170 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3172 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3210 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3212 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3214 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter accessible */ /* Parameter accessible */ -/* 3174 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3176 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3178 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 3216 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3218 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3220 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ /* Return value */ -/* 3180 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3182 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3184 */ 0x8, /* FC_LONG */ +/* 3222 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3224 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3226 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_childIndex */ -/* 3186 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3228 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3188 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3192 */ NdrFcShort( 0x5 ), /* 5 */ -/* 3194 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 3196 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3198 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3200 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3230 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3234 */ NdrFcShort( 0x5 ), /* 5 */ +/* 3236 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 3238 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3240 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3242 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 3202 */ 0x8, /* 8 */ +/* 3244 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3204 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3206 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3208 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3246 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3248 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3250 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter rowIndex */ -/* 3210 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3212 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3214 */ 0x8, /* FC_LONG */ +/* 3252 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3254 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3256 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter columnIndex */ -/* 3216 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3218 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3220 */ 0x8, /* FC_LONG */ +/* 3258 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3260 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3262 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter cellIndex */ -/* 3222 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3224 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 3226 */ 0x8, /* FC_LONG */ +/* 3264 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3266 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3268 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 3228 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3230 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3232 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_columnDescription */ - -/* 3234 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3236 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3240 */ NdrFcShort( 0x6 ), /* 6 */ -/* 3242 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3244 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3246 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3248 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3250 */ 0x8, /* 8 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3252 */ NdrFcShort( 0x1 ), /* 1 */ -/* 3254 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3256 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter column */ - -/* 3258 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3260 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3262 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter description */ - -/* 3264 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 3266 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3268 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - - /* Return value */ - /* 3270 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3272 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3272 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 3274 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_columnExtentAt */ + /* Procedure get_columnDescription */ /* 3276 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3278 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3282 */ NdrFcShort( 0x7 ), /* 7 */ -/* 3284 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 3286 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3288 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3290 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x4, /* 4 */ +/* 3282 */ NdrFcShort( 0x6 ), /* 6 */ +/* 3284 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 3286 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3288 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3290 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ /* 3292 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3294 */ NdrFcShort( 0x0 ), /* 0 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3294 */ NdrFcShort( 0x1 ), /* 1 */ /* 3296 */ NdrFcShort( 0x0 ), /* 0 */ /* 3298 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter row */ + /* Parameter column */ /* 3300 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3302 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 3304 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter column */ + /* Parameter description */ -/* 3306 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3306 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ /* 3308 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3310 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3310 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - /* Parameter nColumnsSpanned */ + /* Return value */ -/* 3312 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3312 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ /* 3314 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 3316 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Procedure get_columnExtentAt */ -/* 3318 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3320 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3322 */ 0x8, /* FC_LONG */ +/* 3318 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3320 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3324 */ NdrFcShort( 0x7 ), /* 7 */ +/* 3326 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 3328 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3330 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3332 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 3334 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3336 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3338 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3340 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 3342 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3344 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3346 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_columnHeader */ + /* Parameter column */ -/* 3324 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3326 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3330 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3332 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3334 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3336 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3338 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3340 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3342 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3344 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3346 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3348 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3350 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3352 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ - /* Parameter accessibleTable */ - -/* 3348 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3350 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3352 */ NdrFcShort( 0x5a6 ), /* Type Offset=1446 */ - - /* Parameter startingRowIndex */ + /* Parameter nColumnsSpanned */ /* 3354 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3356 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3356 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 3358 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ /* 3360 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3362 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3362 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 3364 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_columnIndex */ + /* Procedure get_columnHeader */ /* 3366 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3368 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3372 */ NdrFcShort( 0x9 ), /* 9 */ +/* 3372 */ NdrFcShort( 0x8 ), /* 8 */ /* 3374 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3376 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3376 */ NdrFcShort( 0x0 ), /* 0 */ /* 3378 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3380 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3380 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x3, /* 3 */ /* 3382 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ @@ -3401,14 +3408,13 @@ /* 3386 */ NdrFcShort( 0x0 ), /* 0 */ /* 3388 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter cellIndex */ + /* Parameter accessibleTable */ -/* 3390 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3390 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ /* 3392 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3394 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3394 */ NdrFcShort( 0x5c0 ), /* Type Offset=1472 */ - /* Parameter columnIndex */ + /* Parameter startingRowIndex */ /* 3396 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3398 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ @@ -3422,159 +3428,160 @@ /* 3406 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_nSelectedRows */ - - - /* Procedure get_nColumns */ + /* Procedure get_columnIndex */ /* 3408 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3410 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3414 */ NdrFcShort( 0xa ), /* 10 */ -/* 3416 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 3418 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3414 */ NdrFcShort( 0x9 ), /* 9 */ +/* 3416 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 3418 */ NdrFcShort( 0x8 ), /* 8 */ /* 3420 */ NdrFcShort( 0x24 ), /* 36 */ /* 3422 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 3424 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ /* 3426 */ NdrFcShort( 0x0 ), /* 0 */ /* 3428 */ NdrFcShort( 0x0 ), /* 0 */ /* 3430 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter rowCount */ + /* Parameter cellIndex */ - - /* Parameter columnCount */ - -/* 3432 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3432 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3434 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 3436 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Parameter columnIndex */ - - /* Return value */ - -/* 3438 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3438 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3440 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 3442 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_nSelectedColumns */ - -/* 3444 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3446 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3450 */ NdrFcShort( 0xd ), /* 13 */ -/* 3452 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 3454 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3456 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3458 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ -/* 3460 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3462 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3464 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3466 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter columnCount */ - -/* 3468 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3470 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3472 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - /* Return value */ -/* 3474 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3476 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3478 */ 0x8, /* FC_LONG */ +/* 3444 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3446 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3448 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nSelectedRows */ -/* 3480 */ 0x33, /* FC_AUTO_HANDLE */ + + /* Procedure get_nColumns */ + +/* 3450 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3482 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3486 */ NdrFcShort( 0xe ), /* 14 */ -/* 3488 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 3490 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3492 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3494 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3452 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3456 */ NdrFcShort( 0xa ), /* 10 */ +/* 3458 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3460 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3462 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3464 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 3496 */ 0x8, /* 8 */ +/* 3466 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3498 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3500 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3502 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3468 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3470 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3472 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter rowCount */ -/* 3504 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3506 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3508 */ 0x8, /* FC_LONG */ + + /* Parameter columnCount */ + +/* 3474 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3476 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3478 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 3510 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3512 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ + + /* Return value */ + +/* 3480 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3482 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3484 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_nSelectedColumns */ + +/* 3486 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3488 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3492 */ NdrFcShort( 0xd ), /* 13 */ +/* 3494 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3496 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3498 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3500 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3502 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3504 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3506 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3508 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter columnCount */ + +/* 3510 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3512 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 3514 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowDescription */ + /* Return value */ -/* 3516 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3518 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3522 */ NdrFcShort( 0xf ), /* 15 */ -/* 3524 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3526 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3528 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3530 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3532 */ 0x8, /* 8 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3534 */ NdrFcShort( 0x1 ), /* 1 */ -/* 3536 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3538 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter row */ - -/* 3540 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3542 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3544 */ 0x8, /* FC_LONG */ +/* 3516 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3518 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3520 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter description */ + /* Procedure get_nSelectedRows */ -/* 3546 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 3548 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3550 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 3522 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3524 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3528 */ NdrFcShort( 0xe ), /* 14 */ +/* 3530 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3532 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3534 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3536 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 3538 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3540 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3542 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3544 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter rowCount */ + +/* 3546 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3548 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3550 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ /* Return value */ /* 3552 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3554 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3554 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 3556 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowExtentAt */ + /* Procedure get_rowDescription */ /* 3558 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3560 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3564 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3566 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 3568 */ NdrFcShort( 0x10 ), /* 16 */ -/* 3570 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3572 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x4, /* 4 */ +/* 3564 */ NdrFcShort( 0xf ), /* 15 */ +/* 3566 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 3568 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3570 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3572 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ /* 3574 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3576 */ NdrFcShort( 0x0 ), /* 0 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3576 */ NdrFcShort( 0x1 ), /* 1 */ /* 3578 */ NdrFcShort( 0x0 ), /* 0 */ /* 3580 */ NdrFcShort( 0x0 ), /* 0 */ @@ -3585,74 +3592,74 @@ /* 3586 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter column */ + /* Parameter description */ -/* 3588 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3588 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ /* 3590 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3592 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3592 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - /* Parameter nRowsSpanned */ + /* Return value */ -/* 3594 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3594 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ /* 3596 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 3598 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Return value */ + /* Procedure get_rowExtentAt */ -/* 3600 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3602 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3604 */ 0x8, /* FC_LONG */ +/* 3600 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3602 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3606 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3608 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 3610 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3612 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3614 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 3616 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3618 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3620 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3622 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 3624 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3626 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3628 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowHeader */ + /* Parameter column */ -/* 3606 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3608 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3612 */ NdrFcShort( 0x11 ), /* 17 */ -/* 3614 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3616 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3618 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3620 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 3622 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3624 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3626 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3628 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3630 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3632 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3634 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ - /* Parameter accessibleTable */ - -/* 3630 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3632 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3634 */ NdrFcShort( 0x5a6 ), /* Type Offset=1446 */ - - /* Parameter startingColumnIndex */ + /* Parameter nRowsSpanned */ /* 3636 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3638 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3638 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 3640 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ /* 3642 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3644 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3644 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 3646 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowIndex */ + /* Procedure get_rowHeader */ /* 3648 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3650 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3654 */ NdrFcShort( 0x12 ), /* 18 */ +/* 3654 */ NdrFcShort( 0x11 ), /* 17 */ /* 3656 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3658 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3658 */ NdrFcShort( 0x0 ), /* 0 */ /* 3660 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3662 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 3662 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x3, /* 3 */ /* 3664 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ @@ -3660,14 +3667,13 @@ /* 3668 */ NdrFcShort( 0x0 ), /* 0 */ /* 3670 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter cellIndex */ + /* Parameter accessibleTable */ -/* 3672 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3672 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ /* 3674 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3676 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 3676 */ NdrFcShort( 0x5c0 ), /* Type Offset=1472 */ - /* Parameter rowIndex */ + /* Parameter startingColumnIndex */ /* 3678 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3680 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ @@ -3681,212 +3687,212 @@ /* 3688 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_selectedChildren */ + /* Procedure get_rowIndex */ /* 3690 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3692 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3696 */ NdrFcShort( 0x13 ), /* 19 */ -/* 3698 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 3696 */ NdrFcShort( 0x12 ), /* 18 */ +/* 3698 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 3700 */ NdrFcShort( 0x8 ), /* 8 */ /* 3702 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3704 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x4, /* 4 */ +/* 3704 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ /* 3706 */ 0x8, /* 8 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3708 */ NdrFcShort( 0x1 ), /* 1 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 3708 */ NdrFcShort( 0x0 ), /* 0 */ /* 3710 */ NdrFcShort( 0x0 ), /* 0 */ /* 3712 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter maxChildren */ + /* Parameter cellIndex */ /* 3714 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3716 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ /* 3718 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter children */ + /* Parameter rowIndex */ -/* 3720 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3720 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 3722 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3724 */ NdrFcShort( 0x5bc ), /* Type Offset=1468 */ +/* 3724 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ - /* Parameter nChildren */ + /* Return value */ -/* 3726 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3726 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ /* 3728 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 3730 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Procedure get_selectedChildren */ + +/* 3732 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3734 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3738 */ NdrFcShort( 0x13 ), /* 19 */ +/* 3740 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 3742 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3744 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3746 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x4, /* 4 */ +/* 3748 */ 0x8, /* 8 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 3750 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3752 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3754 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter maxChildren */ + +/* 3756 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3758 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3760 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter children */ + +/* 3762 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3764 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3766 */ NdrFcShort( 0x5d6 ), /* Type Offset=1494 */ + + /* Parameter nChildren */ + +/* 3768 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3770 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3772 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Return value */ -/* 3732 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3734 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3736 */ 0x8, /* FC_LONG */ +/* 3774 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3776 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 3778 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_selectedColumns */ -/* 3738 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3780 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3740 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3744 */ NdrFcShort( 0x14 ), /* 20 */ -/* 3746 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 3748 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3750 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3752 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3782 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3786 */ NdrFcShort( 0x14 ), /* 20 */ +/* 3788 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 3790 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3792 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3794 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x4, /* 4 */ -/* 3754 */ 0x8, /* 8 */ +/* 3796 */ 0x8, /* 8 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3756 */ NdrFcShort( 0x1 ), /* 1 */ -/* 3758 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3760 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3798 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3800 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3802 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter maxColumns */ -/* 3762 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3764 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3766 */ 0x8, /* FC_LONG */ +/* 3804 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3806 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3808 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter columns */ -/* 3768 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ -/* 3770 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3772 */ NdrFcShort( 0x5bc ), /* Type Offset=1468 */ +/* 3810 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3812 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3814 */ NdrFcShort( 0x5d6 ), /* Type Offset=1494 */ /* Parameter nColumns */ -/* 3774 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3776 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 3778 */ 0x8, /* FC_LONG */ +/* 3816 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3818 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3820 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 3780 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3782 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3784 */ 0x8, /* FC_LONG */ +/* 3822 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3824 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 3826 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_selectedRows */ -/* 3786 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3828 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3788 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3792 */ NdrFcShort( 0x15 ), /* 21 */ -/* 3794 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 3796 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3798 */ NdrFcShort( 0x24 ), /* 36 */ -/* 3800 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3830 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3834 */ NdrFcShort( 0x15 ), /* 21 */ +/* 3836 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 3838 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3840 */ NdrFcShort( 0x24 ), /* 36 */ +/* 3842 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x4, /* 4 */ -/* 3802 */ 0x8, /* 8 */ +/* 3844 */ 0x8, /* 8 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 3804 */ NdrFcShort( 0x1 ), /* 1 */ -/* 3806 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3808 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3846 */ NdrFcShort( 0x1 ), /* 1 */ +/* 3848 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3850 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter maxRows */ -/* 3810 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3812 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3814 */ 0x8, /* FC_LONG */ +/* 3852 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 3854 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3856 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter rows */ -/* 3816 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ -/* 3818 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3820 */ NdrFcShort( 0x5bc ), /* Type Offset=1468 */ +/* 3858 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 3860 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3862 */ NdrFcShort( 0x5d6 ), /* Type Offset=1494 */ /* Parameter nRows */ -/* 3822 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3824 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 3826 */ 0x8, /* FC_LONG */ +/* 3864 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3866 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3868 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 3828 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3830 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3832 */ 0x8, /* FC_LONG */ +/* 3870 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3872 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 3874 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_summary */ -/* 3834 */ 0x33, /* FC_AUTO_HANDLE */ +/* 3876 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 3836 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3840 */ NdrFcShort( 0x16 ), /* 22 */ -/* 3842 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 3844 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3846 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3848 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 3878 */ NdrFcLong( 0x0 ), /* 0 */ +/* 3882 */ NdrFcShort( 0x16 ), /* 22 */ +/* 3884 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3886 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3888 */ NdrFcShort( 0x8 ), /* 8 */ +/* 3890 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 3850 */ 0x8, /* 8 */ +/* 3892 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 3852 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3854 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3856 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3894 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3896 */ NdrFcShort( 0x0 ), /* 0 */ +/* 3898 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter accessible */ -/* 3858 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 3860 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3862 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ - - /* Return value */ - -/* 3864 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3866 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3868 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_isColumnSelected */ - -/* 3870 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 3872 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3876 */ NdrFcShort( 0x17 ), /* 23 */ -/* 3878 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 3880 */ NdrFcShort( 0x8 ), /* 8 */ -/* 3882 */ NdrFcShort( 0x21 ), /* 33 */ -/* 3884 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 3886 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 3888 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3890 */ NdrFcShort( 0x0 ), /* 0 */ -/* 3892 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter column */ - -/* 3894 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3896 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 3898 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter isSelected */ - -/* 3900 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3902 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3904 */ 0x3, /* FC_SMALL */ - 0x0, /* 0 */ +/* 3900 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 3902 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 3904 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ /* 3906 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3908 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3908 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 3910 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isRowSelected */ + /* Procedure get_isColumnSelected */ /* 3912 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3914 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3918 */ NdrFcShort( 0x18 ), /* 24 */ +/* 3918 */ NdrFcShort( 0x17 ), /* 23 */ /* 3920 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 3922 */ NdrFcShort( 0x8 ), /* 8 */ /* 3924 */ NdrFcShort( 0x21 ), /* 33 */ @@ -3898,7 +3904,7 @@ /* 3932 */ NdrFcShort( 0x0 ), /* 0 */ /* 3934 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter row */ + /* Parameter column */ /* 3936 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 3938 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ @@ -3919,17 +3925,17 @@ /* 3952 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isSelected */ + /* Procedure get_isRowSelected */ /* 3954 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 3956 */ NdrFcLong( 0x0 ), /* 0 */ -/* 3960 */ NdrFcShort( 0x19 ), /* 25 */ -/* 3962 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 3964 */ NdrFcShort( 0x10 ), /* 16 */ +/* 3960 */ NdrFcShort( 0x18 ), /* 24 */ +/* 3962 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 3964 */ NdrFcShort( 0x8 ), /* 8 */ /* 3966 */ NdrFcShort( 0x21 ), /* 33 */ /* 3968 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x4, /* 4 */ + 0x3, /* 3 */ /* 3970 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ /* 3972 */ NdrFcShort( 0x0 ), /* 0 */ @@ -3943,245 +3949,283 @@ /* 3982 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Parameter column */ - -/* 3984 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 3986 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 3988 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - /* Parameter isSelected */ -/* 3990 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 3992 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 3994 */ 0x3, /* FC_SMALL */ +/* 3984 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 3986 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 3988 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 3996 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 3998 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 4000 */ 0x8, /* FC_LONG */ +/* 3990 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 3992 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 3994 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isSelected */ + +/* 3996 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 3998 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4002 */ NdrFcShort( 0x19 ), /* 25 */ +/* 4004 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 4006 */ NdrFcShort( 0x10 ), /* 16 */ +/* 4008 */ NdrFcShort( 0x21 ), /* 33 */ +/* 4010 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x4, /* 4 */ +/* 4012 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4014 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4016 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4018 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 4020 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4022 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4024 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter column */ + +/* 4026 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4028 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4030 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Parameter isSelected */ + +/* 4032 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4034 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4036 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4038 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4040 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 4042 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure selectRow */ -/* 4002 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4044 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4004 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4008 */ NdrFcShort( 0x1a ), /* 26 */ -/* 4010 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4012 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4014 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4016 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4046 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4050 */ NdrFcShort( 0x1a ), /* 26 */ +/* 4052 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4054 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4056 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4058 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4018 */ 0x8, /* 8 */ +/* 4060 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4020 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4022 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4024 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4062 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4064 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4066 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter row */ -/* 4026 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4028 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4030 */ 0x8, /* FC_LONG */ +/* 4068 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4070 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4072 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4032 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4034 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4036 */ 0x8, /* FC_LONG */ +/* 4074 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4076 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4078 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure selectColumn */ -/* 4038 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4080 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4040 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4044 */ NdrFcShort( 0x1b ), /* 27 */ -/* 4046 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4048 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4050 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4052 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4082 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4086 */ NdrFcShort( 0x1b ), /* 27 */ +/* 4088 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4090 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4092 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4094 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4054 */ 0x8, /* 8 */ +/* 4096 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4056 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4058 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4060 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4098 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4100 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4102 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter column */ -/* 4062 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4064 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4066 */ 0x8, /* FC_LONG */ +/* 4104 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4106 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4108 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4068 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4070 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4072 */ 0x8, /* FC_LONG */ +/* 4110 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4112 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4114 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure unselectRow */ -/* 4074 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4116 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4076 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4080 */ NdrFcShort( 0x1c ), /* 28 */ -/* 4082 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4084 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4086 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4088 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4118 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4122 */ NdrFcShort( 0x1c ), /* 28 */ +/* 4124 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4126 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4128 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4130 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4090 */ 0x8, /* 8 */ +/* 4132 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4092 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4094 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4096 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4134 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4136 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4138 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter row */ -/* 4098 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4100 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4102 */ 0x8, /* FC_LONG */ +/* 4140 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4142 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4144 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4104 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4106 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4108 */ 0x8, /* FC_LONG */ +/* 4146 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4148 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4150 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure unselectColumn */ -/* 4110 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4152 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4112 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4116 */ NdrFcShort( 0x1d ), /* 29 */ -/* 4118 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4120 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4122 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4124 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4154 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4158 */ NdrFcShort( 0x1d ), /* 29 */ +/* 4160 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4162 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4164 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4166 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4126 */ 0x8, /* 8 */ +/* 4168 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4128 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4130 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4132 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4170 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4172 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4174 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter column */ -/* 4134 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4136 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4138 */ 0x8, /* FC_LONG */ +/* 4176 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4178 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4180 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4140 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4142 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4144 */ 0x8, /* FC_LONG */ +/* 4182 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4184 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4186 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_rowColumnExtentsAtIndex */ -/* 4146 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4188 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4148 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4152 */ NdrFcShort( 0x1e ), /* 30 */ -/* 4154 */ NdrFcShort( 0x20 ), /* x86 Stack size/offset = 32 */ -/* 4156 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4158 */ NdrFcShort( 0x91 ), /* 145 */ -/* 4160 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4190 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4194 */ NdrFcShort( 0x1e ), /* 30 */ +/* 4196 */ NdrFcShort( 0x20 ), /* x86 Stack size/offset = 32 */ +/* 4198 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4200 */ NdrFcShort( 0x91 ), /* 145 */ +/* 4202 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x7, /* 7 */ -/* 4162 */ 0x8, /* 8 */ +/* 4204 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4164 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4166 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4168 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4206 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4208 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4210 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter index */ -/* 4170 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4172 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4174 */ 0x8, /* FC_LONG */ +/* 4212 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4214 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4216 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter row */ -/* 4176 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4178 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4180 */ 0x8, /* FC_LONG */ +/* 4218 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4220 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4222 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter column */ -/* 4182 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4184 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4186 */ 0x8, /* FC_LONG */ +/* 4224 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4226 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4228 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter rowExtents */ -/* 4188 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4190 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 4192 */ 0x8, /* FC_LONG */ +/* 4230 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4232 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 4234 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter columnExtents */ -/* 4194 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4196 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 4198 */ 0x8, /* FC_LONG */ +/* 4236 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4238 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 4240 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter isSelected */ -/* 4200 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4202 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ -/* 4204 */ 0x3, /* FC_SMALL */ +/* 4242 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4244 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 4246 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 4206 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4208 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ -/* 4210 */ 0x8, /* FC_LONG */ +/* 4248 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4250 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ +/* 4252 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_modelChange */ -/* 4212 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4254 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4214 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4218 */ NdrFcShort( 0x1f ), /* 31 */ -/* 4220 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4222 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4224 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4226 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 4256 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4260 */ NdrFcShort( 0x1f ), /* 31 */ +/* 4262 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4264 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4266 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4268 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 4228 */ 0x8, /* 8 */ +/* 4270 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4230 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4232 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4234 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4272 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4274 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4276 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter modelChange */ -/* 4236 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 4238 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4240 */ NdrFcShort( 0x5da ), /* Type Offset=1498 */ +/* 4278 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 4280 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4282 */ NdrFcShort( 0x5f4 ), /* Type Offset=1524 */ /* Return value */ -/* 4242 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4244 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4246 */ 0x8, /* FC_LONG */ +/* 4284 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4286 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4288 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_rowExtent */ @@ -4189,29 +4233,29 @@ /* Procedure get_nColumns */ -/* 4248 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4290 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4250 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4254 */ NdrFcShort( 0x6 ), /* 6 */ -/* 4256 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4258 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4260 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4262 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4292 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4296 */ NdrFcShort( 0x6 ), /* 6 */ +/* 4298 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4300 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4302 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4304 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4264 */ 0x8, /* 8 */ +/* 4306 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4266 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4268 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4270 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4308 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4310 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4312 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter nRowsSpanned */ /* Parameter columnCount */ -/* 4272 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4274 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4276 */ 0x8, /* FC_LONG */ +/* 4314 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4316 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4318 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -4219,9 +4263,9 @@ /* Return value */ -/* 4278 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4280 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4282 */ 0x8, /* FC_LONG */ +/* 4320 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4322 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4324 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_rowIndex */ @@ -4229,29 +4273,29 @@ /* Procedure get_nSelectedCells */ -/* 4284 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4326 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4286 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4290 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4292 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4294 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4296 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4298 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4328 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4332 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4334 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4336 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4338 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4340 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4300 */ 0x8, /* 8 */ +/* 4342 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4302 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4304 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4306 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4344 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4346 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4348 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter rowIndex */ /* Parameter cellCount */ -/* 4308 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4310 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4312 */ 0x8, /* FC_LONG */ +/* 4350 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4352 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4354 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ @@ -4259,88 +4303,51 @@ /* Return value */ -/* 4314 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4316 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4318 */ 0x8, /* FC_LONG */ +/* 4356 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4358 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4360 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_nSelectedColumns */ -/* 4320 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4362 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4322 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4326 */ NdrFcShort( 0x9 ), /* 9 */ -/* 4328 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4330 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4332 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4334 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4364 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4368 */ NdrFcShort( 0x9 ), /* 9 */ +/* 4370 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4372 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4374 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4376 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4336 */ 0x8, /* 8 */ +/* 4378 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4338 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4340 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4342 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4380 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4382 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4384 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter columnCount */ -/* 4344 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4346 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4348 */ 0x8, /* FC_LONG */ +/* 4386 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4388 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4390 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4350 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4352 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4354 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_rowDescription */ - -/* 4356 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 4358 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4362 */ NdrFcShort( 0xb ), /* 11 */ -/* 4364 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 4366 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4368 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4370 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 4372 */ 0x8, /* 8 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 4374 */ NdrFcShort( 0x1 ), /* 1 */ -/* 4376 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4378 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter row */ - -/* 4380 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4382 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4384 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter description */ - -/* 4386 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 4388 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4390 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ - - /* Return value */ - /* 4392 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4394 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4394 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 4396 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_selectedCells */ + /* Procedure get_rowDescription */ /* 4398 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4400 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4404 */ NdrFcShort( 0xc ), /* 12 */ +/* 4404 */ NdrFcShort( 0xb ), /* 11 */ /* 4406 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 4408 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4410 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4408 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4410 */ NdrFcShort( 0x8 ), /* 8 */ /* 4412 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x3, /* 3 */ /* 4414 */ 0x8, /* 8 */ @@ -4349,19 +4356,19 @@ /* 4418 */ NdrFcShort( 0x0 ), /* 0 */ /* 4420 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter cells */ + /* Parameter row */ -/* 4422 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ +/* 4422 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 4424 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4426 */ NdrFcShort( 0x5e8 ), /* Type Offset=1512 */ - - /* Parameter nSelectedCells */ - -/* 4428 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4430 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4432 */ 0x8, /* FC_LONG */ +/* 4426 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Parameter description */ + +/* 4428 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 4430 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4432 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + /* Return value */ /* 4434 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ @@ -4369,12 +4376,12 @@ /* 4438 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_selectedColumns */ + /* Procedure get_selectedCells */ /* 4440 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4442 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4446 */ NdrFcShort( 0xd ), /* 13 */ +/* 4446 */ NdrFcShort( 0xc ), /* 12 */ /* 4448 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 4450 */ NdrFcShort( 0x0 ), /* 0 */ /* 4452 */ NdrFcShort( 0x24 ), /* 36 */ @@ -4386,13 +4393,13 @@ /* 4460 */ NdrFcShort( 0x0 ), /* 0 */ /* 4462 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter selectedColumns */ + /* Parameter cells */ /* 4464 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 4466 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4468 */ NdrFcShort( 0x606 ), /* Type Offset=1542 */ +/* 4468 */ NdrFcShort( 0x602 ), /* Type Offset=1538 */ - /* Parameter nColumns */ + /* Parameter nSelectedCells */ /* 4470 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 4472 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ @@ -4406,12 +4413,12 @@ /* 4480 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_selectedRows */ + /* Procedure get_selectedColumns */ /* 4482 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4484 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4488 */ NdrFcShort( 0xe ), /* 14 */ +/* 4488 */ NdrFcShort( 0xd ), /* 13 */ /* 4490 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 4492 */ NdrFcShort( 0x0 ), /* 0 */ /* 4494 */ NdrFcShort( 0x24 ), /* 36 */ @@ -4423,13 +4430,13 @@ /* 4502 */ NdrFcShort( 0x0 ), /* 0 */ /* 4504 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter selectedRows */ + /* Parameter selectedColumns */ /* 4506 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 4508 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4510 */ NdrFcShort( 0x606 ), /* Type Offset=1542 */ +/* 4510 */ NdrFcShort( 0x620 ), /* Type Offset=1568 */ - /* Parameter nRows */ + /* Parameter nColumns */ /* 4512 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 4514 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ @@ -4443,80 +4450,79 @@ /* 4522 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_summary */ + /* Procedure get_selectedRows */ /* 4524 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4526 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4530 */ NdrFcShort( 0xf ), /* 15 */ -/* 4532 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4530 */ NdrFcShort( 0xe ), /* 14 */ +/* 4532 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 4534 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4536 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4536 */ NdrFcShort( 0x24 ), /* 36 */ /* 4538 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 4540 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 4542 */ NdrFcShort( 0x0 ), /* 0 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 4542 */ NdrFcShort( 0x1 ), /* 1 */ /* 4544 */ NdrFcShort( 0x0 ), /* 0 */ /* 4546 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter accessible */ + /* Parameter selectedRows */ -/* 4548 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 4548 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 4550 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4552 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 4552 */ NdrFcShort( 0x620 ), /* Type Offset=1568 */ - /* Return value */ + /* Parameter nRows */ -/* 4554 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4554 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 4556 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 4558 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isColumnSelected */ + /* Return value */ -/* 4560 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4560 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4562 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4564 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_summary */ + +/* 4566 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4562 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4566 */ NdrFcShort( 0x10 ), /* 16 */ -/* 4568 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 4570 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4572 */ NdrFcShort( 0x21 ), /* 33 */ -/* 4574 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 4576 */ 0x8, /* 8 */ +/* 4568 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4572 */ NdrFcShort( 0xf ), /* 15 */ +/* 4574 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4576 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4578 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4580 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 4582 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4578 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4580 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4582 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4584 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4586 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4588 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter column */ + /* Parameter accessible */ -/* 4584 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4586 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4588 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter isSelected */ - -/* 4590 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4592 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4594 */ 0x3, /* FC_SMALL */ - 0x0, /* 0 */ +/* 4590 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 4592 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4594 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ /* 4596 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4598 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4598 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 4600 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isRowSelected */ + /* Procedure get_isColumnSelected */ /* 4602 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4604 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4608 */ NdrFcShort( 0x11 ), /* 17 */ +/* 4608 */ NdrFcShort( 0x10 ), /* 16 */ /* 4610 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 4612 */ NdrFcShort( 0x8 ), /* 8 */ /* 4614 */ NdrFcShort( 0x21 ), /* 33 */ @@ -4528,7 +4534,7 @@ /* 4622 */ NdrFcShort( 0x0 ), /* 0 */ /* 4624 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter row */ + /* Parameter column */ /* 4626 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ /* 4628 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ @@ -4549,17 +4555,17 @@ /* 4642 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure selectRow */ + /* Procedure get_isRowSelected */ /* 4644 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4646 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4650 */ NdrFcShort( 0x12 ), /* 18 */ -/* 4652 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4650 */ NdrFcShort( 0x11 ), /* 17 */ +/* 4652 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 4654 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4656 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4656 */ NdrFcShort( 0x21 ), /* 33 */ /* 4658 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ + 0x3, /* 3 */ /* 4660 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ /* 4662 */ NdrFcShort( 0x0 ), /* 0 */ @@ -4573,179 +4579,180 @@ /* 4672 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Parameter isSelected */ + +/* 4674 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4676 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4678 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + /* Return value */ -/* 4674 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4676 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4678 */ 0x8, /* FC_LONG */ +/* 4680 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4682 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4684 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure selectRow */ + +/* 4686 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4688 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4692 */ NdrFcShort( 0x12 ), /* 18 */ +/* 4694 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4696 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4698 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4700 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4702 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4704 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4706 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4708 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter row */ + +/* 4710 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4712 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4714 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4716 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4718 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4720 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure selectColumn */ -/* 4680 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4722 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4682 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4686 */ NdrFcShort( 0x13 ), /* 19 */ -/* 4688 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4690 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4692 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4694 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4724 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4728 */ NdrFcShort( 0x13 ), /* 19 */ +/* 4730 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4732 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4734 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4736 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4696 */ 0x8, /* 8 */ +/* 4738 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4698 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4700 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4702 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4740 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4742 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4744 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter column */ -/* 4704 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4706 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4708 */ 0x8, /* FC_LONG */ +/* 4746 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4748 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4750 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4710 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4712 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4714 */ 0x8, /* FC_LONG */ +/* 4752 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4754 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4756 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure unselectRow */ -/* 4716 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4758 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4718 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4722 */ NdrFcShort( 0x14 ), /* 20 */ -/* 4724 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4726 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4728 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4730 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4760 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4764 */ NdrFcShort( 0x14 ), /* 20 */ +/* 4766 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4768 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4770 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4772 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4732 */ 0x8, /* 8 */ +/* 4774 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4734 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4736 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4738 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4776 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4778 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4780 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter row */ -/* 4740 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4742 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4744 */ 0x8, /* FC_LONG */ +/* 4782 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4784 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4786 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4746 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4748 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4750 */ 0x8, /* FC_LONG */ +/* 4788 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4790 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4792 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure unselectColumn */ -/* 4752 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4794 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4754 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4758 */ NdrFcShort( 0x15 ), /* 21 */ -/* 4760 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4762 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4764 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4766 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4796 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4800 */ NdrFcShort( 0x15 ), /* 21 */ +/* 4802 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4804 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4806 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4808 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x2, /* 2 */ -/* 4768 */ 0x8, /* 8 */ +/* 4810 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4770 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4772 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4774 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4812 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4814 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4816 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter column */ -/* 4776 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 4778 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4780 */ 0x8, /* FC_LONG */ +/* 4818 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 4820 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4822 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ -/* 4782 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4784 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4786 */ 0x8, /* FC_LONG */ +/* 4824 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4826 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4828 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_modelChange */ -/* 4788 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4830 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4790 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4794 */ NdrFcShort( 0x16 ), /* 22 */ -/* 4796 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4798 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4800 */ NdrFcShort( 0x8 ), /* 8 */ -/* 4802 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 4832 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4836 */ NdrFcShort( 0x16 ), /* 22 */ +/* 4838 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4840 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4842 */ NdrFcShort( 0x8 ), /* 8 */ +/* 4844 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 4804 */ 0x8, /* 8 */ +/* 4846 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4806 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4808 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4810 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4848 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4850 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4852 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter modelChange */ -/* 4812 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ -/* 4814 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4816 */ NdrFcShort( 0x5da ), /* Type Offset=1498 */ - - /* Return value */ - -/* 4818 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4820 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4822 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_columnHeaderCells */ - -/* 4824 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 4826 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4830 */ NdrFcShort( 0x4 ), /* 4 */ -/* 4832 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 4834 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4836 */ NdrFcShort( 0x24 ), /* 36 */ -/* 4838 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x3, /* 3 */ -/* 4840 */ 0x8, /* 8 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 4842 */ NdrFcShort( 0x1 ), /* 1 */ -/* 4844 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4846 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter cellAccessibles */ - -/* 4848 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ -/* 4850 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4852 */ NdrFcShort( 0x5e8 ), /* Type Offset=1512 */ - - /* Parameter nColumnHeaderCells */ - -/* 4854 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4856 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4858 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ +/* 4854 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */ +/* 4856 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4858 */ NdrFcShort( 0x5f4 ), /* Type Offset=1524 */ /* Return value */ /* 4860 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 4862 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4862 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 4864 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_rowHeaderCells */ + /* Procedure get_columnHeaderCells */ /* 4866 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4868 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4872 */ NdrFcShort( 0x7 ), /* 7 */ +/* 4872 */ NdrFcShort( 0x4 ), /* 4 */ /* 4874 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 4876 */ NdrFcShort( 0x0 ), /* 0 */ /* 4878 */ NdrFcShort( 0x24 ), /* 36 */ @@ -4761,9 +4768,9 @@ /* 4890 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 4892 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4894 */ NdrFcShort( 0x5e8 ), /* Type Offset=1512 */ +/* 4894 */ NdrFcShort( 0x602 ), /* Type Offset=1538 */ - /* Parameter nRowHeaderCells */ + /* Parameter nColumnHeaderCells */ /* 4896 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 4898 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ @@ -4777,297 +4784,334 @@ /* 4906 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_isSelected */ + /* Procedure get_rowHeaderCells */ /* 4908 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 4910 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4914 */ NdrFcShort( 0x9 ), /* 9 */ -/* 4916 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4914 */ NdrFcShort( 0x7 ), /* 7 */ +/* 4916 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 4918 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4920 */ NdrFcShort( 0x21 ), /* 33 */ -/* 4922 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x2, /* 2 */ +/* 4920 */ NdrFcShort( 0x24 ), /* 36 */ +/* 4922 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x3, /* 3 */ /* 4924 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 4926 */ NdrFcShort( 0x0 ), /* 0 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 4926 */ NdrFcShort( 0x1 ), /* 1 */ /* 4928 */ NdrFcShort( 0x0 ), /* 0 */ /* 4930 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter isSelected */ + /* Parameter cellAccessibles */ -/* 4932 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4932 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */ /* 4934 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4936 */ 0x3, /* FC_SMALL */ - 0x0, /* 0 */ +/* 4936 */ NdrFcShort( 0x602 ), /* Type Offset=1538 */ - /* Return value */ + /* Parameter nRowHeaderCells */ -/* 4938 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4938 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 4940 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 4942 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ + /* Return value */ + +/* 4944 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4946 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4948 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_isSelected */ + +/* 4950 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 4952 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4956 */ NdrFcShort( 0x9 ), /* 9 */ +/* 4958 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 4960 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4962 */ NdrFcShort( 0x21 ), /* 33 */ +/* 4964 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x2, /* 2 */ +/* 4966 */ 0x8, /* 8 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 4968 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4970 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4972 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter isSelected */ + +/* 4974 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 4976 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 4978 */ 0x3, /* FC_SMALL */ + 0x0, /* 0 */ + + /* Return value */ + +/* 4980 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 4982 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 4984 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + /* Procedure get_rowColumnExtents */ -/* 4944 */ 0x33, /* FC_AUTO_HANDLE */ +/* 4986 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 4946 */ NdrFcLong( 0x0 ), /* 0 */ -/* 4950 */ NdrFcShort( 0xa ), /* 10 */ -/* 4952 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ -/* 4954 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4956 */ NdrFcShort( 0x91 ), /* 145 */ -/* 4958 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 4988 */ NdrFcLong( 0x0 ), /* 0 */ +/* 4992 */ NdrFcShort( 0xa ), /* 10 */ +/* 4994 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */ +/* 4996 */ NdrFcShort( 0x0 ), /* 0 */ +/* 4998 */ NdrFcShort( 0x91 ), /* 145 */ +/* 5000 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x6, /* 6 */ -/* 4960 */ 0x8, /* 8 */ +/* 5002 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 4962 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4964 */ NdrFcShort( 0x0 ), /* 0 */ -/* 4966 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5004 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5006 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5008 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter row */ -/* 4968 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4970 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 4972 */ 0x8, /* FC_LONG */ +/* 5010 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5012 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 5014 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter column */ -/* 4974 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4976 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 4978 */ 0x8, /* FC_LONG */ +/* 5016 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5018 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 5020 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter rowExtents */ -/* 4980 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4982 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 4984 */ 0x8, /* FC_LONG */ +/* 5022 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5024 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 5026 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter columnExtents */ -/* 4986 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4988 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 4990 */ 0x8, /* FC_LONG */ +/* 5028 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5030 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ +/* 5032 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter isSelected */ -/* 4992 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 4994 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 4996 */ 0x3, /* FC_SMALL */ +/* 5034 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5036 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 5038 */ 0x3, /* FC_SMALL */ 0x0, /* 0 */ /* Return value */ -/* 4998 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5000 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ -/* 5002 */ 0x8, /* FC_LONG */ +/* 5040 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5042 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */ +/* 5044 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_table */ -/* 5004 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5046 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5006 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5010 */ NdrFcShort( 0xb ), /* 11 */ -/* 5012 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 5014 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5016 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5018 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 5048 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5052 */ NdrFcShort( 0xb ), /* 11 */ +/* 5054 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 5056 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5058 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5060 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 5020 */ 0x8, /* 8 */ +/* 5062 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5022 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5024 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5026 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5064 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5066 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5068 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter table */ -/* 5028 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 5030 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 5032 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 5070 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 5072 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 5074 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ -/* 5034 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5036 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 5038 */ 0x8, /* FC_LONG */ +/* 5076 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5078 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 5080 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_imagePosition */ -/* 5040 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5082 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5042 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5046 */ NdrFcShort( 0x4 ), /* 4 */ -/* 5048 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ -/* 5050 */ NdrFcShort( 0x6 ), /* 6 */ -/* 5052 */ NdrFcShort( 0x40 ), /* 64 */ -/* 5054 */ 0x44, /* Oi2 Flags: has return, has ext, */ +/* 5084 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5088 */ NdrFcShort( 0x4 ), /* 4 */ +/* 5090 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */ +/* 5092 */ NdrFcShort( 0x6 ), /* 6 */ +/* 5094 */ NdrFcShort( 0x40 ), /* 64 */ +/* 5096 */ 0x44, /* Oi2 Flags: has return, has ext, */ 0x4, /* 4 */ -/* 5056 */ 0x8, /* 8 */ +/* 5098 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5058 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5060 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5062 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5100 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5102 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5104 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter coordinateType */ -/* 5064 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ -/* 5066 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 5068 */ 0xd, /* FC_ENUM16 */ +/* 5106 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */ +/* 5108 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 5110 */ 0xd, /* FC_ENUM16 */ 0x0, /* 0 */ /* Parameter x */ -/* 5070 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5072 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 5074 */ 0x8, /* FC_LONG */ +/* 5112 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ +/* 5114 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 5116 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Parameter y */ -/* 5076 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5078 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 5080 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Return value */ - -/* 5082 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5084 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 5086 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Procedure get_imageSize */ - -/* 5088 */ 0x33, /* FC_AUTO_HANDLE */ - 0x6c, /* Old Flags: object, Oi2 */ -/* 5090 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5094 */ NdrFcShort( 0x5 ), /* 5 */ -/* 5096 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ -/* 5098 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5100 */ NdrFcShort( 0x40 ), /* 64 */ -/* 5102 */ 0x44, /* Oi2 Flags: has return, has ext, */ - 0x3, /* 3 */ -/* 5104 */ 0x8, /* 8 */ - 0x1, /* Ext Flags: new corr desc, */ -/* 5106 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5108 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5110 */ NdrFcShort( 0x0 ), /* 0 */ - - /* Parameter height */ - -/* 5112 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5114 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 5116 */ 0x8, /* FC_LONG */ - 0x0, /* 0 */ - - /* Parameter width */ - /* 5118 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ -/* 5120 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 5120 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ /* 5122 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Return value */ /* 5124 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5126 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 5126 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 5128 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_toolkitName */ + /* Procedure get_imageSize */ /* 5130 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ /* 5132 */ NdrFcLong( 0x0 ), /* 0 */ /* 5136 */ NdrFcShort( 0x5 ), /* 5 */ -/* 5138 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 5138 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */ /* 5140 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5142 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5144 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ - 0x2, /* 2 */ +/* 5142 */ NdrFcShort( 0x40 ), /* 64 */ +/* 5144 */ 0x44, /* Oi2 Flags: has return, has ext, */ + 0x3, /* 3 */ /* 5146 */ 0x8, /* 8 */ - 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 5148 */ NdrFcShort( 0x1 ), /* 1 */ + 0x1, /* Ext Flags: new corr desc, */ +/* 5148 */ NdrFcShort( 0x0 ), /* 0 */ /* 5150 */ NdrFcShort( 0x0 ), /* 0 */ /* 5152 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter name */ + /* Parameter height */ -/* 5154 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 5154 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5156 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 5158 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 5158 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ - /* Return value */ + /* Parameter width */ -/* 5160 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5160 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */ /* 5162 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ /* 5164 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ - /* Procedure get_toolkitVersion */ + /* Return value */ -/* 5166 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5166 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5168 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 5170 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_toolkitName */ + +/* 5172 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5168 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5172 */ NdrFcShort( 0x6 ), /* 6 */ -/* 5174 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 5176 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5178 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5180 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 5174 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5178 */ NdrFcShort( 0x5 ), /* 5 */ +/* 5180 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 5182 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5184 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5186 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 5182 */ 0x8, /* 8 */ +/* 5188 */ 0x8, /* 8 */ 0x3, /* Ext Flags: new corr desc, clt corr check, */ -/* 5184 */ NdrFcShort( 0x1 ), /* 1 */ -/* 5186 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5188 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5190 */ NdrFcShort( 0x1 ), /* 1 */ +/* 5192 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5194 */ NdrFcShort( 0x0 ), /* 0 */ - /* Parameter version */ + /* Parameter name */ -/* 5190 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ -/* 5192 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 5194 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ +/* 5196 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 5198 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 5200 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ /* Return value */ -/* 5196 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5198 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 5200 */ 0x8, /* FC_LONG */ +/* 5202 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5204 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 5206 */ 0x8, /* FC_LONG */ + 0x0, /* 0 */ + + /* Procedure get_toolkitVersion */ + +/* 5208 */ 0x33, /* FC_AUTO_HANDLE */ + 0x6c, /* Old Flags: object, Oi2 */ +/* 5210 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5214 */ NdrFcShort( 0x6 ), /* 6 */ +/* 5216 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 5218 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5220 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5222 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ + 0x2, /* 2 */ +/* 5224 */ 0x8, /* 8 */ + 0x3, /* Ext Flags: new corr desc, clt corr check, */ +/* 5226 */ NdrFcShort( 0x1 ), /* 1 */ +/* 5228 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5230 */ NdrFcShort( 0x0 ), /* 0 */ + + /* Parameter version */ + +/* 5232 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */ +/* 5234 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 5236 */ NdrFcShort( 0x20 ), /* Type Offset=32 */ + + /* Return value */ + +/* 5238 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5240 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 5242 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ /* Procedure get_anchorTarget */ -/* 5202 */ 0x33, /* FC_AUTO_HANDLE */ +/* 5244 */ 0x33, /* FC_AUTO_HANDLE */ 0x6c, /* Old Flags: object, Oi2 */ -/* 5204 */ NdrFcLong( 0x0 ), /* 0 */ -/* 5208 */ NdrFcShort( 0x3 ), /* 3 */ -/* 5210 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 5212 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5214 */ NdrFcShort( 0x8 ), /* 8 */ -/* 5216 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ +/* 5246 */ NdrFcLong( 0x0 ), /* 0 */ +/* 5250 */ NdrFcShort( 0x3 ), /* 3 */ +/* 5252 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 5254 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5256 */ NdrFcShort( 0x8 ), /* 8 */ +/* 5258 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */ 0x2, /* 2 */ -/* 5218 */ 0x8, /* 8 */ +/* 5260 */ 0x8, /* 8 */ 0x1, /* Ext Flags: new corr desc, */ -/* 5220 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5222 */ NdrFcShort( 0x0 ), /* 0 */ -/* 5224 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5262 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5264 */ NdrFcShort( 0x0 ), /* 0 */ +/* 5266 */ NdrFcShort( 0x0 ), /* 0 */ /* Parameter accessible */ -/* 5226 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ -/* 5228 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 5230 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ +/* 5268 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */ +/* 5270 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 5272 */ NdrFcShort( 0x2e ), /* Type Offset=46 */ /* Return value */ -/* 5232 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ -/* 5234 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 5236 */ 0x8, /* FC_LONG */ +/* 5274 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */ +/* 5276 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 5278 */ 0x8, /* FC_LONG */ 0x0, /* 0 */ 0x0 @@ -6007,163 +6051,181 @@ /* 1350 */ 0x5c, /* FC_PAD */ 0x5b, /* FC_END */ /* 1352 */ + 0x11, 0x0, /* FC_RP */ +/* 1354 */ NdrFcShort( 0x2 ), /* Offset= 2 (1356) */ +/* 1356 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 1358 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1360 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 1362 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1364 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1366 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 1370 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1372 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1374 */ NdrFcShort( 0xffc0 ), /* Offset= -64 (1310) */ +/* 1376 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1378 */ 0x12, 0x0, /* FC_UP */ -/* 1354 */ NdrFcShort( 0xff90 ), /* Offset= -112 (1242) */ -/* 1356 */ 0xb4, /* FC_USER_MARSHAL */ +/* 1380 */ NdrFcShort( 0xff76 ), /* Offset= -138 (1242) */ +/* 1382 */ 0xb4, /* FC_USER_MARSHAL */ 0x83, /* 131 */ -/* 1358 */ NdrFcShort( 0x2 ), /* 2 */ -/* 1360 */ NdrFcShort( 0x10 ), /* 16 */ -/* 1362 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1364 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1352) */ -/* 1366 */ +/* 1384 */ NdrFcShort( 0x2 ), /* 2 */ +/* 1386 */ NdrFcShort( 0x10 ), /* 16 */ +/* 1388 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1390 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1378) */ +/* 1392 */ 0x11, 0x4, /* FC_RP [alloced_on_stack] */ -/* 1368 */ NdrFcShort( 0x2 ), /* Offset= 2 (1370) */ -/* 1370 */ +/* 1394 */ NdrFcShort( 0x2 ), /* Offset= 2 (1396) */ +/* 1396 */ 0x1a, /* FC_BOGUS_STRUCT */ 0x3, /* 3 */ -/* 1372 */ NdrFcShort( 0xc ), /* 12 */ -/* 1374 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1376 */ NdrFcShort( 0x0 ), /* Offset= 0 (1376) */ -/* 1378 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 1398 */ NdrFcShort( 0xc ), /* 12 */ +/* 1400 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1402 */ NdrFcShort( 0x0 ), /* Offset= 0 (1402) */ +/* 1404 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ 0x0, /* 0 */ -/* 1380 */ NdrFcShort( 0xfabc ), /* Offset= -1348 (32) */ -/* 1382 */ 0x8, /* FC_LONG */ +/* 1406 */ NdrFcShort( 0xfaa2 ), /* Offset= -1374 (32) */ +/* 1408 */ 0x8, /* FC_LONG */ 0x8, /* FC_LONG */ -/* 1384 */ 0x5c, /* FC_PAD */ +/* 1410 */ 0x5c, /* FC_PAD */ 0x5b, /* FC_END */ -/* 1386 */ +/* 1412 */ 0x11, 0x0, /* FC_RP */ -/* 1388 */ NdrFcShort( 0xfba2 ), /* Offset= -1118 (270) */ -/* 1390 */ - 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ -/* 1392 */ 0x3, /* FC_SMALL */ - 0x5c, /* FC_PAD */ -/* 1394 */ - 0x11, 0x10, /* FC_RP [pointer_deref] */ -/* 1396 */ NdrFcShort( 0x2 ), /* Offset= 2 (1398) */ -/* 1398 */ - 0x2f, /* FC_IP */ - 0x5a, /* FC_CONSTANT_IID */ -/* 1400 */ NdrFcLong( 0x1c20f2b ), /* 29495083 */ -/* 1404 */ NdrFcShort( 0x3dd2 ), /* 15826 */ -/* 1406 */ NdrFcShort( 0x400f ), /* 16399 */ -/* 1408 */ 0x94, /* 148 */ - 0x9f, /* 159 */ -/* 1410 */ 0xad, /* 173 */ - 0x0, /* 0 */ -/* 1412 */ 0xbd, /* 189 */ - 0xab, /* 171 */ -/* 1414 */ 0x1d, /* 29 */ - 0x41, /* 65 */ +/* 1414 */ NdrFcShort( 0xfb88 ), /* Offset= -1144 (270) */ /* 1416 */ - 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ -/* 1418 */ NdrFcShort( 0x2 ), /* Offset= 2 (1420) */ + 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */ +/* 1418 */ 0x3, /* FC_SMALL */ + 0x5c, /* FC_PAD */ /* 1420 */ - 0x13, 0x0, /* FC_OP */ + 0x11, 0x10, /* FC_RP [pointer_deref] */ /* 1422 */ NdrFcShort( 0x2 ), /* Offset= 2 (1424) */ /* 1424 */ - 0x21, /* FC_BOGUS_ARRAY */ - 0x3, /* 3 */ -/* 1426 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1428 */ 0x28, /* Corr desc: parameter, FC_LONG */ - 0x54, /* FC_DEREFERENCE */ -/* 1430 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1432 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1434 */ NdrFcLong( 0xffffffff ), /* -1 */ -/* 1438 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1440 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ - 0x0, /* 0 */ -/* 1442 */ NdrFcShort( 0xffd4 ), /* Offset= -44 (1398) */ -/* 1444 */ 0x5c, /* FC_PAD */ - 0x5b, /* FC_END */ -/* 1446 */ - 0x11, 0x10, /* FC_RP [pointer_deref] */ -/* 1448 */ NdrFcShort( 0x2 ), /* Offset= 2 (1450) */ -/* 1450 */ 0x2f, /* FC_IP */ 0x5a, /* FC_CONSTANT_IID */ -/* 1452 */ NdrFcLong( 0x35ad8070 ), /* 900563056 */ -/* 1456 */ NdrFcShort( 0xc20c ), /* -15860 */ -/* 1458 */ NdrFcShort( 0x4fb4 ), /* 20404 */ -/* 1460 */ 0xb0, /* 176 */ - 0x94, /* 148 */ -/* 1462 */ 0xf4, /* 244 */ - 0xf7, /* 247 */ -/* 1464 */ 0x27, /* 39 */ - 0x5d, /* 93 */ -/* 1466 */ 0xd4, /* 212 */ - 0x69, /* 105 */ -/* 1468 */ +/* 1426 */ NdrFcLong( 0x1c20f2b ), /* 29495083 */ +/* 1430 */ NdrFcShort( 0x3dd2 ), /* 15826 */ +/* 1432 */ NdrFcShort( 0x400f ), /* 16399 */ +/* 1434 */ 0x94, /* 148 */ + 0x9f, /* 159 */ +/* 1436 */ 0xad, /* 173 */ + 0x0, /* 0 */ +/* 1438 */ 0xbd, /* 189 */ + 0xab, /* 171 */ +/* 1440 */ 0x1d, /* 29 */ + 0x41, /* 65 */ +/* 1442 */ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ -/* 1470 */ NdrFcShort( 0x2 ), /* Offset= 2 (1472) */ -/* 1472 */ +/* 1444 */ NdrFcShort( 0x2 ), /* Offset= 2 (1446) */ +/* 1446 */ 0x13, 0x0, /* FC_OP */ -/* 1474 */ NdrFcShort( 0x2 ), /* Offset= 2 (1476) */ -/* 1476 */ - 0x1c, /* FC_CVARRAY */ - 0x3, /* 3 */ -/* 1478 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1480 */ 0x28, /* Corr desc: parameter, FC_LONG */ - 0x0, /* */ -/* 1482 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ -/* 1484 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ -/* 1486 */ 0x28, /* Corr desc: parameter, FC_LONG */ - 0x54, /* FC_DEREFERENCE */ -/* 1488 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ -/* 1490 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1492 */ 0x8, /* FC_LONG */ - 0x5b, /* FC_END */ -/* 1494 */ - 0x11, 0x4, /* FC_RP [alloced_on_stack] */ -/* 1496 */ NdrFcShort( 0x2 ), /* Offset= 2 (1498) */ -/* 1498 */ - 0x1a, /* FC_BOGUS_STRUCT */ - 0x3, /* 3 */ -/* 1500 */ NdrFcShort( 0x14 ), /* 20 */ -/* 1502 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1504 */ NdrFcShort( 0x0 ), /* Offset= 0 (1504) */ -/* 1506 */ 0xd, /* FC_ENUM16 */ - 0x8, /* FC_LONG */ -/* 1508 */ 0x8, /* FC_LONG */ - 0x8, /* FC_LONG */ -/* 1510 */ 0x8, /* FC_LONG */ - 0x5b, /* FC_END */ -/* 1512 */ - 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ -/* 1514 */ NdrFcShort( 0x2 ), /* Offset= 2 (1516) */ -/* 1516 */ - 0x13, 0x0, /* FC_OP */ -/* 1518 */ NdrFcShort( 0x2 ), /* Offset= 2 (1520) */ -/* 1520 */ +/* 1448 */ NdrFcShort( 0x2 ), /* Offset= 2 (1450) */ +/* 1450 */ 0x21, /* FC_BOGUS_ARRAY */ 0x3, /* 3 */ -/* 1522 */ NdrFcShort( 0x0 ), /* 0 */ -/* 1524 */ 0x28, /* Corr desc: parameter, FC_LONG */ +/* 1452 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1454 */ 0x28, /* Corr desc: parameter, FC_LONG */ 0x54, /* FC_DEREFERENCE */ -/* 1526 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1528 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1530 */ NdrFcLong( 0xffffffff ), /* -1 */ -/* 1534 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1536 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ +/* 1456 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1458 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1460 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 1464 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1466 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ 0x0, /* 0 */ -/* 1538 */ NdrFcShort( 0xfa30 ), /* Offset= -1488 (50) */ -/* 1540 */ 0x5c, /* FC_PAD */ +/* 1468 */ NdrFcShort( 0xffd4 ), /* Offset= -44 (1424) */ +/* 1470 */ 0x5c, /* FC_PAD */ 0x5b, /* FC_END */ -/* 1542 */ +/* 1472 */ + 0x11, 0x10, /* FC_RP [pointer_deref] */ +/* 1474 */ NdrFcShort( 0x2 ), /* Offset= 2 (1476) */ +/* 1476 */ + 0x2f, /* FC_IP */ + 0x5a, /* FC_CONSTANT_IID */ +/* 1478 */ NdrFcLong( 0x35ad8070 ), /* 900563056 */ +/* 1482 */ NdrFcShort( 0xc20c ), /* -15860 */ +/* 1484 */ NdrFcShort( 0x4fb4 ), /* 20404 */ +/* 1486 */ 0xb0, /* 176 */ + 0x94, /* 148 */ +/* 1488 */ 0xf4, /* 244 */ + 0xf7, /* 247 */ +/* 1490 */ 0x27, /* 39 */ + 0x5d, /* 93 */ +/* 1492 */ 0xd4, /* 212 */ + 0x69, /* 105 */ +/* 1494 */ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1496 */ NdrFcShort( 0x2 ), /* Offset= 2 (1498) */ +/* 1498 */ + 0x13, 0x0, /* FC_OP */ +/* 1500 */ NdrFcShort( 0x2 ), /* Offset= 2 (1502) */ +/* 1502 */ + 0x1c, /* FC_CVARRAY */ + 0x3, /* 3 */ +/* 1504 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1506 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x0, /* */ +/* 1508 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */ +/* 1510 */ NdrFcShort( 0x1 ), /* Corr flags: early, */ +/* 1512 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 1514 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */ +/* 1516 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1518 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 1520 */ + 0x11, 0x4, /* FC_RP [alloced_on_stack] */ +/* 1522 */ NdrFcShort( 0x2 ), /* Offset= 2 (1524) */ +/* 1524 */ + 0x1a, /* FC_BOGUS_STRUCT */ + 0x3, /* 3 */ +/* 1526 */ NdrFcShort( 0x14 ), /* 20 */ +/* 1528 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1530 */ NdrFcShort( 0x0 ), /* Offset= 0 (1530) */ +/* 1532 */ 0xd, /* FC_ENUM16 */ + 0x8, /* FC_LONG */ +/* 1534 */ 0x8, /* FC_LONG */ + 0x8, /* FC_LONG */ +/* 1536 */ 0x8, /* FC_LONG */ + 0x5b, /* FC_END */ +/* 1538 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1540 */ NdrFcShort( 0x2 ), /* Offset= 2 (1542) */ +/* 1542 */ + 0x13, 0x0, /* FC_OP */ /* 1544 */ NdrFcShort( 0x2 ), /* Offset= 2 (1546) */ /* 1546 */ + 0x21, /* FC_BOGUS_ARRAY */ + 0x3, /* 3 */ +/* 1548 */ NdrFcShort( 0x0 ), /* 0 */ +/* 1550 */ 0x28, /* Corr desc: parameter, FC_LONG */ + 0x54, /* FC_DEREFERENCE */ +/* 1552 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1554 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1556 */ NdrFcLong( 0xffffffff ), /* -1 */ +/* 1560 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1562 */ 0x4c, /* FC_EMBEDDED_COMPLEX */ + 0x0, /* 0 */ +/* 1564 */ NdrFcShort( 0xfa16 ), /* Offset= -1514 (50) */ +/* 1566 */ 0x5c, /* FC_PAD */ + 0x5b, /* FC_END */ +/* 1568 */ + 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */ +/* 1570 */ NdrFcShort( 0x2 ), /* Offset= 2 (1572) */ +/* 1572 */ 0x13, 0x0, /* FC_OP */ -/* 1548 */ NdrFcShort( 0x2 ), /* Offset= 2 (1550) */ -/* 1550 */ +/* 1574 */ NdrFcShort( 0x2 ), /* Offset= 2 (1576) */ +/* 1576 */ 0x1b, /* FC_CARRAY */ 0x3, /* 3 */ -/* 1552 */ NdrFcShort( 0x4 ), /* 4 */ -/* 1554 */ 0x28, /* Corr desc: parameter, FC_LONG */ +/* 1578 */ NdrFcShort( 0x4 ), /* 4 */ +/* 1580 */ 0x28, /* Corr desc: parameter, FC_LONG */ 0x54, /* FC_DEREFERENCE */ -/* 1556 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ -/* 1558 */ NdrFcShort( 0x0 ), /* Corr flags: */ -/* 1560 */ 0x8, /* FC_LONG */ +/* 1582 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */ +/* 1584 */ NdrFcShort( 0x0 ), /* Corr flags: */ +/* 1586 */ 0x8, /* FC_LONG */ 0x5b, /* FC_END */ 0x0 @@ -6909,7 +6971,204 @@ }; -/* Standard interface: __MIDL_itf_ia2_api_all_0000_0005, ver. 0.0, +/* Object interface: IAccessible2_4, ver. 0.0, + GUID={0x610a7bec,0x91bb,0x444d,{0xa3,0x36,0xa0,0xda,0xf1,0x3c,0x4c,0x29}} */ + +#pragma code_seg(".orpc") +static const unsigned short IAccessible2_4_FormatStringOffsetTable[] = + { + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + (unsigned short) -1, + 450, + 486, + 528, + 576, + 612, + 648, + 696, + 744, + 780, + 816, + 852, + 888, + 936, + 984, + 1020, + 1056, + 1092, + 1128, + 1164, + 1206, + 1248, + 1302, + 1344 + }; + +static const MIDL_STUBLESS_PROXY_INFO IAccessible2_4_ProxyInfo = + { + &Object_StubDesc, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessible2_4_FormatStringOffsetTable[-3], + 0, + 0, + 0 + }; + + +static const MIDL_SERVER_INFO IAccessible2_4_ServerInfo = + { + &Object_StubDesc, + 0, + ia2_api_all__MIDL_ProcFormatString.Format, + &IAccessible2_4_FormatStringOffsetTable[-3], + 0, + 0, + 0, + 0}; +CINTERFACE_PROXY_VTABLE(51) _IAccessible2_4ProxyVtbl = +{ + &IAccessible2_4_ProxyInfo, + &IID_IAccessible2_4, + IUnknown_QueryInterface_Proxy, + IUnknown_AddRef_Proxy, + IUnknown_Release_Proxy , + 0 /* IDispatch::GetTypeInfoCount */ , + 0 /* IDispatch::GetTypeInfo */ , + 0 /* IDispatch::GetIDsOfNames */ , + 0 /* IDispatch_Invoke_Proxy */ , + 0 /* IAccessible::get_accParent */ , + 0 /* IAccessible::get_accChildCount */ , + 0 /* IAccessible::get_accChild */ , + 0 /* IAccessible::get_accName */ , + 0 /* IAccessible::get_accValue */ , + 0 /* IAccessible::get_accDescription */ , + 0 /* IAccessible::get_accRole */ , + 0 /* IAccessible::get_accState */ , + 0 /* IAccessible::get_accHelp */ , + 0 /* IAccessible::get_accHelpTopic */ , + 0 /* IAccessible::get_accKeyboardShortcut */ , + 0 /* IAccessible::get_accFocus */ , + 0 /* IAccessible::get_accSelection */ , + 0 /* IAccessible::get_accDefaultAction */ , + 0 /* IAccessible::accSelect */ , + 0 /* IAccessible::accLocation */ , + 0 /* IAccessible::accNavigate */ , + 0 /* IAccessible::accHitTest */ , + 0 /* IAccessible::accDoDefaultAction */ , + 0 /* IAccessible::put_accName */ , + 0 /* IAccessible::put_accValue */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ , + (void *) (INT_PTR) -1 /* IAccessible2::role */ , + (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ , + (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_states */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ , + (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */ , + (void *) (INT_PTR) -1 /* IAccessible2_2::get_attribute */ , + (void *) (INT_PTR) -1 /* IAccessible2_2::get_accessibleWithCaret */ , + (void *) (INT_PTR) -1 /* IAccessible2_2::get_relationTargetsOfType */ , + (void *) (INT_PTR) -1 /* IAccessible2_3::get_selectionRanges */ , + (void *) (INT_PTR) -1 /* IAccessible2_4::setSelectionRanges */ +}; + + +static const PRPC_STUB_FUNCTION IAccessible2_4_table[] = +{ + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + STUB_FORWARDING_FUNCTION, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2, + NdrStubCall2 +}; + +CInterfaceStubVtbl _IAccessible2_4StubVtbl = +{ + &IID_IAccessible2_4, + &IAccessible2_4_ServerInfo, + 51, + &IAccessible2_4_table[-3], + CStdStubBuffer_DELEGATING_METHODS +}; + + +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0006, ver. 0.0, GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ @@ -6919,8 +7178,8 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleComponent_FormatStringOffsetTable[] = { - 1344, 1386, + 1428, 72 }; @@ -6973,10 +7232,10 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleValue_FormatStringOffsetTable[] = { - 1422, - 1458, - 1494, - 1530 + 1464, + 1500, + 1536, + 1572 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo = @@ -7023,7 +7282,7 @@ }; -/* Standard interface: __MIDL_itf_ia2_api_all_0000_0007, ver. 0.0, +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0008, ver. 0.0, GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ @@ -7033,25 +7292,25 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleText_FormatStringOffsetTable[] = { - 1566, 1608, + 1650, 72, - 1662, - 1728, - 1764, - 1818, - 1866, - 1914, - 1974, - 2034, - 2094, - 2130, - 2166, - 2214, - 2250, - 2298, - 2358, - 2394 + 1704, + 1770, + 1806, + 1860, + 1908, + 1956, + 2016, + 2076, + 2136, + 2172, + 2208, + 2256, + 2292, + 2340, + 2400, + 2436 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo = @@ -7119,26 +7378,26 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleText2_FormatStringOffsetTable[] = { - 1566, 1608, + 1650, 72, - 1662, - 1728, - 1764, - 1818, - 1866, - 1914, - 1974, - 2034, - 2094, - 2130, - 2166, - 2214, - 2250, - 2298, - 2358, - 2394, - 2430 + 1704, + 1770, + 1806, + 1860, + 1908, + 1956, + 2016, + 2076, + 2136, + 2172, + 2208, + 2256, + 2292, + 2340, + 2400, + 2436, + 2472 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleText2_ProxyInfo = @@ -7207,13 +7466,13 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleEditableText_FormatStringOffsetTable[] = { - 1566, - 2490, + 1608, 2532, 2574, 2616, - 2652, - 2700 + 2658, + 2694, + 2742 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo = @@ -7275,11 +7534,11 @@ 312, 366, 408, - 2748, 2790, 2832, - 2868, - 2904 + 2874, + 2910, + 2946 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo = @@ -7339,28 +7598,28 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleHypertext_FormatStringOffsetTable[] = { - 1566, 1608, + 1650, 72, - 1662, - 1728, - 1764, - 1818, - 1866, - 1914, - 1974, - 2034, - 2094, - 2130, - 2166, - 2214, - 2250, - 2298, - 2358, - 2394, - 2940, - 2976, - 3018 + 1704, + 1770, + 1806, + 1860, + 1908, + 1956, + 2016, + 2076, + 2136, + 2172, + 2208, + 2256, + 2292, + 2340, + 2400, + 2436, + 2982, + 3018, + 3060 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo = @@ -7431,29 +7690,29 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleHypertext2_FormatStringOffsetTable[] = { - 1566, 1608, + 1650, 72, - 1662, - 1728, - 1764, - 1818, - 1866, - 1914, - 1974, - 2034, - 2094, - 2130, - 2166, - 2214, - 2250, - 2298, - 2358, - 2394, - 2940, - 2976, + 1704, + 1770, + 1806, + 1860, + 1908, + 1956, + 2016, + 2076, + 2136, + 2172, + 2208, + 2256, + 2292, + 2340, + 2400, + 2436, + 2982, 3018, - 3060 + 3060, + 3102 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext2_ProxyInfo = @@ -7525,35 +7784,35 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleTable_FormatStringOffsetTable[] = { - 3102, - 3150, - 3186, - 3234, + 3144, + 3192, + 3228, 3276, - 3324, + 3318, 3366, 3408, - 2832, - 2868, - 3444, - 3480, - 3516, + 3450, + 2874, + 2910, + 3486, + 3522, 3558, - 3606, + 3600, 3648, 3690, - 3738, - 3786, - 3834, - 3870, + 3732, + 3780, + 3828, + 3876, 3912, 3954, - 4002, - 4038, - 4074, - 4110, - 4146, - 4212 + 3996, + 4044, + 4080, + 4116, + 4152, + 4188, + 4254 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo = @@ -7631,26 +7890,26 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleTable2_FormatStringOffsetTable[] = { - 3102, - 3150, + 3144, + 3192, 270, - 4248, - 1728, - 4284, - 4320, - 3408, - 4356, + 4290, + 1770, + 4326, + 4362, + 3450, 4398, 4440, 4482, 4524, - 4560, + 4566, 4602, 4644, - 4680, - 4716, - 4752, - 4788 + 4686, + 4722, + 4758, + 4794, + 4830 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo = @@ -7720,14 +7979,14 @@ static const unsigned short IAccessibleTableCell_FormatStringOffsetTable[] = { 198, - 4824, - 72, - 4248, 4866, - 4284, + 72, + 4290, 4908, - 4944, - 5004 + 4326, + 4950, + 4986, + 5046 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo = @@ -7786,8 +8045,8 @@ static const unsigned short IAccessibleImage_FormatStringOffsetTable[] = { 0, - 5040, - 5088 + 5082, + 5130 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo = @@ -7833,7 +8092,7 @@ }; -/* Standard interface: __MIDL_itf_ia2_api_all_0000_0017, ver. 0.0, +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0018, ver. 0.0, GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ @@ -7845,8 +8104,8 @@ { 0, 36, - 5130, - 5166 + 5172, + 5208 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo = @@ -7899,7 +8158,7 @@ #pragma code_seg(".orpc") static const unsigned short IAccessibleDocument_FormatStringOffsetTable[] = { - 5202 + 5244 }; static const MIDL_STUBLESS_PROXY_INFO IAccessibleDocument_ProxyInfo = @@ -7943,7 +8202,7 @@ }; -/* Standard interface: __MIDL_itf_ia2_api_all_0000_0019, ver. 0.0, +/* Standard interface: __MIDL_itf_ia2_api_all_0000_0020, ver. 0.0, GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */ static const MIDL_STUB_DESC Object_StubDesc = @@ -7989,6 +8248,7 @@ ( CInterfaceProxyVtbl *) &_IAccessibleText2ProxyVtbl, ( CInterfaceProxyVtbl *) &_IAccessibleDocumentProxyVtbl, ( CInterfaceProxyVtbl *) &_IAccessible2_2ProxyVtbl, + ( CInterfaceProxyVtbl *) &_IAccessible2_4ProxyVtbl, ( CInterfaceProxyVtbl *) &_IAccessibleRelationProxyVtbl, ( CInterfaceProxyVtbl *) &_IAccessibleTextProxyVtbl, 0 @@ -8013,6 +8273,7 @@ ( CInterfaceStubVtbl *) &_IAccessibleText2StubVtbl, ( CInterfaceStubVtbl *) &_IAccessibleDocumentStubVtbl, ( CInterfaceStubVtbl *) &_IAccessible2_2StubVtbl, + ( CInterfaceStubVtbl *) &_IAccessible2_4StubVtbl, ( CInterfaceStubVtbl *) &_IAccessibleRelationStubVtbl, ( CInterfaceStubVtbl *) &_IAccessibleTextStubVtbl, 0 @@ -8037,6 +8298,7 @@ "IAccessibleText2", "IAccessibleDocument", "IAccessible2_2", + "IAccessible2_4", "IAccessibleRelation", "IAccessibleText", 0 @@ -8061,6 +8323,7 @@ 0, 0, &IID_IAccessible, + &IID_IAccessible, 0, 0, 0 @@ -8073,12 +8336,12 @@ { IID_BS_LOOKUP_SETUP - IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 19, 16 ) + IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 20, 16 ) IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 8 ) IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 4 ) IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 2 ) IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 1 ) - IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 19, *pIndex ) + IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 20, *pIndex ) } @@ -8089,7 +8352,7 @@ (const PCInterfaceName * ) & _ia2_api_all_InterfaceNamesList, (const IID ** ) & _ia2_api_all_BaseIIDList, & _ia2_api_all_IID_Lookup, - 19, + 20, 2, 0, /* table of [async_uuid] interfaces */ 0, /* Filler1 */
diff --git a/tools/grit/grit/tool/newgrd.py b/tools/grit/grit/tool/newgrd.py index 24c863f..385a806 100644 --- a/tools/grit/grit/tool/newgrd.py +++ b/tools/grit/grit/tool/newgrd.py
@@ -76,7 +76,7 @@ if len(args) != 1: print 'This tool requires exactly one argument, the name of the output file.' return 2 - filename = my_arguments[0] + filename = args[0] with util.WrapOutputStream(open(filename, 'w'), 'utf-8') as out: out.write(_FILE_CONTENTS) print "Wrote file %s" % filename
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index cf63c57..5239200 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -31137,6 +31137,7 @@ <int value="-1261263046" label="RemoveUsageOfDeprecatedGaiaSigninEndpoint:disabled"/> <int value="-1259901957" label="VrBrowserKeyboard:disabled"/> + <int value="-1256823053" label="WebRtcHWVP9Encoding:enabled"/> <int value="-1255427595" label="HomePageButtonForceEnabled:enabled"/> <int value="-1254070521" label="enable-slimming-paint-invalidation"/> <int value="-1253608371" label="IncognitoStrings:disabled"/> @@ -32064,6 +32065,7 @@ <int value="392782890" label="SafeBrowsingTelemetryForApkDownloads:enabled"/> <int value="393704200" label="account-consistency"/> <int value="398903399" label="GenericSensorExtraClasses:disabled"/> + <int value="399039205" label="enable-webrtc-hw-vp9-encoding"/> <int value="400272381" label="LazyFrameLoading:disabled"/> <int value="400322063" label="ash-disable-screen-orientation-lock"/> <int value="401983950" label="enable-spdy4"/> @@ -32354,6 +32356,7 @@ label="OmniboxUIExperimentElideSuggestionUrlAfterHost:enabled"/> <int value="908523940" label="PassiveEventListenersDueToFling:disabled"/> <int value="909439558" label="disable-device-discovery"/> + <int value="910725730" label="WebRtcHWVP9Encoding:disabled"/> <int value="912119426" label="InfiniteSessionRestore:disabled"/> <int value="913138924" label="RecurrentInterstitialFeature:disabled"/> <int value="916316159" label="disable-new-app-list-mixer"/> @@ -45729,7 +45732,7 @@ label="resource_coordinator.mojom.FrameCoordinationUnit"/> <int value="1374541190" label="payments.mojom.PaymentManager"/> <int value="1416694600" label="payments.mojom.PaymentRequest"/> - <int value="1419976867" label="blink.mojom.DedicatedWorkerFactory"/> + <int value="1419976867" label="blink.mojom.DedicatedWorkerHostFactory"/> <int value="1448556545" label="content.mojom.InputInjector"/> <int value="1548931182" label="shape_detection.mojom.FaceDetectionProvider"/> <int value="1558900994" label="device.mojom.NFC"/> @@ -53054,12 +53057,13 @@ <enum name="UnifiedConsentSyncAndGoogleServicesSettings"> <int value="0" label="None of the services are enabled"/> - <int value="1" label="(Obsolete)'Sync and all Google services' is enabled"/> - <int value="2" label="'Activity and interactions' is enabled"/> + <int value="1" label="(Obsolete) 'Sync and all Google services' is enabled"/> + <int value="2" label="(Obsolete) 'Activity and interactions' is enabled"/> <int value="3" label="'Make searches and browsing better' is enabled"/> - <int value="4" label="'Safe browsing extended reporting' is enabled"/> - <int value="5" label="'Enhanced spell check' is enabled"/> - <int value="6" label="All services were enabled during opt-in"/> + <int value="4" + label="(Obsolete) 'Safe browsing extended reporting' is enabled"/> + <int value="5" label="(Obsolete) 'Enhanced spell check' is enabled"/> + <int value="6" label="(Obsolete) All services were enabled during opt-in"/> </enum> <enum name="UnifiedConsentSyncDataTypesOffAfterAdvancedOptIn">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index a185bd8..860e6cd 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -2167,6 +2167,18 @@ </summary> </histogram> +<histogram name="Android.Language.WrongLanguageAfterResume" enum="Boolean" + expires_after="2019-08-01"> + <owner>tiborg@chromium.org</owner> + <owner>digit@chromium.org</owner> + <summary> + Reports whether Chrome was started in a language other than the system + language but we support the system language. That can happen if the user + changes the system language and the required language split cannot be + installed in time. + </summary> +</histogram> + <histogram name="Android.MainActivity.ExplicitMainViewIntentDispatched.OnCreate" enum="BooleanDispatched"> @@ -12065,6 +12077,16 @@ </summary> </histogram> +<histogram name="Bluetooth.Availability" enum="BluetoothAvailability" + expires_after="2019-12-31"> + <owner>kenrb@chromium.org</owner> + <owner>kpaulhamus@chromium.org</owner> + <summary> + Determines the availability and capabilities of the Bluetooth driver. This + metric is logged on startup. + </summary> +</histogram> + <histogram name="Bluetooth.ConnectedDeviceCount" units="devices"> <owner>adlr@chromium.org</owner> <summary> @@ -76090,6 +76112,9 @@ <histogram name="OSX.BluetoothAvailability" enum="BluetoothAvailability" expires_after="2018-08-30"> + <obsolete> + Obsolete as of Chrome 73. This has been replaced by Bluetooth.Availability. + </obsolete> <owner>erikchen@chromium.org</owner> <summary> The availability and capabilities of the Bluetooth driver on OSX devices.
diff --git a/ui/accessibility/platform/ax_platform_node_base.cc b/ui/accessibility/platform/ax_platform_node_base.cc index 71666916..9b37614 100644 --- a/ui/accessibility/platform/ax_platform_node_base.cc +++ b/ui/accessibility/platform/ax_platform_node_base.cc
@@ -78,13 +78,13 @@ return nullptr; } -gfx::NativeViewAccessible AXPlatformNodeBase::GetParent() { +gfx::NativeViewAccessible AXPlatformNodeBase::GetParent() const { if (delegate_) return delegate_->GetParent(); return nullptr; } -int AXPlatformNodeBase::GetChildCount() { +int AXPlatformNodeBase::GetChildCount() const { if (delegate_) return delegate_->GetChildCount(); return 0; @@ -307,14 +307,14 @@ } bool AXPlatformNodeBase::SetTextSelection(int start_offset, int end_offset) { + if (!delegate_) + return false; + AXActionData action_data; action_data.action = ax::mojom::Action::kSetSelection; action_data.anchor_node_id = action_data.focus_node_id = GetData().id; action_data.anchor_offset = start_offset; action_data.focus_offset = end_offset; - if (!delegate_) - return false; - return delegate_->AccessibilityPerformAction(action_data); } @@ -325,9 +325,10 @@ } // TODO(crbug.com/865101) Remove this once the autofill state works. -bool AXPlatformNodeBase::IsFocusedInputWithSuggestions() { +bool AXPlatformNodeBase::IsFocusedInputWithSuggestions() const { return HasInputSuggestions() && IsPlainTextField() && - delegate_->GetFocus() == GetNativeViewAccessible(); + delegate_->GetFocus() == + const_cast<AXPlatformNodeBase*>(this)->GetNativeViewAccessible(); } bool AXPlatformNodeBase::IsPlainTextField() const { @@ -346,13 +347,14 @@ GetData().HasState(ax::mojom::State::kRichlyEditable); } -std::string AXPlatformNodeBase::GetInnerText() { +std::string AXPlatformNodeBase::GetInnerText() const { if (IsTextOnlyObject()) return GetStringAttribute(ax::mojom::StringAttribute::kName); std::string text; for (int i = 0; i < GetChildCount(); ++i) { - gfx::NativeViewAccessible child_accessible = ChildAtIndex(i); + gfx::NativeViewAccessible child_accessible = + const_cast<AXPlatformNodeBase*>(this)->ChildAtIndex(i); AXPlatformNodeBase* child = FromNativeViewAccessible(child_accessible); if (!child) continue; @@ -377,7 +379,7 @@ } } -base::string16 AXPlatformNodeBase::GetRangeValueText() { +base::string16 AXPlatformNodeBase::GetRangeValueText() const { float fval; base::string16 value = GetString16Attribute(ax::mojom::StringAttribute::kValue); @@ -572,7 +574,7 @@ } } -bool AXPlatformNodeBase::IsChildOfLeaf() { +bool AXPlatformNodeBase::IsChildOfLeaf() const { AXPlatformNodeBase* ancestor = FromNativeViewAccessible(GetParent()); while (ancestor) { @@ -619,11 +621,11 @@ GetIntAttribute(ax::mojom::IntAttribute::kScrollYMax); } -std::string AXPlatformNodeBase::GetText() { +std::string AXPlatformNodeBase::GetText() const { return GetInnerText(); } -base::string16 AXPlatformNodeBase::GetValue() { +base::string16 AXPlatformNodeBase::GetValue() const { // Expose slider value. if (IsRangeValueSupported()) { return GetRangeValueText(); @@ -1008,7 +1010,7 @@ // child object it points to. base::string16 hypertext; for (int i = 0; i < child_count; ++i) { - auto* child = FromNativeViewAccessible(delegate_->ChildAtIndex(i)); + const auto* child = FromNativeViewAccessible(delegate_->ChildAtIndex(i)); DCHECK(child); // Similar to Firefox, we don't expose text-only objects in IA2 hypertext.
diff --git a/ui/accessibility/platform/ax_platform_node_base.h b/ui/accessibility/platform/ax_platform_node_base.h index 0b89a8f8..d3a83f39 100644 --- a/ui/accessibility/platform/ax_platform_node_base.h +++ b/ui/accessibility/platform/ax_platform_node_base.h
@@ -54,8 +54,8 @@ // These are simple wrappers to our delegate. const AXNodeData& GetData() const; gfx::NativeViewAccessible GetFocus(); - gfx::NativeViewAccessible GetParent(); - int GetChildCount(); + gfx::NativeViewAccessible GetParent() const; + int GetChildCount() const; gfx::NativeViewAccessible ChildAtIndex(int index); // This needs to be implemented for each platform. @@ -165,7 +165,7 @@ // Returns true if an ancestor of this node (not including itself) is a // leaf node, meaning that this node is not actually exposed to the // platform. - bool IsChildOfLeaf(); + bool IsChildOfLeaf() const; // Returns true if this is a leaf node on this platform, meaning any // children should not be exposed to this platform's native accessibility @@ -189,9 +189,9 @@ bool HasFocus(); - virtual std::string GetText(); + virtual std::string GetText() const; - virtual base::string16 GetValue(); + virtual base::string16 GetValue() const; // Represents a non-static text node in IAccessibleHypertext (and ATK in the // future). This character is embedded in the response to @@ -217,18 +217,18 @@ // such as for the Autofill feature. The suggestion popup can be either hidden // and available or already visible. This indicates next down arrow key will // navigate within the suggestion popup. - bool IsFocusedInputWithSuggestions(); + bool IsFocusedInputWithSuggestions() const; bool IsRichTextField() const; bool IsRangeValueSupported() const; // Get the range value text, which might come from aria-valuetext or // a floating-point value. This is different from the value string // attribute used in input controls such as text boxes and combo boxes. - base::string16 GetRangeValueText(); + base::string16 GetRangeValueText() const; // |GetInnerText| recursively includes all the text from descendants such as // text found in any embedded object. - std::string GetInnerText(); + std::string GetInnerText() const; // Cast a gfx::NativeViewAccessible to an AXPlatformNodeBase if it is one, // or return NULL if it's not an instance of this class.
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc index 8303f08..d1809a2 100644 --- a/ui/accessibility/platform/ax_platform_node_win.cc +++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -520,7 +520,7 @@ return -1; } -base::string16 AXPlatformNodeWin::GetTextAsString16() { +base::string16 AXPlatformNodeWin::GetTextAsString16() const { if (IsChildOfLeaf()) return base::UTF8ToUTF16(AXPlatformNodeBase::GetText()); @@ -1380,6 +1380,108 @@ } // +// IAccessible2_3 implementation. +// + +IFACEMETHODIMP AXPlatformNodeWin::get_selectionRanges(IA2Range** ranges, + LONG* nRanges) { + COM_OBJECT_VALIDATE_2_ARGS(ranges, nRanges); + AXPlatformNode::NotifyAddAXModeFlags(kScreenReaderAndHTMLAccessibilityModes); + int32_t anchor_id = GetDelegate()->GetTreeData().sel_anchor_object_id; + auto* anchor_node = + static_cast<AXPlatformNodeWin*>(GetDelegate()->GetFromNodeID(anchor_id)); + if (!anchor_node) + return E_FAIL; + int anchor_offset = int{GetDelegate()->GetTreeData().sel_anchor_offset}; + + int32_t focus_id = GetDelegate()->GetTreeData().sel_focus_object_id; + auto* focus_node = + static_cast<AXPlatformNodeWin*>(GetDelegate()->GetFromNodeID(focus_id)); + if (!focus_node) + return E_FAIL; + int focus_offset = int{GetDelegate()->GetTreeData().sel_focus_offset}; + + if (!IsDescendant(anchor_node) || !IsDescendant(focus_node)) + return S_FALSE; // No selection within this subtree. + + *ranges = reinterpret_cast<IA2Range*>(CoTaskMemAlloc(sizeof(IA2Range))); + anchor_node->AddRef(); + ranges[0]->anchor = static_cast<IAccessible*>(anchor_node); + ranges[0]->anchorOffset = anchor_offset; + focus_node->AddRef(); + ranges[0]->active = static_cast<IAccessible*>(focus_node); + ranges[0]->activeOffset = focus_offset; + *nRanges = 1; + return S_OK; +} + +// +// IAccessible2_4 implementation. +// + +IFACEMETHODIMP AXPlatformNodeWin::setSelectionRanges(LONG nRanges, + IA2Range* ranges) { + COM_OBJECT_VALIDATE(); + // Blink supports only one selection range for now. + if (nRanges != 1) + return E_INVALIDARG; + if (!ranges) + return E_INVALIDARG; + AXPlatformNode::NotifyAddAXModeFlags(kScreenReaderAndHTMLAccessibilityModes); + + if (!ranges->anchor) + return E_INVALIDARG; + if (!ranges->active) + return E_INVALIDARG; + + Microsoft::WRL::ComPtr<IAccessible> anchor; + if (FAILED(ranges->anchor->QueryInterface(IID_PPV_ARGS(&anchor)))) + return E_INVALIDARG; + + Microsoft::WRL::ComPtr<IAccessible> focus; + if (FAILED(ranges->active->QueryInterface(IID_PPV_ARGS(&focus)))) + return E_INVALIDARG; + + const auto* anchor_node = + static_cast<AXPlatformNodeWin*>(FromNativeViewAccessible(anchor.Get())); + const auto* focus_node = + static_cast<AXPlatformNodeWin*>(FromNativeViewAccessible(focus.Get())); + if (!anchor_node || !focus_node) + return E_INVALIDARG; + + if (ranges->anchorOffset < 0 || ranges->activeOffset < 0) + return E_INVALIDARG; + + if (anchor_node->IsTextOnlyObject() || anchor_node->IsPlainTextField()) { + if (size_t{ranges->anchorOffset} > + anchor_node->GetTextAsString16().length()) { + return E_INVALIDARG; + } + } else { + if (ranges->anchorOffset > anchor_node->GetChildCount()) + return E_INVALIDARG; + } + + if (focus_node->IsTextOnlyObject() || focus_node->IsPlainTextField()) { + if (size_t{ranges->activeOffset} > focus_node->GetTextAsString16().length()) + return E_INVALIDARG; + } else { + if (ranges->activeOffset > focus_node->GetChildCount()) + return E_INVALIDARG; + } + + AXActionData action_data; + action_data.action = ax::mojom::Action::kSetSelection; + action_data.anchor_node_id = anchor_node->GetData().id; + action_data.anchor_offset = int32_t{ranges->anchorOffset}; + action_data.focus_node_id = focus_node->GetData().id; + action_data.focus_offset = int32_t{ranges->activeOffset}; + if (GetDelegate()->AccessibilityPerformAction(action_data)) + return S_OK; + return S_FALSE; +} + +// // IAccessibleEx implementation. // @@ -2632,9 +2734,8 @@ return S_FALSE; AXPlatformNodeBase* table = GetTable(); - if (!table) { + if (!table) return S_FALSE; - } int column = GetTableColumn(); int columns = GetTableColumnCount(); @@ -2866,9 +2967,9 @@ if (selection_start >= 0 && selection_end >= 0 && selection_start != selection_end) { // We should ignore the direction of the selection when exposing start and - // end offsets. According to the IA2 Spec the end offset is always increased - // by one past the end of the selection. This wouldn't make sense if - // end < start. + // end offsets. According to the IA2 Spec the end offset is always + // increased by one past the end of the selection. This wouldn't make + // sense if end < start. if (selection_end < selection_start) std::swap(selection_start, selection_end); @@ -3903,10 +4004,10 @@ case ax::mojom::Role::kPane: case ax::mojom::Role::kWindow: - // Do not return ROLE_SYSTEM_WINDOW as that is a special MSAA system role - // used to indicate a real native window object. It is automatically - // created by oleacc.dll as a parent of the root of our hierarchy, - // matching the HWND. + // Do not return ROLE_SYSTEM_WINDOW as that is a special MSAA system + // role used to indicate a real native window object. It is + // automatically created by oleacc.dll as a parent of the root of our + // hierarchy, matching the HWND. return ROLE_SYSTEM_PANE; case ax::mojom::Role::kIgnored: @@ -3955,10 +4056,10 @@ return "log"; case ax::mojom::Role::kGenericContainer: - // Use html tag if available. In the case where there is no tag, e.g. for - // anonymous content inserted by blink, treat it as a "div". This can - // occur if the markup had a block and inline element as siblings -- blink - // will wrap the inline with a block in this case. + // Use html tag if available. In the case where there is no tag, e.g. + // for anonymous content inserted by blink, treat it as a "div". This + // can occur if the markup had a block and inline element as siblings -- + // blink will wrap the inline with a block in this case. if (html_tag.empty()) return "div"; return html_tag; @@ -4179,10 +4280,9 @@ break; case ax::mojom::Role::kMeter: // TODO(accessibiity) Uncomment IA2_ROLE_LEVEL_BAR once screen readers - // adopt it. Currently, a <meter> ends up being spoken as a progress bar, - // which is confusing. - // IA2_ROLE_LEVEL_BAR is the correct mapping according to CORE-AAM. - // ia2_role = IA2_ROLE_LEVEL_BAR; + // adopt it. Currently, a <meter> ends up being spoken as a progress + // bar, which is confusing. IA2_ROLE_LEVEL_BAR is the correct mapping + // according to CORE-AAM. ia2_role = IA2_ROLE_LEVEL_BAR; break; case ax::mojom::Role::kNavigation: ia2_role = IA2_ROLE_LANDMARK; @@ -4731,9 +4831,9 @@ if (data.role == ax::mojom::Role::kToggleButton) { properties.emplace_back(L"pressed=false"); } else if (data.role == ax::mojom::Role::kSwitch) { - // ARIA switches are exposed to Windows accessibility as toggle buttons. - // For maximum compatibility with ATs, we expose both the pressed and - // checked states. + // ARIA switches are exposed to Windows accessibility as toggle + // buttons. For maximum compatibility with ATs, we expose both the + // pressed and checked states. properties.emplace_back(L"pressed=false"); properties.emplace_back(L"checked=false"); } else { @@ -4744,9 +4844,9 @@ if (data.role == ax::mojom::Role::kToggleButton) { properties.emplace_back(L"pressed=true"); } else if (data.role == ax::mojom::Role::kSwitch) { - // ARIA switches are exposed to Windows accessibility as toggle buttons. - // For maximum compatibility with ATs, we expose both the pressed and - // checked states. + // ARIA switches are exposed to Windows accessibility as toggle + // buttons. For maximum compatibility with ATs, we expose both the + // pressed and checked states. properties.emplace_back(L"pressed=true"); properties.emplace_back(L"checked=true"); } else { @@ -5337,7 +5437,7 @@ return UIA_DocumentControlTypeId; } -base::string16 AXPlatformNodeWin::GetValue() { +base::string16 AXPlatformNodeWin::GetValue() const { base::string16 value = AXPlatformNodeBase::GetValue(); // If this doesn't have a value and is linked then set its value to the URL @@ -5411,7 +5511,7 @@ return data.HasState(ax::mojom::State::kFocusable); } -int AXPlatformNodeWin::MSAAState() { +int AXPlatformNodeWin::MSAAState() const { const AXNodeData& data = GetData(); int msaa_state = 0; @@ -5438,8 +5538,8 @@ // TODO(crbug.com/865101) Use // data.HasState(ax::mojom::State::kAutofillAvailable) instead of // IsFocusedInputWithSuggestions() and rmove the below comment: Note: - // suggestions are special-cased here because there is no way for the browser - // to know when a suggestion popup is available. + // suggestions are special-cased here because there is no way for the + // browser to know when a suggestion popup is available. if (data.HasIntAttribute(ax::mojom::IntAttribute::kHasPopup) || IsFocusedInputWithSuggestions()) msaa_state |= STATE_SYSTEM_HASPOPUP; @@ -5501,9 +5601,9 @@ if (data.role == ax::mojom::Role::kToggleButton) { msaa_state |= STATE_SYSTEM_PRESSED; } else if (data.role == ax::mojom::Role::kSwitch) { - // ARIA switches are exposed to Windows accessibility as toggle buttons. - // For maximum compatibility with ATs, we expose both the pressed and - // checked states. + // ARIA switches are exposed to Windows accessibility as toggle + // buttons. For maximum compatibility with ATs, we expose both the + // pressed and checked states. msaa_state |= STATE_SYSTEM_PRESSED | STATE_SYSTEM_CHECKED; } else { msaa_state |= STATE_SYSTEM_CHECKED; @@ -5538,7 +5638,7 @@ // Handle STATE_SYSTEM_FOCUSED // gfx::NativeViewAccessible focus = GetDelegate()->GetFocus(); - if (focus == GetNativeViewAccessible()) + if (focus == const_cast<AXPlatformNodeWin*>(this)->GetNativeViewAccessible()) msaa_state |= STATE_SYSTEM_FOCUSED; // In focused single selection UI menus and listboxes, mirror item selection @@ -5640,7 +5740,8 @@ } base::string16 AXPlatformNodeWin::TextForIAccessibleText() { - // Special case allows us to get text even in non-HTML case, e.g. browser UI. + // Special case allows us to get text even in non-HTML case, e.g. browser + // UI. if (IsPlainTextField()) return GetString16Attribute(ax::mojom::StringAttribute::kValue); return GetTextAsString16(); @@ -5758,7 +5859,8 @@ return S_OK; } -// TODO(dmazzoni): Remove this function once combo box refactoring is complete. +// TODO(dmazzoni): Remove this function once combo box refactoring is +// complete. bool AXPlatformNodeWin::IsAncestorComboBox() { auto* parent = static_cast<AXPlatformNodeWin*>(FromNativeViewAccessible(GetParent())); @@ -5840,10 +5942,11 @@ auto* sibling = static_cast<AXPlatformNodeWin*>( FromNativeViewAccessible(GetDelegate()->ChildAtIndex(i))); DCHECK(sibling); - if (sibling->IsTextOnlyObject()) + if (sibling->IsTextOnlyObject()) { hypertext_offset += (int32_t)sibling->GetTextAsString16().size(); - else + } else { ++hypertext_offset; + } } return hypertext_offset; } @@ -5874,14 +5977,14 @@ AXPlatformNodeWin* endpoint_object, int endpoint_offset) { // There are three cases: - // 1. Either the selection endpoint is inside this object or is an ancestor of - // of this object. endpoint_offset should be returned. + // 1. Either the selection endpoint is inside this object or is an ancestor + // of of this object. endpoint_offset should be returned. // 2. The selection endpoint is a pure descendant of this object. The offset // of the character corresponding to the subtree in which the endpoint is // located should be returned. // 3. The selection endpoint is in a completely different part of the tree. - // Either 0 or text_length should be returned depending on the direction that - // one needs to travel to find the endpoint. + // Either 0 or text_length should be returned depending on the direction + // that one needs to travel to find the endpoint. // Case 1. // @@ -6024,9 +6127,9 @@ // to guess what has changed. // -- NOT EDITABLE -- // When part of the text changes, assume the entire node's text changed. For - // example, if "car" changes to "cat" then assume all 3 letters changed. Note, - // it is possible (though rare) that CharacterData methods are used to remove, - // insert, replace or append a substring. + // example, if "car" changes to "cat" then assume all 3 letters changed. + // Note, it is possible (though rare) that CharacterData methods are used to + // remove, insert, replace or append a substring. bool allow_partial_text_node_changes = GetData().HasState(ax::mojom::State::kEditable); size_t prefix_index = 0; @@ -6066,7 +6169,7 @@ if (!anchor_object) return -1; - int anchor_offset = GetDelegate()->GetTreeData().sel_anchor_offset; + int anchor_offset = int{GetDelegate()->GetTreeData().sel_anchor_offset}; return GetHypertextOffsetFromEndpoint(anchor_object, anchor_offset); } @@ -6077,7 +6180,7 @@ if (!focus_object) return -1; - int focus_offset = GetDelegate()->GetTreeData().sel_focus_offset; + int focus_offset = int{GetDelegate()->GetTreeData().sel_focus_offset}; return GetHypertextOffsetFromEndpoint(focus_object, focus_offset); } @@ -6107,8 +6210,8 @@ // object character. // Only case 3 refers to a valid selection because cases 1 and 2 fall // outside this object in their entirety. - // Selections that span more than one character are by definition inside this - // object, so checking them is not necessary. + // Selections that span more than one character are by definition inside + // this object, so checking them is not necessary. if (*selection_start == *selection_end && !HasCaret()) { *selection_start = -1; *selection_end = -1;
diff --git a/ui/accessibility/platform/ax_platform_node_win.h b/ui/accessibility/platform/ax_platform_node_win.h index 130b5c8..8124c35 100644 --- a/ui/accessibility/platform/ax_platform_node_win.h +++ b/ui/accessibility/platform/ax_platform_node_win.h
@@ -218,10 +218,11 @@ extern AX_EXPORT base::ObserverList<IAccessible2UsageObserver>::Unchecked& GetIAccessible2UsageObserverList(); +// TODO(nektar): Remove multithread superclass since we don't support it. class AX_EXPORT __declspec(uuid("26f5641a-246d-457b-a96d-07f3fae6acf2")) AXPlatformNodeWin : public CComObjectRootEx<CComMultiThreadModel>, - public IDispatchImpl<IAccessible2_2, - &IID_IAccessible2, + public IDispatchImpl<IAccessible2_4, + &IID_IAccessible2_4, &LIBID_IAccessible2Lib>, public IAccessibleEx, public IAccessibleText, @@ -245,11 +246,17 @@ public AXPlatformNodeBase { public: BEGIN_COM_MAP(AXPlatformNodeWin) + // TODO(nektar): Change the following to COM_INTERFACE_ENTRY(IDispatch). COM_INTERFACE_ENTRY2(IDispatch, IAccessible2_2) + COM_INTERFACE_ENTRY2(IUnknown, IDispatchImpl) + // TODO(nektar): Find a way to remove the following entry because it's not + // an interface. COM_INTERFACE_ENTRY(AXPlatformNodeWin) COM_INTERFACE_ENTRY(IAccessible) COM_INTERFACE_ENTRY(IAccessible2) COM_INTERFACE_ENTRY(IAccessible2_2) + COM_INTERFACE_ENTRY(IAccessible2_3) + COM_INTERFACE_ENTRY(IAccessible2_4) COM_INTERFACE_ENTRY(IAccessibleEx) COM_INTERFACE_ENTRY(IAccessibleText) COM_INTERFACE_ENTRY(IAccessibleTable) @@ -285,12 +292,12 @@ // AXPlatformNodeBase overrides. void Destroy() override; int GetIndexInParent() override; - base::string16 GetValue() override; + base::string16 GetValue() const override; // For the moment, we add a special version of this method which returns a // base::string16, but once the hypertext generation code is shared between // platforms we can just override AXPlatformNodeBase::GetText(). - base::string16 GetTextAsString16(); + base::string16 GetTextAsString16() const; // // IAccessible methods. @@ -418,6 +425,18 @@ LONG* caret_offset) override; // + // IAccessible2_3 methods. + // + + IFACEMETHODIMP get_selectionRanges(IA2Range** ranges, LONG* nRanges); + + // + // IAccessible2_4 methods. + // + + IFACEMETHODIMP setSelectionRanges(LONG nRanges, IA2Range* ranges); + + // // IAccessibleEx methods. // @@ -822,7 +841,7 @@ protected: AXPlatformNodeWin(); - int MSAAState(); + int MSAAState() const; int MSAARole(); std::string StringOverrideForMSAARole();
diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn index fbabaaf..a8acf70 100644 --- a/ui/android/BUILD.gn +++ b/ui/android/BUILD.gn
@@ -187,47 +187,6 @@ ] } -# Generate an Android resources target that contains localized strings -# describing the current locale used by the Android framework to display -# UI strings. These are used by org.chromium.ui.base.LocalizationUtils. -# -# Variables: -# ui_locales: List of Chromium locale names to generate resources for. -# -template("generate_ui_locale_resources") { - _generating_target_name = "${target_name}__generate" - _rebased_output_zip_path = rebase_path(target_gen_dir, root_gen_dir) - _output_zip = "${root_out_dir}/resource_zips/${_rebased_output_zip_path}/" + - "${target_name}.zip" - - _locales = invoker.ui_locales - _depfile = "$target_gen_dir/$target_name.d" - - action(_generating_target_name) { - script = "build/create_ui_locale_resources.py" - depfile = _depfile - outputs = [ - _output_zip, - ] - args = [ - "--locale-list=$_locales", - "--depfile", - rebase_path(_depfile, root_build_dir), - "--output-zip", - rebase_path(_output_zip, root_build_dir), - ] - } - - android_generated_resources(target_name) { - generating_target_name = ":$_generating_target_name" - generated_resources_zip = _output_zip - } -} - -generate_ui_locale_resources("ui_locale_string_resources") { - ui_locales = locales -} - android_resources("ui_java_resources") { custom_package = "org.chromium.ui" resource_dirs = [ "java/res" ] @@ -237,7 +196,6 @@ } deps = [ - ":ui_locale_string_resources", ":ui_strings_grd", ] }
diff --git a/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java b/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java index 54215e2c..d9fb9ef 100644 --- a/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java +++ b/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java
@@ -82,36 +82,6 @@ } /** - * @return the current Chromium locale used to display UI elements. - * - * This matches what the Android framework resolves localized string resources to, using the - * system locale and the application's resources. For example, if the system uses a locale - * that is not supported by Chromium resources (e.g. 'fur-rIT'), Android will likely fallback - * to 'en-rUS' strings when Resources.getString() is called, and this method will return the - * matching Chromium name (i.e. 'en-US'). - * - * Using this value is only necessary to ensure that the strings accessed from the locale .pak - * files from C++ match the resources displayed by the Java-based UI views. - */ - public static String getUiLocaleStringForCompressedPak() { - String uiLocale = ContextUtils.getApplicationContext().getResources().getString( - org.chromium.ui.R.string.current_detected_ui_locale_name); - return uiLocale; - } - - /** - * @return the language of the current Chromium locale used to display UI elements. - */ - public static String getUiLanguageStringForCompressedPak() { - String uiLocale = getUiLocaleStringForCompressedPak(); - int pos = uiLocale.indexOf('-'); - if (pos > 0) { - return uiLocale.substring(0, pos); - } - return uiLocale; - } - - /** * Return the asset split language associated with a given Chromium language. * * This matches the directory used to store language-based assets in bundle APK splits. @@ -176,11 +146,7 @@ * but true for ("en-US", "en") (USA locale + English language). */ public static boolean chromiumLocaleMatchesLanguage(String locale, String lang) { - int pos = locale.indexOf('-'); - if (pos > 0) { - return locale.substring(0, pos).equals(lang); - } - return locale.equals(lang); + return LocaleUtils.toLanguage(locale).equals(lang); } private static native int nativeGetFirstStrongCharacterDirection(String string);
diff --git a/ui/android/java/src/org/chromium/ui/resources/ResourceExtractor.java b/ui/android/java/src/org/chromium/ui/resources/ResourceExtractor.java index 6d7fda3..5f6e5a8 100644 --- a/ui/android/java/src/org/chromium/ui/resources/ResourceExtractor.java +++ b/ui/android/java/src/org/chromium/ui/resources/ResourceExtractor.java
@@ -44,10 +44,11 @@ private class ExtractTask extends AsyncTask<Void> { private final List<Runnable> mCompletionCallbacks = new ArrayList<Runnable>(); + private final String mUiLanguage; private void doInBackgroundImpl() { final File outputDir = getOutputDir(); - String[] assetPaths = detectFilesToExtract(); + String[] assetPaths = detectFilesToExtract(mUiLanguage); // Use a suffix for extracted files in order to guarantee that the version of the file // on disk matches up with the version of the APK. @@ -124,6 +125,10 @@ TraceEvent.end("ResourceExtractor.ExtractTask.onPostExecute"); } } + + public ExtractTask(String uiLanguage) { + mUiLanguage = uiLanguage; + } } private ExtractTask mExtractTask; @@ -137,7 +142,7 @@ return sInstance; } - private static String[] detectFilesToExtract() { + private static String[] detectFilesToExtract(String uiLanguage) { Locale defaultLocale = Locale.getDefault(); String androidLanguage = defaultLocale.getLanguage(); String chromiumLanguage = LocaleUtils.getUpdatedLanguageForChromium(androidLanguage); @@ -145,7 +150,6 @@ // NOTE: The UI language will differ from the application's language // when the system locale is not directly supported by Chrome's // resources. - String uiLanguage = LocalizationUtils.getUiLanguageStringForCompressedPak(); Log.i(TAG, "Using UI locale %s, system locale: %s (Android name: %s)", uiLanguage, chromiumLanguage, androidLanguage); @@ -300,7 +304,7 @@ * AsyncTask. Call waitForCompletion() at the point resources * are needed to block until the task completes. */ - public void startExtractingResources() { + public void startExtractingResources(String uiLanguage) { if (mExtractTask != null) { return; } @@ -313,7 +317,7 @@ return; } - mExtractTask = new ExtractTask(); + mExtractTask = new ExtractTask(uiLanguage); mExtractTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); }
diff --git a/ui/android/java/src/org/chromium/ui/widget/Toast.java b/ui/android/java/src/org/chromium/ui/widget/Toast.java index aa8a39f..7ae15c5 100644 --- a/ui/android/java/src/org/chromium/ui/widget/Toast.java +++ b/ui/android/java/src/org/chromium/ui/widget/Toast.java
@@ -29,6 +29,8 @@ public static final int LENGTH_SHORT = android.widget.Toast.LENGTH_SHORT; public static final int LENGTH_LONG = android.widget.Toast.LENGTH_LONG; + private static int sExtraYOffset; + private android.widget.Toast mToast; private ViewGroup mSWLayout; @@ -61,6 +63,8 @@ setView(toast.getView()); } + mToast.setGravity( + mToast.getGravity(), mToast.getXOffset(), mToast.getYOffset() + sExtraYOffset); } public android.widget.Toast getAndroidToast() { @@ -155,4 +159,13 @@ throws Resources.NotFoundException { return makeText(context, context.getResources().getText(resId), duration); } + + /** + * Set extra Y offset for toasts all toasts created with this class. This can be overridden by + * calling {@link Toast#setGravity(int, int, int)} on an individual toast. + * @param yOffsetPx The Y offset from the normal toast position in px. + */ + public static void setGlobalExtraYOffset(int yOffsetPx) { + sExtraYOffset = yOffsetPx; + } }
diff --git a/ui/webui/resources/cr_elements/BUILD.gn b/ui/webui/resources/cr_elements/BUILD.gn index 5d09ab6..31e616eb 100644 --- a/ui/webui/resources/cr_elements/BUILD.gn +++ b/ui/webui/resources/cr_elements/BUILD.gn
@@ -14,6 +14,7 @@ "cr_dialog:closure_compile", "cr_drawer:closure_compile", "cr_expand_button:closure_compile", + "cr_icon_button:closure_compile", "cr_input:closure_compile", "cr_link_row:closure_compile", "cr_profile_avatar_selector:closure_compile",
diff --git a/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.html b/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.html index 066ce12..d57b3e3 100644 --- a/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.html +++ b/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.html
@@ -1,17 +1,18 @@ <link rel="import" href="../../html/polymer.html"> +<link rel="import" href="../cr_icon_button/cr_icon_button.html"> <link rel="import" href="../cr_icons_css.html"> <link rel="import" href="../shared_style_css.html"> <link rel="import" href="../shared_vars_css.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html"> <dom-module id="cr-expand-button"> <template> - <style include="cr-icons cr-shared-style"> + <style include="cr-shared-style cr-icons"> :host { @apply --cr-actionable; align-items: center; display: flex; + outline: none; } :host([disabled]) { @@ -19,10 +20,6 @@ pointer-events: none; } - paper-icon-button-light { - @apply --cr-paper-icon-button-margin; - } - #label { flex: 1; padding: var(--cr-section-vertical-padding) 0; @@ -30,12 +27,9 @@ </style> <div id="label"><slot></slot></div> - <paper-icon-button-light class$="[[iconName_(expanded)]]"> - <button disabled="[[disabled]]" aria-label$="[[alt]]" - aria-pressed$="[[getAriaPressed_(expanded)]]" - tabindex$="[[tabIndex]]"> - </button> - </paper-icon-button-light> + <cr-icon-button class$="[[iconName_(expanded)]]" disabled="[[disabled]]" + aria-label$="[[alt]]" aria-pressed$="[[getAriaPressed_(expanded)]]" + tabindex="[[tabIndex]]"></cr-icon-button> </template> <script src="cr_expand_button.js"></script> </dom-module>
diff --git a/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.js b/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.js index 2637e07..5c667fc 100644 --- a/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.js +++ b/ui/webui/resources/cr_elements/cr_expand_button/cr_expand_button.js
@@ -15,12 +15,20 @@ * If true, the button is in the expanded state and will show the * 'expand-less' icon. If false, the button shows the 'expand-more' icon. */ - expanded: {type: Boolean, value: false, notify: true}, + expanded: { + type: Boolean, + value: false, + notify: true, + }, /** * If true, the button will be disabled and grayed out. */ - disabled: {type: Boolean, value: false, reflectToAttribute: true}, + disabled: { + type: Boolean, + value: false, + reflectToAttribute: true, + }, /** A11y text descriptor for this control. */ alt: String, @@ -29,24 +37,13 @@ type: Number, value: 0, }, - }, listeners: { - 'blur': 'onBlur_', 'click': 'toggleExpand_', - 'focus': 'onFocus_', - 'keypress': 'onKeyPress_', - 'pointerdown': 'onPointerDown_', }, /** - * Used to differentiate pointer and keyboard click events. - * @private {boolean} - */ - fromPointer_: false, - - /** * @param {boolean} expanded * @private */ @@ -62,31 +59,6 @@ return expanded ? 'icon-expand-less' : 'icon-expand-more'; }, - /** @private */ - onBlur_: function() { - this.updateRippleHoldDown_(false); - }, - - /** @private */ - onFocus_: function() { - this.updateRippleHoldDown_(true); - }, - - /** - * @param {!Event} event - * @private - */ - onKeyPress_: function(event) { - if (event.key == ' ' || event.key == 'Enter') { - this.updateRippleHoldDown_(true); - } - }, - - /** @private */ - onPointerDown_: function() { - this.fromPointer_ = true; - }, - /** * @param {!Event} event * @private @@ -99,22 +71,6 @@ this.expanded = !this.expanded; - // If this event originated from a pointer, then |ripple.holdDown| should - // preemptively be set to false to allow ripple to animate. - if (this.fromPointer_) { - this.updateRippleHoldDown_(false); - } - this.fromPointer_ = false; - }, - - /** - * @param {boolean} holdDown - * @private - */ - updateRippleHoldDown_: function(holdDown) { - const button = /** @type {{ensureRipple: Function, getRipple: Function}} */ - (this.$$('paper-icon-button-light')); - button.ensureRipple(); - button.getRipple().holdDown = holdDown; + this.$$('cr-icon-button').focus(); }, });
diff --git a/ui/webui/resources/cr_elements/cr_icon_button/BUILD.gn b/ui/webui/resources/cr_elements/cr_icon_button/BUILD.gn new file mode 100644 index 0000000..6264d36 --- /dev/null +++ b/ui/webui/resources/cr_elements/cr_icon_button/BUILD.gn
@@ -0,0 +1,17 @@ +# Copyright 2019 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//third_party/closure_compiler/compile_js.gni") + +js_type_check("closure_compile") { + deps = [ + ":cr_icon_button", + ] +} + +js_library("cr_icon_button") { + deps = [ + "//third_party/polymer/v1_0/components-chromium/paper-behaviors:paper-ripple-behavior-extracted", + ] +}
diff --git a/ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.html b/ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.html new file mode 100644 index 0000000..9212a29 --- /dev/null +++ b/ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.html
@@ -0,0 +1,71 @@ +<link rel="import" href="../../html/polymer.html"> + +<link rel="import" href="../shared_vars_css.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/paper-behaviors/paper-ripple-behavior.html"> + +<dom-module id="cr-icon-button"> + <template> + <style> + :host { + --cr-icon-button-color: var(--google-grey-refresh-700); + --cr-icon-button-icon-padding: 8px; + --cr-icon-button-icon-size: 20px; + --cr-icon-button-ripple-color: var(--google-grey-900); + --cr-icon-button-ripple-size: calc(var(--cr-icon-button-icon-size) + + 2 * var(--cr-icon-button-icon-padding)); + --cr-icon-button-size: var(--cr-icon-button-ripple-size); + background-position: center; + background-repeat: no-repeat; + background-size: var(--cr-icon-button-icon-size); + color: var(--cr-icon-button-color); + cursor: pointer; + height: var(--cr-icon-button-size); + margin-inline-end: var(--cr-icon-ripple-margin); + margin-inline-start: var(--cr-icon-button-margin-start); + outline: none; + user-select: none; + width: var(--cr-icon-button-size); + } + + :host([disabled]) { + cursor: initial; + opacity: var(--cr-disabled-opacity); + pointer-events: none; + } + + :host-context([dir=rtl]) { + transform: scaleX(-1); /* Invert X: flip on the Y axis (aka mirror). */ + } + + :host-context([dark]) { + --cr-icon-button-color: var(--google-grey-refresh-500); + --cr-icon-button-ripple-color: var(--google-grey-refresh-500); + } + + :host paper-ripple { + --paper-ripple-opacity: .15; + color: var(--cr-icon-button-ripple-color); + } + + :host-context([dark]) paper-ripple { + --paper-ripple-opacity: .4; + } + + #icon { + height: var(--cr-icon-button-ripple-size); + /* The |_rippleContainer| must be position relative. */ + position: relative; + width: var(--cr-icon-button-ripple-size); + } + + iron-icon { + --iron-icon-height: var(--cr-icon-button-icon-size); + --iron-icon-width: var(--cr-icon-button-icon-size); + padding: var(--cr-icon-button-icon-padding); + } + </style> + <div id="icon"></div> + </template> + <script src="cr_icon_button.js"></script> +</dom-module>
diff --git a/ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.js b/ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.js new file mode 100644 index 0000000..2d909e1 --- /dev/null +++ b/ui/webui/resources/cr_elements/cr_icon_button/cr_icon_button.js
@@ -0,0 +1,165 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview 'cr-icon-button' is a button which displays an icon with a + * ripple. It can be interacted with like a normal button using click as well as + * space and enter to effectively click the button and fire a 'click' event. + * + * There are two sources to icons, cr-icons and iron-iconset-svg. The cr-icon's + * are defined as background images with a reference to a resource file + * associated with a CSS class name. The iron-icon's are defined as inline SVG's + * under a key that is stored in a global map that is accessible to the + * iron-icon element. + * + * Example of using a cr-icon: + * <link rel="import" href="chrome://resources/cr_elements/cr_icons_css.html"> + * <dom-module id="module"> + * <template> + * <style includes="cr-icons"></style> + * <cr-icon-button class="icon-class-name"></cr-icon-button> + * </template> + * </dom-module> + * + * Example of using an iron-icon: + * <link rel="import" href="chrome://resources/cr_elements/icons.html"> + * <cr-icon-button iron-icon="cr:icon-key"></cr-icon-button> + */ +Polymer({ + is: 'cr-icon-button', + + behaviors: [ + Polymer.PaperRippleBehavior, + ], + + properties: { + disabled: { + type: Boolean, + value: false, + reflectToAttribute: true, + observer: 'disabledChanged_', + }, + + ironIcon: { + type: String, + observer: 'onIronIconChanged_', + }, + }, + + hostAttributes: { + 'aria-disabled': 'false', + role: 'button', + tabindex: 0, + }, + + listeners: { + blur: 'hideRipple_', + click: 'onClick_', + focus: 'showRipple_', + keydown: 'onKeyDown_', + keyup: 'onKeyUp_', + up: 'hideRipple_', + }, + + /** @private */ + hideRipple_: function() { + this.getRipple().holdDown = false; + }, + + /** @private */ + showRipple_: function() { + this.getRipple().holdDown = true; + }, + + /** @private */ + disabledChanged_: function() { + if (this.disabled) { + this.blur(); + } + this.setAttribute('aria-disabled', this.disabled ? 'true' : 'false'); + this.setAttribute('tabindex', this.disabled ? '-1' : '0'); + }, + + /** + * @param {!Event} e + * @private + */ + onClick_: function(e) { + if (this.disabled) { + e.stopImmediatePropagation(); + } + }, + + /** @private */ + onIronIconChanged_: function() { + let ironIconElement = this.$$('iron-icon'); + if (this.ironIcon) { + if (!ironIconElement) { + ironIconElement = document.createElement('iron-icon'); + this.$.icon.appendChild(ironIconElement); + } + ironIconElement.icon = this.ironIcon; + return; + } + + if (ironIconElement) { + ironIconElement.remove(); + } + }, + + /** + * @param {!KeyboardEvent} e + * @private + */ + onIconKeydown_: function(e) { + if (e.shiftKey && e.key === 'Tab') { + this.focus(); + } + }, + + /** + * @param {!KeyboardEvent} e + * @private + */ + onKeyDown_: function(e) { + if (e.key != ' ' && e.key != 'Enter') { + return; + } + + e.preventDefault(); + e.stopPropagation(); + if (e.repeat) { + return; + } + + if (e.key == 'Enter') { + this.click(); + } + }, + + /** + * @param {!KeyboardEvent} e + * @private + */ + onKeyUp_: function(e) { + if (e.key == ' ' || e.key == 'Enter') { + e.preventDefault(); + e.stopPropagation(); + } + + if (e.key == ' ') { + this.click(); + } + }, + + // customize the element's ripple + _createRipple: function() { + this._rippleContainer = this.$.icon; + const ripple = Polymer.PaperRippleBehavior._createRipple(); + ripple.id = 'ink'; + ripple.setAttribute('recenters', ''); + ripple.classList.add('circle'); + return ripple; + }, +});
diff --git a/ui/webui/resources/cr_elements/cr_icons_css.html b/ui/webui/resources/cr_elements/cr_icons_css.html index a686eea..7a99559 100644 --- a/ui/webui/resources/cr_elements/cr_icons_css.html +++ b/ui/webui/resources/cr_elements/cr_icons_css.html
@@ -33,149 +33,209 @@ width: var(--cr-icon-ripple-size); } - :-webkit-any(paper-icon-button-light, .cr-icon).no-overlap { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).no-overlap { margin-inline-end: 0; margin-inline-start: 0; } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-arrow-back { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-arrow-back { background-image: url(../images/icon_arrow_back.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-arrow-back { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-arrow-back { background-image: url(../images/dark/icon_arrow_back.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-cancel { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-cancel { background-image: url(../images/icon_cancel.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-cancel { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-cancel { background-image: url(../images/dark/icon_cancel.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-toolbar-cancel { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-toolbar-cancel { background-image: url(../images/icon_toolbar_cancel.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-toolbar-cancel { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-toolbar-cancel { background-image: url(../images/dark/icon_toolbar_cancel.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-clear { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-clear { background-image: url(../images/icon_clear.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-clear { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-clear { background-image: url(../images/dark/icon_clear.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-delete-gray { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-delete-gray { background-image: url(../images/icon_delete_gray.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-delete-gray { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-delete-gray { background-image: url(../images/dark/icon_delete_gray.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-picture-delete { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-picture-delete { background-image: url(../images/icon_picture_delete.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-picture-delete { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-picture-delete { background-image: url(../images/dark/icon_picture_delete.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-expand-less { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-expand-less { background-image: url(../images/icon_expand_less.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-expand-less { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-expand-less { background-image: url(../images/dark/icon_expand_less.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-expand-more { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-expand-more { background-image: url(../images/icon_expand_more.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-expand-more { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-expand-more { background-image: url(../images/dark/icon_expand_more.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-external { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-external { background-image: url(../images/open_in_new.svg); } /* Open in new is the same for light and dark mode. */ - :-webkit-any(paper-icon-button-light, .cr-icon).icon-toolbar-menu { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-toolbar-menu { background-image: url(../images/icon_toolbar_menu.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-toolbar-menu { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-toolbar-menu { background-image: url(../images/dark/icon_toolbar_menu.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-more-vert { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-more-vert { background-image: url(../images/icon_more_vert.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-more-vert { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-more-vert { background-image: url(../images/dark/icon_more_vert.svg); } + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-more-vert-light-mode { + background-image: url(../images/icon_more_vert.svg); + } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-refresh { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-refresh { background-image: url(../images/icon_refresh.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-refresh { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-refresh { background-image: url(../images/dark/icon_refresh.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-settings { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-settings { background-image: url(../images/icon_settings.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-settings { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-settings { background-image: url(../images/dark/icon_settings.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-search { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-search { background-image: url(../images/icon_search.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-search { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-search { background-image: url(../images/dark/icon_search.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-arrow-dropdown { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-arrow-dropdown { background-image: url(../images/icon_arrow_dropdown.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-arrow-dropdown { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-arrow-dropdown { background-image: url(../images/dark/icon_arrow_dropdown.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).subpage-arrow { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).subpage-arrow { background-image: url(../images/arrow_right.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).subpage-arrow { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).subpage-arrow { background-image: url(../images/dark/arrow_right.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-visibility { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-visibility { background-image: url(../images/icon_visibility.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-visibility { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-visibility { background-image: url(../images/dark/icon_visibility.svg); } - :-webkit-any(paper-icon-button-light, .cr-icon).icon-visibility-off { + :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-visibility-off { background-image: url(../images/icon_visibility_off.svg); } - :host-context([dark]) - :-webkit-any(paper-icon-button-light, .cr-icon).icon-visibility-off { + :host-context([dark]) :-webkit-any(paper-icon-button-light, + cr-icon-button, + .cr-icon).icon-visibility-off { background-image: url(../images/dark/icon_visibility_off.svg); } </style>
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html index 5c86c8c..22ae33b2 100644 --- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html +++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html
@@ -1,15 +1,16 @@ <link rel="import" href="../../html/polymer.html"> +<link rel="import" href="../cr_icon_button/cr_icon_button.html"> <link rel="import" href="../cr_search_field/cr_search_field_behavior.html"> +<link rel="import" href="../cr_icons_css.html"> <link rel="import" href="../icons.html"> <link rel="import" href="../shared_style_css.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-spinner/paper-spinner-lite.html"> <dom-module id="cr-toolbar-search-field"> <template> - <style include="cr-shared-style"> + <style include="cr-shared-style cr-icons"> :host { align-items: center; display: flex; @@ -23,8 +24,7 @@ display: none !important; } - paper-icon-button-light, - paper-icon-button { + paper-icon-button-light { height: 32px; margin: 6px; min-width: 32px; @@ -32,6 +32,17 @@ width: 32px; } + cr-icon-button { + --cr-icon-button-color: white; + --cr-icon-button-icon-padding: 6px; + --cr-icon-button-ripple-color: white; + margin: 6px; + } + + :host-context([dark]) cr-icon-button { + --cr-icon-button-color: var(--google-grey-200); + } + #icon { transition: margin 150ms, opacity 200ms; } @@ -136,10 +147,10 @@ <paper-spinner-lite active="[[isSpinnerShown_]]"> </paper-spinner-lite> </template> - <paper-icon-button id="icon" icon="cr:search" title="[[label]]" - tabindex$="[[computeIconTabIndex_(narrow)]]" - aria-hidden$="[[computeIconAriaHidden_(narrow)]]"> - </paper-icon-button> + <cr-icon-button id="icon" iron-icon="cr:search" title="[[label]]" + tabindex$="[[computeIconTabIndex_(narrow, hasSearchText)]]" + aria-hidden$="[[computeIconAriaHidden_(narrow, hasSearchText)]]"> + </cr-icon-button> <div id="searchTerm"> <label id="prompt" for="searchInput" aria-hidden="true">[[label]]</label> <input id="searchInput"
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js index 0c785aa..cef431c 100644 --- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js +++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js
@@ -77,7 +77,7 @@ * @private */ computeIconTabIndex_: function(narrow) { - return narrow ? 0 : -1; + return narrow && !this.hasSearchText ? 0 : -1; }, /** @@ -86,7 +86,7 @@ * @private */ computeIconAriaHidden_: function(narrow) { - return Boolean(!narrow).toString(); + return Boolean(!narrow || this.hasSearchText).toString(); }, /**
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html index e750064d..9e35dc8 100644 --- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html +++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html
@@ -1,15 +1,14 @@ <link rel="import" href="../../html/polymer.html"> -<link rel="import" href="../cr_icons_css.html"> +<link rel="import" href="../cr_icon_button/cr_icon_button.html"> <link rel="import" href="../icons.html"> <link rel="import" href="../paper_button_style_css.html"> <link rel="import" href="../shared_vars_css.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html"> <dom-module id="cr-toolbar-selection-overlay"> <template> - <style include="cr-icons paper-button-style"> + <style include="paper-button-style"> :host { background-color: white; border-bottom: 1px solid var(--google-grey-300); @@ -59,30 +58,23 @@ flex: 1; } - paper-icon-button-light { + + cr-icon-button { height: 36px; margin-inline-end: 24px; margin-inline-start: 2px; width: 36px; } - - button iron-icon { - height: 20px; - width: 20px; - } </style> <template is="dom-if" if="[[hasShown_]]"> <div id="overlay-content"> - <paper-icon-button-light> - <button on-tap="onClearSelectionTap_" title="[[cancelLabel]]"> - <iron-icon icon="cr:clear"></iron-icon> - </button> - </paper-icon-button-light> + <cr-icon-button title="[[cancelLabel]]" iron-icon="cr:clear" + on-click="onClearSelectionClick_"></cr-icon-button> <div id="number-selected">[[selectionLabel_]]</div> - <paper-button on-tap="onClearSelectionTap_"> + <paper-button on-click="onClearSelectionClick_"> [[cancelLabel]] </paper-button> - <paper-button id="delete" on-tap="onDeleteTap_" + <paper-button id="delete" on-click="onDeleteClick_" disabled="[[deleteDisabled]]"> [[deleteLabel]] </paper-button>
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.js b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.js index f0cfb40..1afd0dca 100644 --- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.js +++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.js
@@ -48,12 +48,12 @@ }, /** @private */ - onClearSelectionTap_: function() { + onClearSelectionClick_: function() { this.fire('clear-selected-items'); }, /** @private */ - onDeleteTap_: function() { + onDeleteClick_: function() { this.fire('delete-selected-items'); },
diff --git a/ui/webui/resources/cr_elements_resources.grdp b/ui/webui/resources/cr_elements_resources.grdp index 5b2191a..502175ea 100644 --- a/ui/webui/resources/cr_elements_resources.grdp +++ b/ui/webui/resources/cr_elements_resources.grdp
@@ -69,6 +69,14 @@ file="cr_elements/cr_expand_button/cr_expand_button.js" type="chrome_html" compress="gzip" /> + <structure name="IDR_CR_ELEMENTS_CR_ICON_BUTTON_HTML" + file="cr_elements/cr_icon_button/cr_icon_button.html" + type="chrome_html" + compress="gzip" /> + <structure name="IDR_CR_ELEMENTS_CR_ICON_BUTTON_JS" + file="cr_elements/cr_icon_button/cr_icon_button.js" + type="chrome_html" + compress="gzip" /> <structure name="IDR_CR_ELEMENTS_ICONS_HTML" file="cr_elements/icons.html" type="chrome_html"