Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
118c3bf4
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
118c3bf4
编写于
4月 23, 2018
作者:
J
Joao Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ask user to open extension URL
上级
5c96e9fe
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
27 addition
and
12 deletion
+27
-12
src/vs/platform/url/electron-browser/inactiveExtensionUrlHandler.ts
...tform/url/electron-browser/inactiveExtensionUrlHandler.ts
+23
-8
src/vs/workbench/api/electron-browser/mainThreadUrls.ts
src/vs/workbench/api/electron-browser/mainThreadUrls.ts
+2
-2
src/vs/workbench/electron-browser/workbench.ts
src/vs/workbench/electron-browser/workbench.ts
+2
-2
未找到文件。
src/vs/platform/url/electron-browser/inactiveExtensionUrlHandler.ts
浏览文件 @
118c3bf4
...
...
@@ -9,6 +9,8 @@ import { TPromise } from 'vs/base/common/winjs.base';
import
{
IExtensionService
}
from
'
vs/workbench/services/extensions/common/extensions
'
;
import
{
createDecorator
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IDisposable
,
toDisposable
,
combinedDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
IDialogService
}
from
'
vs/platform/dialogs/common/dialogs
'
;
import
{
localize
}
from
'
vs/nls
'
;
const
FIVE_MINUTES
=
5
*
60
*
1000
;
const
THIRTY_SECONDS
=
30
*
1000
;
...
...
@@ -17,9 +19,9 @@ function isExtensionId(value: string): boolean {
return
/^
[
a-z0-9
][
a-z0-9
\-]
*
\.[
a-z0-9
][
a-z0-9
\-]
*$/i
.
test
(
value
);
}
export
const
I
InactiveExtensionUrlHandler
=
createDecorator
<
IInactive
ExtensionUrlHandler
>
(
'
inactiveExtensionUrlHandler
'
);
export
const
I
ExtensionUrlHandler
=
createDecorator
<
I
ExtensionUrlHandler
>
(
'
inactiveExtensionUrlHandler
'
);
export
interface
I
Inactive
ExtensionUrlHandler
{
export
interface
IExtensionUrlHandler
{
readonly
_serviceBrand
:
any
;
registerExtensionHandler
(
extensionId
:
string
,
handler
:
IURLHandler
):
void
;
unregisterExtensionHandler
(
extensionId
:
string
):
void
;
...
...
@@ -31,8 +33,10 @@ export interface IInactiveExtensionUrlHandler {
* activates the extension and re-opens the URL once the extension registers
* a URL handler. If the extension never registers a URL handler, the urls
* will eventually be garbage collected.
*
* It also makes sure the user confirms opening URLs directed towards extensions.
*/
export
class
InactiveExtensionUrlHandler
implements
IInactive
ExtensionUrlHandler
,
IURLHandler
{
export
class
ExtensionUrlHandler
implements
I
ExtensionUrlHandler
,
IURLHandler
{
readonly
_serviceBrand
:
any
;
...
...
@@ -42,7 +46,8 @@ export class InactiveExtensionUrlHandler implements IInactiveExtensionUrlHandler
constructor
(
@
IURLService
urlService
:
IURLService
,
@
IExtensionService
private
extensionService
:
IExtensionService
@
IExtensionService
private
extensionService
:
IExtensionService
,
@
IDialogService
private
dialogService
:
IDialogService
)
{
const
interval
=
setInterval
(()
=>
this
.
garbageCollect
(),
THIRTY_SECONDS
);
...
...
@@ -52,13 +57,22 @@ export class InactiveExtensionUrlHandler implements IInactiveExtensionUrlHandler
]);
}
handleURL
(
uri
:
URI
):
TPromise
<
boolean
>
{
async
handleURL
(
uri
:
URI
):
TPromise
<
boolean
>
{
if
(
!
isExtensionId
(
uri
.
authority
))
{
return
TPromise
.
as
(
false
)
;
return
false
;
}
const
extensionId
=
uri
.
authority
;
const
result
=
await
this
.
dialogService
.
confirm
({
message
:
localize
(
'
confirmUrl
'
,
"
Do you want to let the {0} extension open the following URL?
"
,
extensionId
),
detail
:
uri
.
toString
()
});
if
(
!
result
.
confirmed
)
{
return
true
;
}
// let the ExtensionUrlHandler instance handle this
if
(
this
.
extensionIds
.
has
(
extensionId
))
{
return
TPromise
.
as
(
false
);
...
...
@@ -76,8 +90,9 @@ export class InactiveExtensionUrlHandler implements IInactiveExtensionUrlHandler
uris
.
push
({
timestamp
,
uri
});
// activate the extension
return
this
.
extensionService
.
activateByEvent
(
`onUri:
${
extensionId
}
`
)
.
then
(()
=>
true
);
await
this
.
extensionService
.
activateByEvent
(
`onUri:
${
extensionId
}
`
);
return
true
;
}
registerExtensionHandler
(
extensionId
:
string
,
handler
:
IURLHandler
):
void
{
...
...
src/vs/workbench/api/electron-browser/mainThreadUrls.ts
浏览文件 @
118c3bf4
...
...
@@ -9,7 +9,7 @@ import { TPromise } from 'vs/base/common/winjs.base';
import
{
IURLService
,
IURLHandler
}
from
'
vs/platform/url/common/url
'
;
import
URI
from
'
vs/base/common/uri
'
;
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
I
Inactive
ExtensionUrlHandler
}
from
'
vs/platform/url/electron-browser/inactiveExtensionUrlHandler
'
;
import
{
IExtensionUrlHandler
}
from
'
vs/platform/url/electron-browser/inactiveExtensionUrlHandler
'
;
class
ExtensionUrlHandler
implements
IURLHandler
{
...
...
@@ -37,7 +37,7 @@ export class MainThreadUrls implements MainThreadUrlsShape {
constructor
(
context
:
IExtHostContext
,
@
IURLService
private
urlService
:
IURLService
,
@
I
InactiveExtensionUrlHandler
private
inactiveExtensionUrlHandler
:
IInactive
ExtensionUrlHandler
@
I
ExtensionUrlHandler
private
inactiveExtensionUrlHandler
:
I
ExtensionUrlHandler
)
{
this
.
proxy
=
context
.
getProxy
(
ExtHostContext
.
ExtHostUrls
);
}
...
...
src/vs/workbench/electron-browser/workbench.ts
浏览文件 @
118c3bf4
...
...
@@ -110,7 +110,7 @@ import { IPCClient } from 'vs/base/parts/ipc/common/ipc';
import
{
registerWindowDriver
}
from
'
vs/platform/driver/electron-browser/driver
'
;
import
{
IPreferencesService
}
from
'
vs/workbench/services/preferences/common/preferences
'
;
import
{
PreferencesService
}
from
'
vs/workbench/services/preferences/browser/preferencesService
'
;
import
{
I
InactiveExtensionUrlHandler
,
Inactive
ExtensionUrlHandler
}
from
'
vs/platform/url/electron-browser/inactiveExtensionUrlHandler
'
;
import
{
I
ExtensionUrlHandler
,
ExtensionUrlHandler
}
from
'
vs/platform/url/electron-browser/inactiveExtensionUrlHandler
'
;
export
const
EditorsVisibleContext
=
new
RawContextKey
<
boolean
>
(
'
editorIsOpen
'
,
false
);
export
const
InZenModeContext
=
new
RawContextKey
<
boolean
>
(
'
inZenMode
'
,
false
);
...
...
@@ -618,7 +618,7 @@ export class Workbench implements IPartService {
serviceCollection
.
set
(
ISCMService
,
new
SyncDescriptor
(
SCMService
));
// Inactive extension URL handler
serviceCollection
.
set
(
I
InactiveExtensionUrlHandler
,
new
SyncDescriptor
(
Inactive
ExtensionUrlHandler
));
serviceCollection
.
set
(
I
ExtensionUrlHandler
,
new
SyncDescriptor
(
ExtensionUrlHandler
));
// Text Model Resolver Service
serviceCollection
.
set
(
ITextModelService
,
new
SyncDescriptor
(
TextModelResolverService
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录