Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
5f3e2078
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5f3e2078
编写于
6月 11, 2020
作者:
M
Matt Bierner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add more explict message queue for webviews while they are loading
上级
4933ceed
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
46 addition
and
26 deletion
+46
-26
src/vs/workbench/api/browser/mainThreadCodeInsets.ts
src/vs/workbench/api/browser/mainThreadCodeInsets.ts
+1
-1
src/vs/workbench/api/browser/mainThreadWebview.ts
src/vs/workbench/api/browser/mainThreadWebview.ts
+1
-1
src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts
...orkbench/contrib/notebook/browser/notebookEditorWidget.ts
+1
-1
src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts
...ntrib/notebook/browser/view/renderers/backLayerWebView.ts
+1
-1
src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts
...s/workbench/contrib/webview/browser/baseWebviewElement.ts
+36
-16
src/vs/workbench/contrib/webview/browser/dynamicWebviewEditorOverlay.ts
...ch/contrib/webview/browser/dynamicWebviewEditorOverlay.ts
+3
-3
src/vs/workbench/contrib/webview/browser/webview.ts
src/vs/workbench/contrib/webview/browser/webview.ts
+1
-1
src/vs/workbench/contrib/webview/browser/webviewElement.ts
src/vs/workbench/contrib/webview/browser/webviewElement.ts
+1
-1
src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts
...kbench/contrib/webview/electron-browser/webviewElement.ts
+1
-1
未找到文件。
src/vs/workbench/api/browser/mainThreadCodeInsets.ts
浏览文件 @
5f3e2078
...
...
@@ -135,7 +135,7 @@ export class MainThreadEditorInsets implements MainThreadEditorInsetsShape {
async
$postMessage
(
handle
:
number
,
value
:
any
):
Promise
<
boolean
>
{
const
inset
=
this
.
getInset
(
handle
);
inset
.
webview
.
send
Message
(
value
);
inset
.
webview
.
post
Message
(
value
);
return
true
;
}
...
...
src/vs/workbench/api/browser/mainThreadWebview.ts
浏览文件 @
5f3e2078
...
...
@@ -252,7 +252,7 @@ export class MainThreadWebviews extends Disposable implements extHostProtocol.Ma
public
async
$postMessage
(
handle
:
extHostProtocol
.
WebviewPanelHandle
,
message
:
any
):
Promise
<
boolean
>
{
const
webview
=
this
.
getWebviewInput
(
handle
);
webview
.
webview
.
send
Message
(
message
);
webview
.
webview
.
post
Message
(
message
);
return
true
;
}
...
...
src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts
浏览文件 @
5f3e2078
...
...
@@ -1193,7 +1193,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
}
postMessage
(
message
:
any
)
{
this
.
webview
?.
webview
.
send
Message
(
message
);
this
.
webview
?.
webview
.
post
Message
(
message
);
}
//#endregion
...
...
src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts
浏览文件 @
5f3e2078
...
...
@@ -714,7 +714,7 @@ ${loaderJs}
}
private
_sendMessageToWebview
(
message
:
ToWebviewMessage
)
{
this
.
webview
.
send
Message
(
message
);
this
.
webview
.
post
Message
(
message
);
}
clearPreloadsCache
()
{
...
...
src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts
浏览文件 @
5f3e2078
...
...
@@ -48,6 +48,22 @@ interface WebviewContent {
readonly
state
:
string
|
undefined
;
}
namespace
WebviewState
{
export
const
enum
Type
{
Initializing
,
Ready
}
export
class
Initializing
{
readonly
type
=
Type
.
Initializing
;
constructor
(
public
readonly
pendingMessages
:
Array
<
{
readonly
channel
:
string
,
readonly
data
?:
any
}
>
)
{
}
}
export
const
Ready
=
{
type
:
Type
.
Ready
}
as
const
;
export
type
State
=
typeof
Ready
|
Initializing
;
}
export
abstract
class
BaseWebview
<
T
extends
HTMLElement
>
extends
Disposable
{
private
_element
:
T
|
undefined
;
...
...
@@ -56,11 +72,10 @@ export abstract class BaseWebview<T extends HTMLElement> extends Disposable {
private
_focused
:
boolean
|
undefined
;
protected
get
focused
():
boolean
{
return
!!
this
.
_focused
;
}
private
readonly
_ready
:
Promise
<
void
>
;
private
_state
:
WebviewState
.
State
=
new
WebviewState
.
Initializing
([])
;
protected
content
:
WebviewContent
;
constructor
(
// TODO: matb, this should not be protected. The only reason it needs to be is that the base class ends up using it in the call to createElement
protected
readonly
id
:
string
,
...
...
@@ -82,15 +97,18 @@ export abstract class BaseWebview<T extends HTMLElement> extends Disposable {
this
.
_element
=
this
.
createElement
(
options
,
contentOptions
);
this
.
_ready
=
new
Promise
(
resolve
=>
{
const
subscription
=
this
.
_register
(
this
.
on
(
WebviewMessageChannels
.
webviewReady
,
()
=>
{
if
(
this
.
element
)
{
addClass
(
this
.
element
,
'
ready
'
);
}
subscription
.
dispose
();
resolve
();
}));
});
const
subscription
=
this
.
_register
(
this
.
on
(
WebviewMessageChannels
.
webviewReady
,
()
=>
{
if
(
this
.
element
)
{
addClass
(
this
.
element
,
'
ready
'
);
}
if
(
this
.
_state
.
type
===
WebviewState
.
Type
.
Initializing
)
{
this
.
_state
.
pendingMessages
.
forEach
(({
channel
,
data
})
=>
this
.
doPostMessage
(
channel
,
data
));
}
this
.
_state
=
WebviewState
.
Ready
;
subscription
.
dispose
();
}));
this
.
_register
(
this
.
on
(
'
no-csp-found
'
,
()
=>
{
this
.
handleNoCspFound
();
...
...
@@ -176,14 +194,16 @@ export abstract class BaseWebview<T extends HTMLElement> extends Disposable {
private
readonly
_onDidBlur
=
this
.
_register
(
new
Emitter
<
void
>
());
public
readonly
onDidBlur
=
this
.
_onDidBlur
.
event
;
public
send
Message
(
data
:
any
):
void
{
public
post
Message
(
data
:
any
):
void
{
this
.
_send
(
'
message
'
,
data
);
}
protected
_send
(
channel
:
string
,
data
?:
any
):
void
{
this
.
_ready
.
then
(()
=>
this
.
postMessage
(
channel
,
data
))
.
catch
(
err
=>
console
.
error
(
err
));
if
(
this
.
_state
.
type
===
WebviewState
.
Type
.
Initializing
)
{
this
.
_state
.
pendingMessages
.
push
({
channel
,
data
});
}
else
{
this
.
doPostMessage
(
channel
,
data
);
}
}
protected
abstract
readonly
extraContentOptions
:
{
readonly
[
key
:
string
]:
string
};
...
...
@@ -192,7 +212,7 @@ export abstract class BaseWebview<T extends HTMLElement> extends Disposable {
protected
abstract
on
<
T
=
unknown
>
(
channel
:
string
,
handler
:
(
data
:
T
)
=>
void
):
IDisposable
;
protected
abstract
p
ostMessage
(
channel
:
string
,
data
?:
any
):
void
;
protected
abstract
doP
ostMessage
(
channel
:
string
,
data
?:
any
):
void
;
private
_hasAlertedAboutMissingCsp
=
false
;
private
handleNoCspFound
():
void
{
...
...
src/vs/workbench/contrib/webview/browser/dynamicWebviewEditorOverlay.ts
浏览文件 @
5f3e2078
...
...
@@ -142,7 +142,7 @@ export class DynamicWebviewEditorOverlay extends Disposable implements WebviewOv
this
.
_onDidUpdateState
.
fire
(
state
);
}));
this
.
_pendingMessages
.
forEach
(
msg
=>
webview
.
send
Message
(
msg
));
this
.
_pendingMessages
.
forEach
(
msg
=>
webview
.
post
Message
(
msg
));
this
.
_pendingMessages
.
clear
();
}
this
.
container
.
style
.
visibility
=
'
visible
'
;
...
...
@@ -203,9 +203,9 @@ export class DynamicWebviewEditorOverlay extends Disposable implements WebviewOv
private
readonly
_onMissingCsp
=
this
.
_register
(
new
Emitter
<
ExtensionIdentifier
>
());
public
readonly
onMissingCsp
:
Event
<
any
>
=
this
.
_onMissingCsp
.
event
;
send
Message
(
data
:
any
):
void
{
post
Message
(
data
:
any
):
void
{
if
(
this
.
_webview
.
value
)
{
this
.
_webview
.
value
.
send
Message
(
data
);
this
.
_webview
.
value
.
post
Message
(
data
);
}
else
{
this
.
_pendingMessages
.
add
(
data
);
}
...
...
src/vs/workbench/contrib/webview/browser/webview.ts
浏览文件 @
5f3e2078
...
...
@@ -96,7 +96,7 @@ export interface Webview extends IDisposable {
readonly
onMessage
:
Event
<
any
>
;
readonly
onMissingCsp
:
Event
<
ExtensionIdentifier
>
;
send
Message
(
data
:
any
):
void
;
post
Message
(
data
:
any
):
void
;
focus
():
void
;
reload
():
void
;
...
...
src/vs/workbench/contrib/webview/browser/webviewElement.ts
浏览文件 @
5f3e2078
...
...
@@ -163,7 +163,7 @@ export class IFrameWebview extends BaseWebview<HTMLIFrameElement> implements Web
});
}
protected
p
ostMessage
(
channel
:
string
,
data
?:
any
):
void
{
protected
doP
ostMessage
(
channel
:
string
,
data
?:
any
):
void
{
if
(
this
.
element
)
{
this
.
element
.
contentWindow
!
.
postMessage
({
channel
,
args
:
data
},
'
*
'
);
}
...
...
src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts
浏览文件 @
5f3e2078
...
...
@@ -434,7 +434,7 @@ export class ElectronWebviewBasedWebview extends BaseWebview<WebviewTag> impleme
parent
.
appendChild
(
this
.
element
);
}
protected
async
p
ostMessage
(
channel
:
string
,
data
?:
any
):
Promise
<
void
>
{
protected
async
doP
ostMessage
(
channel
:
string
,
data
?:
any
):
Promise
<
void
>
{
await
Promise
.
all
([
this
.
_protocolProvider
.
synchronize
(),
this
.
_domReady
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录