-
Notifications
You must be signed in to change notification settings - Fork 119
[MBL-19551][S/T/P] Immersive Video Player for Studio LTI Media Embeds #3772
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[MBL-19551][S/T/P] Immersive Video Player for Studio LTI Media Embeds #3772
Conversation
refs: MBL-19480 affects: Student, Teacher, Parent builds: Student, Teacher, Parent release note: Introduced immersive experience for video player.
This reverts commit d459e0a.
refs: MBL-19551 affects: Student, Teacher, Parent builds: Student, Teacher, Parent release note: Introduced immersive experience for video players
Claude Code ReviewUpdated: 2025-11-26 Build Status
Code Review✅ APPROVED - No critical issues after refactoring:
✅ Approved (fix license header before merge) |
Release Note:Introduced immersive experience for video players Affected Apps: Student, Teacher, ParentBuilds: Student, Teacher, Parent
|
BuildsCommit: Update InsertStudioOpenInDetailButtonsTests.swift (8046ae2) |
Claude Code ReviewUpdated: 2025-11-26 Critical Issues Found
❌ Issues found |
… into feature/MBL-19551-Immersive-Player-Studio-Videos
Claude Code ReviewUpdated: 2025-11-26 Critical Issues Found
❌ Issues found |
… into feature/MBL-19551-Immersive-Player-Studio-Videos
Claude Code Review✅ APPROVED Summary: Key observations:
|
Claude Code Review - Updated 2025-11-26Critical Issues:
Issues found |
Claude Code ReviewUpdated: 2025-11-27 Status:
|
Claude Code ReviewUpdated: 2025-11-27 ✅ No critical issues found.
✅ |
|
|
||
| .open_details_button { | ||
| font-weight: 400; | ||
| font-size: \(fontSize)px; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't see where does this get its value.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ooops!.
I copied that from the Canvas upload one, and totally forgot about this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| /// later to set immersive video player title. This mainly useful when triggering the player | ||
| /// from a button that's internal to video-frame. (`Expand` button) | ||
| /// from a button that's internal to video-frame. (`Expand` button). | ||
| /// Only for Canvas uploads video players. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please fix this sentence
|
|
||
| private var env: AppEnvironment = .defaultValue | ||
| private let webView = CoreWebView() | ||
| private let webView = CoreWebView(features: [.canvasLTIPostMessageHandler]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see this is added for pages, quiz details, student assignment details.
Should it not need to be added for other places?
Parent and teacher assignment details?
Like syllabus or Inbox?
Not sure about discussions (the ones using the viewcontroller, and the new ones opening the web version)
Or should this be used by default in all webviews?
Or this is needed only when coming from UIKit?
cc @vargaat for input
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It should be used for all webViews meant to load content as HTML text as they lack the scripts to solve the issue of LTI frame resizing.
Theoretically speaking, it won't be necessary for WebView loading full URLs as those can load the needed Javascript scripts required for that and much more.
| .open_details_button { | ||
| font-weight: 400; | ||
| font-size: \(fontSize)px; | ||
| font-size: 14px; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
wasn't the whole point that this should scale? As in the previous PR
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, but turned out that fixing icon style solved the issue. Apparently the old style was blocking the scaling for the whole button.
… into feature/MBL-19551-Immersive-Player-Studio-Videos
Claude Code Review - Updated 2025-11-27Critical Issues FoundSecurity: Missing origin validation in LTI PostMessage handler - Message handler processes postMessage from ANY origin without validating event.origin. Allows malicious iframes to trigger frameResize or extract window size data. Requires whitelist validation. Security: XSS via innerHTML in SVG icon injection - InsertStudioOpenInDetailButtons.js uses direct innerHTML for SVG without sanitization. If externalLinkData asset is compromised, enables arbitrary script execution. Correctness: Changed error semantics in StudioIFrameReplaceInteractor - Changed from fail-fast to silent skipping. Only throws if ALL videos missing, not on partial replacements. Failures now silent, risking broken playback without warning. Logic: Unsafe query string validation - Detection uses substring match instead of proper parameter parsing. Creates false positives if string appears anywhere in query value. Correctness: Unsafe URL title decoding - Title from URL query parameter decoded without validation. Could accept null bytes or invalid Unicode sequences. Memory: Multiple event listener accumulation - Script injections before flag is set create duplicate listeners. No cleanup on navigation. ❌ Issues found |
Claude Code ReviewUpdated: 2025-11-27 ✅ APPROVED - No critical issues. Key observations:
✅ |
|
Will be handled as part of other work. (MBL-19574) |


refs: MBL-19551
affects: Student, Teacher, Parent
builds: Student, Teacher, Parent
release note: Introduced immersive experience for video players
Test Plan
Checklist