cef-browser-window.go 18.3 KB
Newer Older
yanghye's avatar
yanghye 已提交
1 2 3 4
//----------------------------------------
//
// Copyright © yanghy. All Rights Reserved.
//
yanghye's avatar
yanghye 已提交
5
// Licensed under GNU General Public License v3.0
yanghye's avatar
yanghye 已提交
6 7 8 9 10 11
//
//----------------------------------------

package cef

import (
yanghye's avatar
yanghye 已提交
12
	. "github.com/energye/energy/common"
yanghye's avatar
yanghye 已提交
13
	. "github.com/energye/energy/consts"
yanghye's avatar
yanghye 已提交
14
	"github.com/energye/energy/ipc"
yanghye's avatar
yanghye 已提交
15
	"github.com/energye/energy/logger"
16 17
	"github.com/energye/golcl/energy/emfs"
	"github.com/energye/golcl/energy/tools"
yanghye's avatar
yanghye 已提交
18
	"github.com/energye/golcl/lcl"
yanghye's avatar
yanghye 已提交
19
	"github.com/energye/golcl/lcl/api"
20
	"github.com/energye/golcl/lcl/types"
yanghye's avatar
yanghye 已提交
21 22 23
)

var (
yanghye's avatar
yanghye 已提交
24 25 26 27 28
	//1. BrowserWindow 是基于 BaseWindow 浏览器主窗口
	//
	//2. 可以对窗口的属性设置和事件监听,chromium 的配置和事件监听
	//
	//3. 该窗口是主窗体,因此初始化时必须第一个初始化完成,如果创建子窗口最好在 SetBrowserInitAfter 回调函数中创建
yanghye's avatar
yanghye 已提交
29
	BrowserWindow = &browser{
30
		browserEvent: &BrowserEvent{},
yanghye's avatar
yanghye 已提交
31
		Config: &browserConfig{
32
			WindowProperty: NewWindowProperty(),
yanghye's avatar
yanghye 已提交
33
		},
34
		windowInfo:   make(map[int32]IBrowserWindow),
35
		windowSerial: 1, //默认1开始
yanghye's avatar
yanghye 已提交
36
	}
yanghye's avatar
yanghye 已提交
37
	browserProcessStartAfterCallback browserProcessStartAfterCallbackFunc
yanghye's avatar
yanghye 已提交
38 39
)

40
type browserProcessStartAfterCallbackFunc func(success bool)
yanghye's avatar
yanghye 已提交
41 42 43 44 45 46 47 48 49 50

// SetBrowserProcessStartAfterCallback 主进程启动之后回调函数
func SetBrowserProcessStartAfterCallback(callback browserProcessStartAfterCallbackFunc) {
	if Args.IsMain() {
		if browserProcessStartAfterCallback == nil {
			browserProcessStartAfterCallback = callback
		}
	}
}

yanghye's avatar
yanghye 已提交
51 52
// 浏览器包装结构体
type browser struct {
53 54
	mainBrowserWindow   *browserWindow               //LCL 主浏览器窗口
	mainVFBrowserWindow *ViewsFrameworkBrowserWindow //Views Frameworks 主浏览器窗口
55
	popupWindow         IBrowserWindow               //弹出的子窗口
56 57 58 59
	browserEvent        *BrowserEvent                //浏览器全局事件
	Config              *browserConfig               //浏览器和窗口配置
	windowInfo          map[int32]IBrowserWindow     //窗口信息集合
	windowSerial        int32                        //窗口序号
yanghye's avatar
yanghye 已提交
60 61
}

62
// 浏览器全局事件监听-扩展
yanghye's avatar
yanghye 已提交
63 64 65
//
// 在主浏览器进程调用
type BrowserEvent struct {
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
	chromium                  IChromiumEvent                          //chromium event
	onBeforePopup             ChromiumEventOnBeforePopupForWindowInfo //default
	onDragEnter               ChromiumEventOnDragEnter                //default
	onDraggableRegionsChanged ChromiumEventOnDraggableRegionsChanged  //default
	onLoadEnd                 ChromiumEventOnLoadEnd                  //default
	onAfterCreated            ChromiumEventOnAfterCreated             //default
	onBeforeBrowser           ChromiumEventOnBeforeBrowser            //default
	onBeforeClose             ChromiumEventOnBeforeClose              //default
	onClose                   ChromiumEventOnClose                    //default
	onFrameCreated            ChromiumEventOnFrameCreated             //default
	onFrameDetached           ChromiumEventOnFrameDetached            //default
	onMainFrameChanged        ChromiumEventOnMainFrameChanged         //default
	onBeforeDownload          ChromiumEventOnBeforeDownload           //default can cover
	onKeyEvent                ChromiumEventOnKeyEvent                 //default can cover
	onProcessMessageReceived  BrowseProcessMessageReceived            //default
	onTitleChange             ChromiumEventOnTitleChange              //default
82 83
	onContextMenuCommand      ChromiumEventOnContextMenuCommand       //default can cover
	onBeforeContextMenu       ChromiumEventOnBeforeContextMenu        //default can cover
84
	onBeforeResourceLoad      ChromiumEventOnBeforeResourceLoad       //default
yanghye's avatar
yanghye 已提交
85 86
}

yanghye's avatar
yanghye 已提交
87
type browserWindow struct {
88
	LCLBrowserWindow
yanghye's avatar
yanghye 已提交
89
	isFirstActivate bool
90 91
}

yanghye's avatar
yanghye 已提交
92 93
// 运行应用
//
yanghye's avatar
yanghye 已提交
94 95
// 多进程方式,启动主进程然后启动子进程,在MacOS下,需要单独调用启动子进程函数,单进程只启动主进程
//
yanghye's avatar
yanghye 已提交
96
// 主进程启动成功之后,将创建主窗口 mainBrowserWindow 是一个默认的主窗口
yanghye's avatar
yanghye 已提交
97
//
98
// externalMessagePump和multiThreadedMessageLoop是false时启用 ViewsFrameworkBrowserWindow 窗口
99
//
yanghye's avatar
yanghye 已提交
100 101 102 103 104
// 在这里启动浏览器的主进程和子进程
func Run(cefApp *TCEFApplication) {
	if IsDarwin() && !SingleProcess && !Args.IsMain() {
		// mac os 启动子进程
		cefApp.StartSubProcess()
yanghye's avatar
yanghye 已提交
105
		cefApp.Free()
yanghye's avatar
yanghye 已提交
106
	} else {
107
		//externalMessagePump 和 multiThreadedMessageLoop 为 false 时启用CEF views framework (ViewsFrameworkBrowserWindow) 窗口
108 109
		IsMessageLoop = !api.GoBool(cefApp.cfg.externalMessagePump) && !api.GoBool(cefApp.cfg.multiThreadedMessageLoop)
		if IsMessageLoop {
110
			BrowserWindow.appContextInitialized(cefApp)
yanghye's avatar
yanghye 已提交
111
		}
112
		success := cefApp.StartMainProcess()
yanghye's avatar
yanghye 已提交
113
		if browserProcessStartAfterCallback != nil {
114
			browserProcessStartAfterCallback(success)
yanghye's avatar
yanghye 已提交
115
		}
116 117 118 119
		if success {
			internalBrowserIPCOnEventInit()
			ipc.IPC.StartBrowserIPC()
			bindGoToJS(nil, nil)
120
			if IsMessageLoop {
yanghye's avatar
yanghye 已提交
121 122
				cefApp.RunMessageLoop()
			} else {
123 124 125
				if BrowserWindow.mainBrowserWindow == nil {
					BrowserWindow.mainBrowserWindow = &browserWindow{}
				}
yanghye's avatar
yanghye 已提交
126 127
				lcl.RunApp(&BrowserWindow.mainBrowserWindow)
			}
yanghye's avatar
yanghye 已提交
128 129 130 131
		}
	}
}

yanghye's avatar
yanghye 已提交
132
func (m *browserWindow) OnFormCreate(sender lcl.IObject) {
133
	m.windowProperty = BrowserWindow.Config.WindowProperty
yanghye's avatar
yanghye 已提交
134
	m.SetWindowType(WT_MAIN_BROWSER)
yanghye's avatar
yanghye 已提交
135 136 137
	m.FormCreate()
	m.defaultWindowEvent()
	m.defaultWindowCloseEvent()
138
	m.ChromiumCreate(BrowserWindow.Config.ChromiumConfig(), BrowserWindow.Config.Url)
yanghye's avatar
yanghye 已提交
139 140 141 142 143 144 145 146
	m.putChromiumWindowInfo()
	m.defaultChromiumEvent()
	m.AddOnCloseQuery(func(sender lcl.IObject, canClose *bool) bool {
		if m.tray != nil {
			m.tray.close()
		}
		return false
	})
147 148
	m.SetCaption(m.windowProperty.Title)
	if m.windowProperty.IconFS != "" {
149 150 151
		if emfs.IsExist(m.windowProperty.IconFS) {
			_ = lcl.Application.Icon().LoadFromFSFile(m.windowProperty.IconFS)
		}
152
	} else if m.windowProperty.Icon != "" {
153 154 155
		if tools.IsExist(m.windowProperty.Icon) {
			lcl.Application.Icon().LoadFromFile(m.windowProperty.Icon)
		}
156
	}
157 158 159
	if m.windowProperty.CenterWindow {
		m.SetWidth(m.windowProperty.Width)
		m.SetHeight(m.windowProperty.Height)
160 161 162
		m.SetPosition(types.PoDesktopCenter)
	} else {
		m.SetPosition(types.PoDesigned)
163
		m.SetBounds(m.windowProperty.X, m.windowProperty.Y, m.windowProperty.Width, m.windowProperty.Height)
164
	}
165
	if m.windowProperty.AlwaysOnTop {
166 167
		m.SetFormStyle(types.FsSystemStayOnTop)
	}
168 169 170
	m.EnabledMinimize(m.windowProperty.CanMinimize)
	m.EnabledMaximize(m.windowProperty.CanMaximize)
	if !m.windowProperty.CanResize {
171
		m.SetBorderStyle(types.BsSingle)
yanghye's avatar
yanghye 已提交
172
	}
yanghye's avatar
yanghye 已提交
173 174
	if BrowserWindow.Config.browserWindowOnEventCallback != nil {
		BrowserWindow.browserEvent.chromium = m.chromium
175
		BrowserWindow.Config.browserWindowOnEventCallback(BrowserWindow.browserEvent, &m.LCLBrowserWindow)
yanghye's avatar
yanghye 已提交
176 177 178 179 180 181 182 183
	}

	//主进程(主窗口)启动后回调函数事件
	//主窗体第一次激活之后执行一次
	m.SetOnActivateAfter(func(sender lcl.IObject) {
		if !m.isFirstActivate {
			m.isFirstActivate = true
			if BrowserWindow.Config.browserWindowAfterOnEventCallback != nil {
184
				BrowserWindow.Config.browserWindowAfterOnEventCallback(&m.LCLBrowserWindow)
yanghye's avatar
yanghye 已提交
185 186 187 188 189
			}
		}
	})
}

190
func (m *browser) MainWindow() IBrowserWindow {
191 192 193 194
	if m.mainVFBrowserWindow != nil {
		return m.mainVFBrowserWindow
	} else if m.mainBrowserWindow != nil {
		return m.mainBrowserWindow
195
	}
196 197 198 199 200
	return nil
	//if IsMessageLoop {
	//	return m.mainVFBrowserWindow.BrowserWindow()
	//}
	//return m.mainBrowserWindow.BrowserWindow()
yanghye's avatar
yanghye 已提交
201 202
}

203
// 主窗口和chromium初始化时回调
yanghye's avatar
yanghye 已提交
204
//
205 206 207 208
// event 			浏览器事件
//
// browserWindow 	窗口信息对象
func (m *browser) SetBrowserInit(fn browserWindowOnEventCallback) {
yanghye's avatar
yanghye 已提交
209 210 211
	m.Config.setBrowserWindowInitOnEvent(fn)
}

212
// 基于LCL窗口 - 主窗体和chromium初始后回调
yanghye's avatar
yanghye 已提交
213 214 215
//
// 在这里可以对主窗体属性设置、添加子窗口、带有browser的窗口和子组件创建
//
yanghye's avatar
yanghye 已提交
216
// mainBrowserWindow 窗口信息对象
217
func (m *browser) SetBrowserInitAfter(fn browserWindowAfterOnEventCallback) {
yanghye's avatar
yanghye 已提交
218 219 220
	m.Config.setBrowserWindowInitAfterOnEvent(fn)
}

yanghye's avatar
yanghye 已提交
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
// 设置或增加一个窗口序号
func (m *browser) setOrIncNextWindowNum(browserId ...int32) int32 {
	if len(browserId) > 0 {
		m.windowSerial = browserId[0]
	} else {
		m.windowSerial++
	}
	logger.Debug("next window serial:", m.windowSerial)
	return m.windowSerial
}

// 设置或减少一个窗口序号
func (m *browser) setOrDecNextWindowNum(browserId ...int32) int32 {
	if len(browserId) > 0 {
		m.windowSerial = browserId[0]
	} else {
		m.windowSerial--
	}
	return m.windowSerial
}

// 获得窗口序号
func (m *browser) GetNextWindowNum() int32 {
	return m.windowSerial
}

247
func (m *browser) createNextLCLPopupWindow() {
248
	m.popupWindow = NewLCLWindow(BrowserWindow.Config.WindowProperty, m.MainWindow().AsLCLBrowserWindow().BrowserWindow())
249
	m.popupWindow.AsLCLBrowserWindow().BrowserWindow().defaultWindowCloseEvent()
yanghye's avatar
yanghye 已提交
250 251 252
}

// 拿到窗口信息
253
func (m *browser) GetWindowInfo(browserId int32) IBrowserWindow {
yanghye's avatar
yanghye 已提交
254 255 256 257 258 259
	if winInfo, ok := m.windowInfo[browserId]; ok {
		return winInfo
	}
	return nil
}

260
func (m *browser) GetWindowsInfo() map[int32]IBrowserWindow {
yanghye's avatar
yanghye 已提交
261 262 263
	return m.windowInfo
}

264
func (m *browser) putWindowInfo(browserId int32, windowInfo IBrowserWindow) {
265
	m.windowInfo[browserId] = windowInfo
yanghye's avatar
yanghye 已提交
266 267
}

yanghye's avatar
yanghye 已提交
268 269
func (m *browser) removeWindowInfo(browseId int32) {
	delete(m.windowInfo, browseId)
270
	RemoveGoForm(browseId)
yanghye's avatar
yanghye 已提交
271 272 273 274
}

func (m *browser) GetBrowser(browseId int32) *ICefBrowser {
	if winInfo, ok := m.windowInfo[browseId]; ok {
275
		return winInfo.Browser()
yanghye's avatar
yanghye 已提交
276
	}
yanghye's avatar
yanghye 已提交
277
	return nil
yanghye's avatar
yanghye 已提交
278 279
}

yanghye's avatar
yanghye 已提交
280
func (m *browser) putBrowserFrame(browser *ICefBrowser, frame *ICefFrame) {
281
	if winInfo, ok := m.windowInfo[browser.Identifier()]; ok {
282 283
		winInfo.setBrowser(browser)
		winInfo.addFrame(frame)
yanghye's avatar
yanghye 已提交
284 285 286 287 288
	}
}

func (m *browser) GetFrames(browseId int32) map[int64]*ICefFrame {
	if winInfo, ok := m.windowInfo[browseId]; ok {
289
		return winInfo.Frames()
yanghye's avatar
yanghye 已提交
290 291 292 293 294 295
	}
	return nil
}

func (m *browser) GetFrame(browseId int32, frameId int64) *ICefFrame {
	if winInfo, ok := m.windowInfo[browseId]; ok {
296
		return winInfo.Frames()[frameId]
yanghye's avatar
yanghye 已提交
297 298 299 300 301 302
	}
	return nil
}

func (m *browser) RemoveFrame(browseId int32, frameId int64) {
	if winInfo, ok := m.windowInfo[browseId]; ok {
303
		delete(winInfo.Frames(), frameId)
yanghye's avatar
yanghye 已提交
304 305 306 307 308 309 310 311 312 313 314 315
	}
}

func (m *browser) IsSameFrame(browseId int32, frameId int64) bool {
	if frame := m.GetFrame(browseId, frameId); frame != nil {
		return true
	}
	return false
}

func (m *browser) removeNoValidFrames() {
	for _, winInfo := range m.windowInfo {
316
		for _, frm := range winInfo.Frames() {
yanghye's avatar
yanghye 已提交
317
			if !frm.IsValid() {
318
				delete(winInfo.Frames(), frm.Id)
yanghye's avatar
yanghye 已提交
319 320
			}
		}
yanghye's avatar
yanghye 已提交
321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337
	}
}

// BrowserEvent.SetOnAfterCreated
func (m *BrowserEvent) SetOnAfterCreated(event ChromiumEventOnAfterCreated) {
	if Args.IsMain() {
		m.onAfterCreated = event
	}
}

// BrowserEvent.SetOnBeforeBrowser
func (m *BrowserEvent) SetOnBeforeBrowser(event ChromiumEventOnBeforeBrowser) {
	if Args.IsMain() {
		m.onBeforeBrowser = event
	}
}

yanghye's avatar
yanghye 已提交
338 339 340 341 342 343 344
// BrowserEvent.SetOnAddressChange
func (m *BrowserEvent) SetOnAddressChange(event ChromiumEventOnAddressChange) {
	if Args.IsMain() {
		m.chromium.SetOnAddressChange(event)
	}
}

yanghye's avatar
yanghye 已提交
345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382
// BrowserEvent.SetOnBeforeClose
func (m *BrowserEvent) SetOnBeforeClose(event ChromiumEventOnBeforeClose) {
	if Args.IsMain() {
		m.onBeforeClose = event
	}
}

// BrowserEvent.SetOnClose
func (m *BrowserEvent) SetOnClose(event ChromiumEventOnClose) {
	if Args.IsMain() {
		m.onClose = event
	}
}

// BrowserEvent.SetOnPdfPrintFinished
func (m *BrowserEvent) SetOnPdfPrintFinished(event ChromiumEventOnResult) {
	if Args.IsMain() {
		m.chromium.SetOnPdfPrintFinished(event)
	}
}

// BrowserEvent.SetOnZoomPctAvailable
func (m *BrowserEvent) SetOnZoomPctAvailable(event ChromiumEventOnResultFloat) {
	if Args.IsMain() {
		m.chromium.SetOnZoomPctAvailable(event)
	}
}

// BrowserEvent.SetOnLoadStart
func (m *BrowserEvent) SetOnLoadStart(event ChromiumEventOnLoadStart) {
	if Args.IsMain() {
		m.chromium.SetOnLoadStart(event)
	}
}

// BrowserEvent.SetOnLoadingStateChange
func (m *BrowserEvent) SetOnLoadingStateChange(event ChromiumEventOnLoadingStateChange) {
	if Args.IsMain() {
383
		m.chromium.SetOnLoadingStateChange(event)
yanghye's avatar
yanghye 已提交
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403
	}
}

// BrowserEvent.SetOnLoadingProgressChange
func (m *BrowserEvent) SetOnLoadingProgressChange(event ChromiumEventOnLoadingProgressChange) {
	if Args.IsMain() {
		m.chromium.SetOnLoadingProgressChange(event)
	}
}

// BrowserEvent.SetOnLoadError
func (m *BrowserEvent) SetOnLoadError(event ChromiumEventOnLoadError) {
	if Args.IsMain() {
		m.chromium.SetOnLoadError(event)
	}
}

// BrowserEvent.SetOnLoadEnd
func (m *BrowserEvent) SetOnLoadEnd(event ChromiumEventOnLoadEnd) {
	if Args.IsMain() {
404
		m.onLoadEnd = event
yanghye's avatar
yanghye 已提交
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443
	}
}

// BrowserEvent.SetOnBeforeDownload
func (m *BrowserEvent) SetOnBeforeDownload(event ChromiumEventOnBeforeDownload) {
	if Args.IsMain() {
		m.onBeforeDownload = event
	}
}

// BrowserEvent.SetOnDownloadUpdated
func (m *BrowserEvent) SetOnDownloadUpdated(event ChromiumEventOnDownloadUpdated) {
	if Args.IsMain() {
		m.chromium.SetOnDownloadUpdated(event)
	}
}

// BrowserEvent.SetOnFullScreenModeChange
func (m *BrowserEvent) SetOnFullScreenModeChange(event ChromiumEventOnFullScreenModeChange) {
	if Args.IsMain() {
		m.chromium.SetOnFullScreenModeChange(event)
	}
}

// BrowserEvent.SetOnKeyEvent
func (m *BrowserEvent) SetOnKeyEvent(event ChromiumEventOnKeyEvent) {
	if Args.IsMain() {
		m.onKeyEvent = event
	}
}

// BrowserEvent.SetOnTitleChange
func (m *BrowserEvent) SetOnTitleChange(event ChromiumEventOnTitleChange) {
	if Args.IsMain() {
		m.onTitleChange = event
	}
}

// BrowserEvent.SetOnRenderCompMsg
444
func (m *BrowserEvent) SetOnRenderCompMsg(event ChromiumEventOnCompMsg) {
yanghye's avatar
yanghye 已提交
445 446 447 448 449
	if Args.IsMain() {
		m.chromium.SetOnRenderCompMsg(event)
	}
}

450 451 452 453 454 455 456 457 458 459 460 461 462 463
// BrowserEvent.SetOnWidgetCompMsg
func (m *BrowserEvent) SetOnWidgetCompMsg(event ChromiumEventOnCompMsg) {
	if Args.IsMain() {
		m.chromium.SetOnWidgetCompMsg(event)
	}
}

// BrowserEvent.SetOnBrowserCompMsg
func (m *BrowserEvent) SetOnBrowserCompMsg(event ChromiumEventOnCompMsg) {
	if Args.IsMain() {
		m.chromium.SetOnBrowserCompMsg(event)
	}
}

yanghye's avatar
yanghye 已提交
464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494
// BrowserEvent.SetOnRenderProcessTerminated
func (m *BrowserEvent) SetOnRenderProcessTerminated(event ChromiumEventOnRenderProcessTerminated) {
	if Args.IsMain() {
		m.chromium.SetOnRenderProcessTerminated(event)
	}
}

// BrowserEvent.SetOnRenderViewReady
func (m *BrowserEvent) SetOnRenderViewReady(event ChromiumEventOnCefBrowser) {
	if Args.IsMain() {
		m.chromium.SetOnRenderViewReady(event)
	}
}

// BrowserEvent.SetOnScrollOffsetChanged
func (m *BrowserEvent) SetOnScrollOffsetChanged(event ChromiumEventOnScrollOffsetChanged) {
	if Args.IsMain() {
		m.chromium.SetOnScrollOffsetChanged(event)
	}
}

// BrowserEvent.SetOnBrowseProcessMessageReceived
func (m *BrowserEvent) SetOnBrowseProcessMessageReceived(event BrowseProcessMessageReceived) {
	if Args.IsMain() {
		m.onProcessMessageReceived = event
	}
}

// BrowserEvent.SetOnBeforeResourceLoad
func (m *BrowserEvent) SetOnBeforeResourceLoad(event ChromiumEventOnBeforeResourceLoad) {
	if Args.IsMain() {
495
		m.onBeforeResourceLoad = event
yanghye's avatar
yanghye 已提交
496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606
	}
}

// BrowserEvent.SetOnResourceResponse
func (m *BrowserEvent) SetOnResourceResponse(event ChromiumEventOnResourceResponse) {
	if Args.IsMain() {
		m.chromium.SetOnResourceResponse(event)
	}
}

// BrowserEvent.SetOnResourceRedirect
func (m *BrowserEvent) SetOnResourceRedirect(event ChromiumEventOnResourceRedirect) {
	if Args.IsMain() {
		m.chromium.SetOnResourceRedirect(event)
	}
}

// BrowserEvent.SetOnResourceLoadComplete
func (m *BrowserEvent) SetOnResourceLoadComplete(event ChromiumEventOnResourceLoadComplete) {
	if Args.IsMain() {
		m.chromium.SetOnResourceLoadComplete(event)
	}
}

// BrowserEvent.SetOnCookieSet
func (m *BrowserEvent) SetOnCookieSet(event ChromiumEventOnCookieSet) {
	if Args.IsMain() {
		m.chromium.SetOnCookieSet(event)
	}
}

// BrowserEvent.SetOnCookiesDeleted
func (m *BrowserEvent) SetOnCookiesDeleted(event ChromiumEventOnCookiesDeleted) {
	if Args.IsMain() {
		m.chromium.SetOnCookiesDeleted(event)
	}
}

// BrowserEvent.SetOnCookiesFlushed
func (m *BrowserEvent) SetOnCookiesFlushed(event ChromiumEventOnCookiesFlushed) {
	if Args.IsMain() {
		m.chromium.SetOnCookiesFlushed(event)
	}
}

// BrowserEvent.SetOnCookiesVisited
func (m *BrowserEvent) SetOnCookiesVisited(event ChromiumEventOnCookiesVisited) {
	if Args.IsMain() {
		m.chromium.SetOnCookiesVisited(event)
	}
}

// BrowserEvent.SetOnCookieVisitorDestroyed
func (m *BrowserEvent) SetOnCookieVisitorDestroyed(event ChromiumEventOnCookieVisitorDestroyed) {
	if Args.IsMain() {
		m.chromium.SetOnCookieVisitorDestroyed(event)
	}
}

// BrowserEvent.SetOnBeforeContextMenu
func (m *BrowserEvent) SetOnBeforeContextMenu(event ChromiumEventOnBeforeContextMenu) {
	if Args.IsMain() {
		m.onBeforeContextMenu = event
	}
}

// BrowserEvent.SetOnContextMenuCommand
func (m *BrowserEvent) SetOnContextMenuCommand(event ChromiumEventOnContextMenuCommand) {
	if Args.IsMain() {
		m.onContextMenuCommand = event
	}
}

// BrowserEvent.SetOnContextMenuDismissed
func (m *BrowserEvent) SetOnContextMenuDismissed(event ChromiumEventOnContextMenuDismissed) {
	if Args.IsMain() {
		m.chromium.SetOnContextMenuDismissed(event)
	}
}

// BrowserEvent.SetOnFrameAttached
func (m *BrowserEvent) SetOnFrameAttached(event ChromiumEventOnFrameAttached) {
	if Args.IsMain() {
		m.chromium.SetOnFrameAttached(event)
	}
}

// BrowserEvent.SetOnFrameCreated
func (m *BrowserEvent) SetOnFrameCreated(event ChromiumEventOnFrameCreated) {
	if Args.IsMain() {
		m.onFrameCreated = event
	}
}

// BrowserEvent.SetOnFrameDetached
func (m *BrowserEvent) SetOnFrameDetached(event ChromiumEventOnFrameDetached) {
	if Args.IsMain() {
		m.onFrameDetached = event
	}
}

// BrowserEvent.SetOnMainFrameChanged
func (m *BrowserEvent) SetOnMainFrameChanged(event ChromiumEventOnMainFrameChanged) {
	if Args.IsMain() {
		m.onMainFrameChanged = event
	}
}

// BrowserEvent.SetOnBeforePopup
//
// 子窗口弹出之前,设置子窗口样式及系统组件和功能
yanghye's avatar
yanghye 已提交
607
func (m *BrowserEvent) SetOnBeforePopup(event ChromiumEventOnBeforePopupForWindowInfo) {
yanghye's avatar
yanghye 已提交
608 609 610 611 612 613
	if Args.IsMain() {
		m.onBeforePopup = event
	}
}

// BrowserEvent.SetOnOpenUrlFromTab
614 615 616 617 618 619 620 621
//func (m *BrowserEvent) SetOnOpenUrlFromTab(event ChromiumEventOnOpenUrlFromTab) {
//	if Args.IsMain() {
//		m.chromium.SetOnOpenUrlFromTab(event)
//	}
//}

// BrowserEvent.SetOnFindResult
func (m *BrowserEvent) SetOnFindResult(event ChromiumEventOnFindResult) {
yanghye's avatar
yanghye 已提交
622
	if Args.IsMain() {
623
		m.chromium.SetOnFindResult(event)
yanghye's avatar
yanghye 已提交
624 625 626
	}
}

627 628
// BrowserEvent.SetOnDragEnter
func (m *BrowserEvent) SetOnDragEnter(event ChromiumEventOnDragEnter) {
yanghye's avatar
yanghye 已提交
629
	if Args.IsMain() {
630
		m.onDragEnter = event
631 632 633 634 635 636
	}
}

// BrowserEvent.SetOnDraggableRegionsChanged
func (m *BrowserEvent) SetOnDraggableRegionsChanged(event ChromiumEventOnDraggableRegionsChanged) {
	if Args.IsMain() {
637
		m.onDraggableRegionsChanged = event
yanghye's avatar
yanghye 已提交
638 639
	}
}